diff options
Diffstat (limited to 'apps/codecs/librm')
-rw-r--r-- | apps/codecs/librm/rm.c | 31 | ||||
-rw-r--r-- | apps/codecs/librm/rm.h | 16 |
2 files changed, 14 insertions, 33 deletions
diff --git a/apps/codecs/librm/rm.c b/apps/codecs/librm/rm.c index bfad7e8b36..c9c40986ba 100644 --- a/apps/codecs/librm/rm.c +++ b/apps/codecs/librm/rm.c | |||
@@ -95,27 +95,14 @@ static int read_uint32be(int fd, uint32_t* buf) | |||
95 | } | 95 | } |
96 | 96 | ||
97 | 97 | ||
98 | |||
99 | static int read_cook_extradata(int fd, RMContext *rmctx) { | ||
100 | read_uint32be(fd, &rmctx->cook_version); | ||
101 | read_uint16be(fd, &rmctx->samples_pf_pc); | ||
102 | read_uint16be(fd, &rmctx->nb_subbands); | ||
103 | if(rmctx->extradata_size == 16) { | ||
104 | read_uint32be(fd, &rmctx->unused); | ||
105 | read_uint16be(fd, &rmctx->js_subband_start); | ||
106 | read_uint16be(fd, &rmctx->js_vlc_bits); | ||
107 | } | ||
108 | return rmctx->extradata_size; /* for 'skipped' */ | ||
109 | } | ||
110 | |||
111 | static void print_cook_extradata(RMContext *rmctx) { | 98 | static void print_cook_extradata(RMContext *rmctx) { |
112 | 99 | ||
113 | DEBUGF(" cook_version = 0x%08x\n", rmctx->cook_version); | 100 | DEBUGF(" cook_version = 0x%08x\n", get_uint32be(rmctx->codec_extradata)); |
114 | DEBUGF(" samples_per_frame_per_channel = %d\n", rmctx->samples_pf_pc); | 101 | DEBUGF(" samples_per_frame_per_channel = %d\n", get_uint16be(&rmctx->codec_extradata[4])); |
115 | DEBUGF(" number_of_subbands_in_freq_domain = %d\n", rmctx->nb_subbands); | 102 | DEBUGF(" number_of_subbands_in_freq_domain = %d\n", get_uint16be(&rmctx->codec_extradata[6])); |
116 | if(rmctx->extradata_size == 16) { | 103 | if(rmctx->extradata_size == 16) { |
117 | DEBUGF(" joint_stereo_subband_start = %d\n",rmctx->js_subband_start); | 104 | DEBUGF(" joint_stereo_subband_start = %d\n",get_uint16be(&rmctx->codec_extradata[12])); |
118 | DEBUGF(" joint_stereo_vlc_bits = %d\n", rmctx->js_vlc_bits); | 105 | DEBUGF(" joint_stereo_vlc_bits = %d\n", get_uint16be(&rmctx->codec_extradata[14])); |
119 | } | 106 | } |
120 | } | 107 | } |
121 | 108 | ||
@@ -250,10 +237,8 @@ static int real_read_audio_stream_info(int fd, RMContext *rmctx) | |||
250 | 237 | ||
251 | read_uint32be(fd, &rmctx->extradata_size); | 238 | read_uint32be(fd, &rmctx->extradata_size); |
252 | skipped += 4; | 239 | skipped += 4; |
253 | if(!strncmp(fourcc2str(fourcc),"cook",4)){ | 240 | read(fd, rmctx->codec_extradata, rmctx->extradata_size); |
254 | skipped += read_cook_extradata(fd, rmctx); | 241 | skipped += rmctx->extradata_size; |
255 | rmctx->codec_type = cook; | ||
256 | } | ||
257 | 242 | ||
258 | 243 | ||
259 | DEBUGF(" flavor = %d\n",flavor); | 244 | DEBUGF(" flavor = %d\n",flavor); |
diff --git a/apps/codecs/librm/rm.h b/apps/codecs/librm/rm.h index a0c386e824..ee72c1fc04 100644 --- a/apps/codecs/librm/rm.h +++ b/apps/codecs/librm/rm.h | |||
@@ -24,7 +24,9 @@ | |||
24 | #include <stdio.h> | 24 | #include <stdio.h> |
25 | #include <inttypes.h> | 25 | #include <inttypes.h> |
26 | 26 | ||
27 | enum codecs{cook}; | 27 | #define MAX_EXTRADATA_SIZE 16 |
28 | |||
29 | enum codecs{cook, aac}; | ||
28 | typedef struct rm_packet | 30 | typedef struct rm_packet |
29 | { | 31 | { |
30 | uint8_t *frames[100]; /* Pointers to ordered audio frames in buffer */ | 32 | uint8_t *frames[100]; /* Pointers to ordered audio frames in buffer */ |
@@ -62,20 +64,14 @@ typedef struct rm_context | |||
62 | uint16_t block_align; | 64 | uint16_t block_align; |
63 | uint32_t nb_packets; | 65 | uint32_t nb_packets; |
64 | int frame_number; | 66 | int frame_number; |
65 | uint32_t extradata_size; | ||
66 | uint16_t sample_rate; | 67 | uint16_t sample_rate; |
67 | uint16_t nb_channels; | 68 | uint16_t nb_channels; |
68 | uint32_t bit_rate; | 69 | uint32_t bit_rate; |
69 | uint16_t flags; | 70 | uint16_t flags; |
70 | 71 | ||
71 | /*cook extradata*/ | 72 | /*codec extradata*/ |
72 | uint32_t cook_version; | 73 | uint32_t extradata_size; |
73 | uint16_t samples_pf_pc; /* samples per frame per channel */ | 74 | uint8_t codec_extradata[MAX_EXTRADATA_SIZE]; |
74 | uint16_t nb_subbands; /* number of subbands in the frequency domain */ | ||
75 | /* extra 8 bytes for joint-stereo data */ | ||
76 | uint32_t unused; | ||
77 | uint16_t js_subband_start; /* joint stereo subband start */ | ||
78 | uint16_t js_vlc_bits; | ||
79 | 75 | ||
80 | } RMContext; | 76 | } RMContext; |
81 | 77 | ||