summaryrefslogtreecommitdiff
path: root/apps/codecs/libcook
diff options
context:
space:
mode:
authorMohamed Tarek <mt@rockbox.org>2009-07-18 00:29:19 +0000
committerMohamed Tarek <mt@rockbox.org>2009-07-18 00:29:19 +0000
commit6f4294219e2ec8f0190a84020aa67dfe969ebb66 (patch)
treeedf778074a46caa7eaf27a36b0eb2b706855c967 /apps/codecs/libcook
parent6539b535ad08a13d654db3185d78a8f86a75f6a6 (diff)
downloadrockbox-6f4294219e2ec8f0190a84020aa67dfe969ebb66.zip
rockbox-6f4294219e2ec8f0190a84020aa67dfe969ebb66.tar.gz
rockbox-6f4294219e2ec8f0190a84020aa67dfe969ebb66.tar.bz2
rockbox-6f4294219e2ec8f0190a84020aa67dfe969ebb66.tar.xz
Generic codec-extradata parsing, in preparation for addition of AAC/RM.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@21941 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/codecs/libcook')
-rw-r--r--apps/codecs/libcook/cook.c25
-rw-r--r--apps/codecs/libcook/main.c6
2 files changed, 21 insertions, 10 deletions
diff --git a/apps/codecs/libcook/cook.c b/apps/codecs/libcook/cook.c
index ba5fbab..315fe0a 100644
--- a/apps/codecs/libcook/cook.c
+++ b/apps/codecs/libcook/cook.c
@@ -708,16 +708,27 @@ static void dump_cook_context(COOKContext *q)
* Cook initialization
*/
-int cook_decode_init(RMContext *rmctx, COOKContext *q)
-{
+static inline uint16_t get_uint16be(uint8_t *buf)
+{
+ return (uint16_t)((buf[0] << 8)|buf[1]);
+}
+
+static inline uint32_t get_uint32be(uint8_t *buf)
+{
+ return (uint32_t)((buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3]);
+}
+
+ int cook_decode_init(RMContext *rmctx, COOKContext *q)
+ {
+
/* cook extradata */
- q->cookversion = rmctx->cook_version;
- q->samples_per_frame = rmctx->samples_pf_pc;
- q->subbands = rmctx->nb_subbands;
+ q->cookversion = get_uint32be(rmctx->codec_extradata);
+ q->samples_per_frame = get_uint16be(&rmctx->codec_extradata[4]);
+ q->subbands = get_uint16be(&rmctx->codec_extradata[6]);
q->extradata_size = rmctx->extradata_size;
if (q->extradata_size >= 16){
- q->js_subband_start = rmctx->js_subband_start;
- q->js_vlc_bits = rmctx->js_vlc_bits;
+ q->js_subband_start = get_uint16be(&rmctx->codec_extradata[12]);
+ q->js_vlc_bits = get_uint16be(&rmctx->codec_extradata[14]);
}
/* Take data from the RMContext (RM container). */
diff --git a/apps/codecs/libcook/main.c b/apps/codecs/libcook/main.c
index fd20f98..3f5d3e8 100644
--- a/apps/codecs/libcook/main.c
+++ b/apps/codecs/libcook/main.c
@@ -58,11 +58,11 @@ int open_wav(char* filename) {
return(fd);
}
-void close_wav(int fd, RMContext *rmctx) {
+void close_wav(int fd, RMContext *rmctx, COOKContext *q) {
int x,res;
int filesize;
int bytes_per_sample = 2;
- int samples_per_frame = rmctx->samples_pf_pc;
+ int samples_per_frame = q->samples_per_frame;
int nb_channels = rmctx->nb_channels;
int sample_rate = rmctx->sample_rate;
int nb_frames = rmctx->audio_framesize/rmctx->block_align * rmctx->nb_packets - 2; // first 2 frames have no valid audio; skipped in output
@@ -182,7 +182,7 @@ int main(int argc, char *argv[])
packet_count -= rmctx.audio_pkt_cnt;
rmctx.audio_pkt_cnt = 0;
}
- close_wav(fd_dec,&rmctx);
+ close_wav(fd_dec, &rmctx, &q);
close(fd);