diff options
| author | Mohamed Tarek <mt@rockbox.org> | 2009-08-04 13:54:06 +0000 |
|---|---|---|
| committer | Mohamed Tarek <mt@rockbox.org> | 2009-08-04 13:54:06 +0000 |
| commit | 26cee86a0ca354ac15d46fb92db0cc9a776dd4b2 (patch) | |
| tree | 2b06da998cff4e4cdfcd7545b6d616116ec947e5 /apps/codecs/librm | |
| parent | 7996e773340698a6d8c7bcdc465b8a9245f65601 (diff) | |
| download | rockbox-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.c | 14 | ||||
| -rw-r--r-- | apps/codecs/librm/rm.h | 7 |
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 */ |