From 466b2ae2481477a2797f785c269e0a996401597b Mon Sep 17 00:00:00 2001 From: Mohamed Tarek Date: Fri, 14 Aug 2009 15:13:14 +0000 Subject: Factor out bytestream reading functions needed in rm parsers/codecs. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@22308 a1c6a512-1295-4272-9138-f99709370657 --- apps/codecs/libcook/cook.c | 20 +++++------------- apps/codecs/librm/bytestream.h | 37 ++++++++++++++++++++++++++++++++ apps/codecs/librm/rm.c | 48 ++++++++++++------------------------------ apps/codecs/librm/rm.h | 1 + apps/metadata/rm.c | 22 +++++-------------- 5 files changed, 62 insertions(+), 66 deletions(-) create mode 100644 apps/codecs/librm/bytestream.h diff --git a/apps/codecs/libcook/cook.c b/apps/codecs/libcook/cook.c index 7ad994926e..74f695e627 100644 --- a/apps/codecs/libcook/cook.c +++ b/apps/codecs/libcook/cook.c @@ -721,27 +721,17 @@ static void dump_cook_context(COOKContext *q) * Cook initialization */ -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 = get_uint32be(rmctx->codec_extradata); - q->samples_per_frame = get_uint16be(&rmctx->codec_extradata[4]); - q->subbands = get_uint16be(&rmctx->codec_extradata[6]); + q->cookversion = rm_get_uint32be(rmctx->codec_extradata); + q->samples_per_frame = rm_get_uint16be(&rmctx->codec_extradata[4]); + q->subbands = rm_get_uint16be(&rmctx->codec_extradata[6]); q->extradata_size = rmctx->extradata_size; if (q->extradata_size >= 16){ - q->js_subband_start = get_uint16be(&rmctx->codec_extradata[12]); - q->js_vlc_bits = get_uint16be(&rmctx->codec_extradata[14]); + q->js_subband_start = rm_get_uint16be(&rmctx->codec_extradata[12]); + q->js_vlc_bits = rm_get_uint16be(&rmctx->codec_extradata[14]); } /* Take data from the RMContext (RM container). */ diff --git a/apps/codecs/librm/bytestream.h b/apps/codecs/librm/bytestream.h new file mode 100644 index 0000000000..c2a968a4bd --- /dev/null +++ b/apps/codecs/librm/bytestream.h @@ -0,0 +1,37 @@ +#ifndef RM_BYTESTREAM_H +#define RM_BYTESTREAM_H + +#include + +static inline void advance_buffer(uint8_t **buf, int val) +{ + *buf += val; +} + +static inline uint8_t rm_get_uint8(uint8_t *buf) +{ + return (uint8_t)buf[0]; +} + +static inline uint16_t rm_get_uint16be(uint8_t *buf) +{ + return (uint16_t)((buf[0] << 8)|buf[1]); +} + +static inline uint32_t rm_get_uint32be(uint8_t *buf) +{ + return (uint32_t)((buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3]); +} + +static inline uint16_t rm_get_uint16le(uint8_t *buf) +{ + return (uint16_t)((buf[1] << 8)|buf[0]); +} + +static inline uint32_t rm_get_uint32le(uint8_t *buf) +{ + return (uint32_t)((buf[3] << 24) | (buf[2] << 16) | (buf[1] << 8) | buf[0]); +} + +#endif /* RM_BYTESTREAM_H */ + diff --git a/apps/codecs/librm/rm.c b/apps/codecs/librm/rm.c index 80ecbbbd97..d721ceb81f 100644 --- a/apps/codecs/librm/rm.c +++ b/apps/codecs/librm/rm.c @@ -29,26 +29,6 @@ #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; -} - -static uint8_t get_uint8(uint8_t *buf) -{ - return (uint8_t)buf[0]; -} - -static uint16_t get_uint16be(uint8_t *buf) -{ - return (uint16_t)((buf[0] << 8)|buf[1]); -} - -static uint32_t get_uint32be(uint8_t *buf) -{ - return (uint32_t)((buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3]); -} - #ifdef TEST #include #include @@ -99,12 +79,12 @@ static int read_uint32be(int fd, uint32_t* buf) static void print_cook_extradata(RMContext *rmctx) { - DEBUGF(" cook_version = 0x%08x\n", get_uint32be(rmctx->codec_extradata)); - DEBUGF(" samples_per_frame_per_channel = %d\n", get_uint16be(&rmctx->codec_extradata[4])); - DEBUGF(" number_of_subbands_in_freq_domain = %d\n", get_uint16be(&rmctx->codec_extradata[6])); + DEBUGF(" cook_version = 0x%08x\n", rm_get_uint32be(rmctx->codec_extradata)); + DEBUGF(" samples_per_frame_per_channel = %d\n", rm_get_uint16be(&rmctx->codec_extradata[4])); + DEBUGF(" number_of_subbands_in_freq_domain = %d\n", rm_get_uint16be(&rmctx->codec_extradata[6])); if(rmctx->extradata_size == 16) { - DEBUGF(" joint_stereo_subband_start = %d\n",get_uint16be(&rmctx->codec_extradata[12])); - DEBUGF(" joint_stereo_vlc_bits = %d\n", get_uint16be(&rmctx->codec_extradata[14])); + DEBUGF(" joint_stereo_subband_start = %d\n",rm_get_uint16be(&rmctx->codec_extradata[12])); + DEBUGF(" joint_stereo_vlc_bits = %d\n", rm_get_uint16be(&rmctx->codec_extradata[14])); } } @@ -532,7 +512,7 @@ int rm_get_packet(uint8_t **src,RMContext *rmctx, RMPacket *pkt) do { y = rmctx->sub_packet_cnt; - pkt->version = get_uint16be(*src); + pkt->version = rm_get_uint16be(*src); /* Simple error checking */ if(pkt->version != 0 && pkt->version != 1) @@ -541,18 +521,18 @@ int rm_get_packet(uint8_t **src,RMContext *rmctx, RMPacket *pkt) return -1; } - pkt->length = get_uint16be(*src+2); - pkt->stream_number = get_uint16be(*src+4); - pkt->timestamp = get_uint32be(*src+6); + pkt->length = rm_get_uint16be(*src+2); + pkt->stream_number = rm_get_uint16be(*src+4); + pkt->timestamp = rm_get_uint32be(*src+6); /*DEBUGF(" version = %d\n" " length = %d\n" " stream = %d\n" " timestamp= %d\n\n",pkt->version,pkt->length,pkt->stream_number,pkt->timestamp);*/ - unknown = get_uint8(*src+10); - pkt->flags = get_uint8(*src+11); + unknown = rm_get_uint8(*src+10); + pkt->flags = rm_get_uint8(*src+11); if(pkt->version == 1) - unknown = get_uint8(*src+10); + unknown = rm_get_uint8(*src+10); if (pkt->flags & 2) /* keyframe */ y = rmctx->sub_packet_cnt = 0; @@ -571,12 +551,12 @@ int rm_get_packet(uint8_t **src,RMContext *rmctx, RMPacket *pkt) } } else if (rmctx->codec_type == CODEC_AAC) { - rmctx->sub_packet_cnt = (get_uint16be(*src) & 0xf0) >> 4; + rmctx->sub_packet_cnt = (rm_get_uint16be(*src) & 0xf0) >> 4; advance_buffer(src, 2); consumed += 2; if (rmctx->sub_packet_cnt) { for(x = 0; x < rmctx->sub_packet_cnt; x++) { - rmctx->sub_packet_lengths[x] = get_uint16be(*src); + rmctx->sub_packet_lengths[x] = rm_get_uint16be(*src); advance_buffer(src, 2); consumed += 2; } diff --git a/apps/codecs/librm/rm.h b/apps/codecs/librm/rm.h index be88701989..c4a4e3a77e 100644 --- a/apps/codecs/librm/rm.h +++ b/apps/codecs/librm/rm.h @@ -23,6 +23,7 @@ #include #include +#include "bytestream.h" #define MAX_EXTRADATA_SIZE 16 #define DATA_HEADER_SIZE 18 diff --git a/apps/metadata/rm.c b/apps/metadata/rm.c index 9e42367c58..fd6f1d984c 100644 --- a/apps/metadata/rm.c +++ b/apps/metadata/rm.c @@ -38,26 +38,14 @@ #define DEBUGF(...) #endif -#ifdef DEBUG_RM -static uint16_t get_uint16be(uint8_t *buf) -{ - return (uint16_t)((buf[0] << 8)|buf[1]); -} - -static uint32_t get_uint32be(uint8_t *buf) -{ - return (uint32_t)((buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3]); -} -#endif - static inline void print_cook_extradata(RMContext *rmctx) { - DEBUGF(" cook_version = 0x%08lx\n", get_uint32be(rmctx->codec_extradata)); - DEBUGF(" samples_per_frame_per_channel = %d\n", get_uint16be(&rmctx->codec_extradata[4])); - DEBUGF(" number_of_subbands_in_freq_domain = %d\n", get_uint16be(&rmctx->codec_extradata[6])); + DEBUGF(" cook_version = 0x%08lx\n", rm_get_uint32be(rmctx->codec_extradata)); + DEBUGF(" samples_per_frame_per_channel = %d\n", rm_get_uint16be(&rmctx->codec_extradata[4])); + DEBUGF(" number_of_subbands_in_freq_domain = %d\n", rm_get_uint16be(&rmctx->codec_extradata[6])); if(rmctx->extradata_size == 16) { - DEBUGF(" joint_stereo_subband_start = %d\n",get_uint16be(&rmctx->codec_extradata[12])); - DEBUGF(" joint_stereo_vlc_bits = %d\n", get_uint16be(&rmctx->codec_extradata[14])); + DEBUGF(" joint_stereo_subband_start = %d\n",rm_get_uint16be(&rmctx->codec_extradata[12])); + DEBUGF(" joint_stereo_vlc_bits = %d\n", rm_get_uint16be(&rmctx->codec_extradata[14])); } } -- cgit v1.2.3