Mercurial > libavcodec.hg
comparison amrnbdec.c @ 12485:b42e02e9bf2b libavcodec
Move AMR-NB frame unpacking code to a common file so it can be reused in
the AMR-WB decoder.
Patch by Marcelo Galvo Pvoa.
author | vitor |
---|---|
date | Fri, 10 Sep 2010 19:51:08 +0000 |
parents | 2dd67ed2f947 |
children |
comparison
equal
deleted
inserted
replaced
12484:01562fcb773d | 12485:b42e02e9bf2b |
---|---|
50 #include "celp_filters.h" | 50 #include "celp_filters.h" |
51 #include "acelp_filters.h" | 51 #include "acelp_filters.h" |
52 #include "acelp_vectors.h" | 52 #include "acelp_vectors.h" |
53 #include "acelp_pitch_delay.h" | 53 #include "acelp_pitch_delay.h" |
54 #include "lsp.h" | 54 #include "lsp.h" |
55 #include "amr.h" | |
55 | 56 |
56 #include "amrnbdata.h" | 57 #include "amrnbdata.h" |
57 | 58 |
58 #define AMR_BLOCK_SIZE 160 ///< samples per frame | 59 #define AMR_BLOCK_SIZE 160 ///< samples per frame |
59 #define AMR_SAMPLE_BOUND 32768.0 ///< threshold for synthesis overflow | 60 #define AMR_SAMPLE_BOUND 32768.0 ///< threshold for synthesis overflow |
193 skip_bits(&gb, 1); // padding bit | 194 skip_bits(&gb, 1); // padding bit |
194 mode = get_bits(&gb, 4); // frame type | 195 mode = get_bits(&gb, 4); // frame type |
195 p->bad_frame_indicator = !get_bits1(&gb); // quality bit | 196 p->bad_frame_indicator = !get_bits1(&gb); // quality bit |
196 skip_bits(&gb, 2); // two padding bits | 197 skip_bits(&gb, 2); // two padding bits |
197 | 198 |
198 if (mode < MODE_DTX) { | 199 if (mode < MODE_DTX) |
199 uint16_t *data = (uint16_t *)&p->frame; | 200 ff_amr_bit_reorder((uint16_t *) &p->frame, sizeof(AMRNBFrame), buf + 1, |
200 const uint8_t *order = amr_unpacking_bitmaps_per_mode[mode]; | 201 amr_unpacking_bitmaps_per_mode[mode]); |
201 int field_size; | |
202 | |
203 memset(&p->frame, 0, sizeof(AMRNBFrame)); | |
204 buf++; | |
205 while ((field_size = *order++)) { | |
206 int field = 0; | |
207 int field_offset = *order++; | |
208 while (field_size--) { | |
209 int bit = *order++; | |
210 field <<= 1; | |
211 field |= buf[bit >> 3] >> (bit & 7) & 1; | |
212 } | |
213 data[field_offset] = field; | |
214 } | |
215 } | |
216 | 202 |
217 return mode; | 203 return mode; |
218 } | 204 } |
219 | 205 |
220 | 206 |