changeset 7173:bc2fd265f52b libavcodec

Remove unpack() function, read the bitstream as needed
author vitor
date Mon, 30 Jun 2008 19:09:00 +0000
parents 6a88b6f05ea4
children 7c4589349c01
files ra288.c
diffstat 1 files changed, 8 insertions(+), 21 deletions(-) [+]
line wrap: on
line diff
--- a/ra288.c	Mon Jun 30 18:39:11 2008 +0000
+++ b/ra288.c	Mon Jun 30 19:09:00 2008 +0000
@@ -37,23 +37,8 @@
     float lhist[10];
 } Real288_internal;
 
-/* initial decode */
-static void unpack(unsigned short *tgt, const unsigned char *src,
-                   unsigned int len)
-{
-    int i = 0;
-    GetBitContext gb;
-
-    init_get_bits(&gb, src, len * 8);
-
-    while (get_bits_count(&gb) + 9 + (i&1) <= len*8) {
-        tgt[i] = get_bits(&gb, 9 + (i&1));
-        i++;
-    }
-}
-
 /* Decode and produce output */
-static void decode(Real288_internal *glob, unsigned int input)
+static void decode(Real288_internal *glob, int amp_coef, int cb_coef)
 {
     unsigned int x, y;
     float f;
@@ -72,8 +57,8 @@
         glob->sb[x] = sum;
     }
 
-    f = amptable[input & 7];
-    table = codetable + (input >> 3) * 5;
+    f = amptable[amp_coef];
+    table = codetable + cb_coef * 5;
 
     /* convert log and do rms */
     for (sum=32, x=10; x--; sum -= glob->pr2[x] * glob->lhist[x]);
@@ -225,13 +210,15 @@
 {
     int x, y;
     Real288_internal *glob = avctx->priv_data;
-    unsigned short int buffer[len];
+    GetBitContext gb;
 
-    unpack(buffer, in, len);
+    init_get_bits(&gb, in, len * 8);
 
     for (x=0; x < 32; x++) {
+        int amp_coef = get_bits(&gb, 3);
+        int cb_coef = get_bits(&gb, 6 + (x&1));
         glob->phasep = (glob->phase = x & 7) * 5;
-        decode(glob, buffer[x]);
+        decode(glob, amp_coef, cb_coef);
 
         for (y=0; y<5; *(out++) = 8 * glob->output[glob->phasep+(y++)]);