From 6f4294219e2ec8f0190a84020aa67dfe969ebb66 Mon Sep 17 00:00:00 2001 From: Mohamed Tarek Date: Sat, 18 Jul 2009 00:29:19 +0000 Subject: 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 --- apps/codecs/libcook/cook.c | 25 ++++++++++++++++++------- apps/codecs/libcook/main.c | 6 +++--- 2 files changed, 21 insertions(+), 10 deletions(-) (limited to 'apps/codecs/libcook') diff --git a/apps/codecs/libcook/cook.c b/apps/codecs/libcook/cook.c index ba5fbab6a1..315fe0aaff 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 fd20f98871..3f5d3e8528 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); -- cgit v1.2.3