diff 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
line wrap: on
line diff
--- a/amrnbdec.c	Fri Sep 10 19:25:42 2010 +0000
+++ b/amrnbdec.c	Fri Sep 10 19:51:08 2010 +0000
@@ -52,6 +52,7 @@
 #include "acelp_vectors.h"
 #include "acelp_pitch_delay.h"
 #include "lsp.h"
+#include "amr.h"
 
 #include "amrnbdata.h"
 
@@ -195,24 +196,9 @@
     p->bad_frame_indicator = !get_bits1(&gb); // quality bit
     skip_bits(&gb, 2);                        // two padding bits
 
-    if (mode < MODE_DTX) {
-        uint16_t *data = (uint16_t *)&p->frame;
-        const uint8_t *order = amr_unpacking_bitmaps_per_mode[mode];
-        int field_size;
-
-        memset(&p->frame, 0, sizeof(AMRNBFrame));
-        buf++;
-        while ((field_size = *order++)) {
-            int field = 0;
-            int field_offset = *order++;
-            while (field_size--) {
-               int bit = *order++;
-               field <<= 1;
-               field |= buf[bit >> 3] >> (bit & 7) & 1;
-            }
-            data[field_offset] = field;
-        }
-    }
+    if (mode < MODE_DTX)
+        ff_amr_bit_reorder((uint16_t *) &p->frame, sizeof(AMRNBFrame), buf + 1,
+                           amr_unpacking_bitmaps_per_mode[mode]);
 
     return mode;
 }