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