[FFmpeg-soc] [soc]: r4491 - in wmapro: wma3data.h wma3dec.c

faust3 subversion at mplayerhq.hu
Sat Jun 20 13:24:19 CEST 2009


Author: faust3
Date: Sat Jun 20 13:24:19 2009
New Revision: 4491

Log:
Use the shared wma run level decoding function

Modified:
   wmapro/wma3data.h
   wmapro/wma3dec.c

Modified: wmapro/wma3data.h
==============================================================================
--- wmapro/wma3data.h	Fri Jun 19 15:38:27 2009	(r4490)
+++ wmapro/wma3data.h	Sat Jun 20 13:24:19 2009	(r4491)
@@ -326,7 +326,7 @@ static const uint8_t coef1_huffbits[HUFF
 };
 
 
-static const uint8_t coef0_run[HUFF_COEF0_SIZE] = {
+static const uint16_t coef0_run[HUFF_COEF0_SIZE] = {
       0,   0,   0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,
      12,  13,  14,  15,  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,
      26,  27,  28,  29,  30,  31,  32,  33,  34,  35,  36,  37,  38,  39,
@@ -349,7 +349,7 @@ static const uint8_t coef0_run[HUFF_COEF
       1,   0,   1,   0,   1,   0,
 };
 
-static const uint8_t coef0_level[HUFF_COEF0_SIZE] = {
+static const uint16_t coef0_level[HUFF_COEF0_SIZE] = {
       0,   0,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
       1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
       1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
@@ -373,7 +373,7 @@ static const uint8_t coef0_level[HUFF_CO
 };
 
 
-static const uint8_t coef1_run[HUFF_COEF1_SIZE] = {
+static const uint16_t coef1_run[HUFF_COEF1_SIZE] = {
      0,  0,  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,
     16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
     34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
@@ -390,7 +390,7 @@ static const uint8_t coef1_run[HUFF_COEF
      1,  0,  1,  0,  1,  0,  1,  0,  0,  0,
 };
 
-static const uint8_t coef1_level[HUFF_COEF1_SIZE] = {
+static const uint16_t coef1_level[HUFF_COEF1_SIZE] = {
      0,  0,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
      1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
      1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,

Modified: wmapro/wma3dec.c
==============================================================================
--- wmapro/wma3dec.c	Fri Jun 19 15:38:27 2009	(r4490)
+++ wmapro/wma3dec.c	Sat Jun 20 13:24:19 2009	(r4491)
@@ -819,28 +819,6 @@ static int decode_channel_transform(WMA3
 }
 
 /**
- *@brief Decode an uncompressed coefficient.
- *@param s codec context
- *@return the decoded coefficient
- */
-static unsigned int get_large_val(WMA3DecodeContext* s)
-{
-    /** consumes up to 34 bits */
-    int n_bits = 8;
-    /** decode length */
-    if (get_bits1(&s->gb)) {
-        n_bits += 8;
-        if (get_bits1(&s->gb)) {
-            n_bits += 8;
-            if (get_bits1(&s->gb)) {
-                n_bits += 7;
-            }
-        }
-    }
-    return get_bits_long(&s->gb,n_bits);
-}
-
-/**
  *@brief Extract the coefficients from the bitstream.
  *@param s codec context
  *@param c current channel number
@@ -855,8 +833,8 @@ static int decode_coeffs(WMA3DecodeConte
     int rl_mode = 0;
     int cur_coeff = 0;
     int num_zeros = 0;
-    const uint8_t* run;
-    const uint8_t* level;
+    const uint16_t* run;
+    const uint16_t* level;
     int zero_init = 0;
     int rl_switchmask = (s->subframe_len>>8);
 
@@ -896,10 +874,10 @@ static int decode_coeffs(WMA3DecodeConte
                 if ( idx == HUFF_VEC2_SIZE - 1 ) {
                     vals[i] = get_vlc2(&s->gb, vec1_vlc.table, VLCBITS, VEC1MAXDEPTH);
                     if (vals[i] == HUFF_VEC1_SIZE - 1)
-                        vals[i] += get_large_val(s);
+                        vals[i] += ff_wma_get_large_val(&s->gb);
                     vals[i+1] = get_vlc2(&s->gb, vec1_vlc.table, VLCBITS, VEC1MAXDEPTH);
                     if (vals[i+1] == HUFF_VEC1_SIZE - 1)
-                        vals[i+1] += get_large_val(s);
+                        vals[i+1] += ff_wma_get_large_val(&s->gb);
                 } else {
                     vals[i] = (symbol_to_vec2[idx] >> 4) & 0xF;
                     vals[i+1] = symbol_to_vec2[idx] & 0xF;
@@ -930,38 +908,11 @@ static int decode_coeffs(WMA3DecodeConte
 
     /** decode run level coded coefficients */
     if (rl_mode) {
-        const unsigned int coeff_mask = s->subframe_len - 1;
-        while (cur_coeff < s->subframe_len) {
-            unsigned int idx;
-            int sign;
-            int val;
-            idx = get_vlc2(&s->gb, vlc->table, VLCBITS, vlcmax);
-
-            if ( idx > 1) {
-                cur_coeff += run[idx];
-                val = level[idx];
-            } else if ( idx == 1) {
-                break;
-            } else {
-                val = get_large_val(s);
-                /** escape decode */
-                if (get_bits1(&s->gb)) {
-                    if (get_bits1(&s->gb)) {
-                        if (get_bits1(&s->gb)) {
-                            av_log(s->avctx,AV_LOG_ERROR,
-                                   "broken escape sequence\n");
-                            return 0;
-                        } else
-                            cur_coeff += get_bits(&s->gb,s->esc_len) + 4;
-                    } else
-                        cur_coeff += get_bits(&s->gb,2) + 1;
-                }
-            }
-            /** decode sign */
-            sign = get_bits1(&s->gb) - 1;
-            ci->coeffs[cur_coeff & coeff_mask] = (val^sign) - sign;
-            ++cur_coeff;
-        }
+        if(ff_wma_run_level_decode(s->avctx, &s->gb, vlc,
+                             level, run, 1, ci->coeffs,
+                             cur_coeff, s->subframe_len, s->subframe_len,
+                             s->esc_len, 0))
+            return -1;
     }
 
     return 1;


More information about the FFmpeg-soc mailing list