summaryrefslogtreecommitdiff
path: root/apps/codecs/librm
diff options
context:
space:
mode:
authorMohamed Tarek <mt@rockbox.org>2009-08-04 13:54:06 +0000
committerMohamed Tarek <mt@rockbox.org>2009-08-04 13:54:06 +0000
commit26cee86a0ca354ac15d46fb92db0cc9a776dd4b2 (patch)
tree2b06da998cff4e4cdfcd7545b6d616116ec947e5 /apps/codecs/librm
parent7996e773340698a6d8c7bcdc465b8a9245f65601 (diff)
downloadrockbox-26cee86a0ca354ac15d46fb92db0cc9a776dd4b2.zip
rockbox-26cee86a0ca354ac15d46fb92db0cc9a776dd4b2.tar.gz
rockbox-26cee86a0ca354ac15d46fb92db0cc9a776dd4b2.tar.bz2
rockbox-26cee86a0ca354ac15d46fb92db0cc9a776dd4b2.tar.xz
Add support for AC3 audio in RM container.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@22155 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/codecs/librm')
-rw-r--r--apps/codecs/librm/rm.c14
-rw-r--r--apps/codecs/librm/rm.h7
2 files changed, 18 insertions, 3 deletions
diff --git a/apps/codecs/librm/rm.c b/apps/codecs/librm/rm.c
index c802a0c..b205e7f 100644
--- a/apps/codecs/librm/rm.c
+++ b/apps/codecs/librm/rm.c
@@ -27,6 +27,8 @@
#include "codeclib.h"
#endif
+#define SWAP(a, b) do{uint8_t SWAP_tmp= b; b= a; a= SWAP_tmp;}while(0)
+
void advance_buffer(uint8_t **buf, int val)
{
*buf += val;
@@ -464,7 +466,6 @@ void rm_get_packet_fd(int fd,RMContext *rmctx, RMPacket *pkt)
" stream = %d\n"
" timestmp= %d\n",pkt->version,pkt->length,pkt->stream_number,pkt->timestamp);
- //getchar();
if(pkt->version == 0)
{
read_uint8(fd,&packet_group);
@@ -550,7 +551,16 @@ int rm_get_packet(uint8_t **src,RMContext *rmctx, RMPacket *pkt)
}
rmctx->audio_pkt_cnt = --rmctx->sub_packet_cnt;
}
- }
+ }
+
+ else if (rmctx->codec_type == CODEC_AC3) {
+ /* The byte order of the data is reversed from standard AC3 */
+ for(x = 0; x < pkt->length - PACKET_HEADER_SIZE; x+=2) {
+ SWAP((*src)[0], (*src)[1]);
+ *src += 2;
+ }
+ *src -= x;
+ }
rmctx->audio_pkt_cnt++;
}while(++(rmctx->sub_packet_cnt) < h);
diff --git a/apps/codecs/librm/rm.h b/apps/codecs/librm/rm.h
index 12e9b18..86fe5e7 100644
--- a/apps/codecs/librm/rm.h
+++ b/apps/codecs/librm/rm.h
@@ -28,7 +28,12 @@
#define DATA_HEADER_SIZE 18
#define PACKET_HEADER_SIZE 12
-enum codecs{CODEC_COOK, CODEC_AAC};
+enum codecs {
+ CODEC_COOK,
+ CODEC_AAC,
+ CODEC_AC3
+};
+
typedef struct rm_packet
{
uint8_t *frames[100]; /* Pointers to ordered audio frames in buffer */