[FFmpeg-soc] [soc]: r1741 - in eac3: ac3dec.c ac3dec.h eac3dec.c

jbr subversion at mplayerhq.hu
Tue Jan 1 20:31:18 CET 2008


Author: jbr
Date: Tue Jan  1 20:31:18 2008
New Revision: 1741

Log:
use a common function to decode transform coefficients

Modified:
   eac3/ac3dec.c
   eac3/ac3dec.h
   eac3/eac3dec.c

Modified: eac3/ac3dec.c
==============================================================================
--- eac3/ac3dec.c	(original)
+++ eac3/ac3dec.c	Tue Jan  1 20:31:18 2008
@@ -424,7 +424,8 @@ void ff_ac3_uncouple_channels(AC3DecodeC
  * Get the transform coefficients for a particular channel
  * reference: Section 7.3 Quantization and Decoding of Mantissas
  */
-int ff_ac3_get_transform_coeffs_ch(AC3DecodeContext *s, int ch_index, mant_groups *m)
+static int ac3_get_transform_coeffs_ch(AC3DecodeContext *s, int ch_index,
+                                       mant_groups *m)
 {
     GetBitContext *gbc = &s->gbc;
     int i, gcode, tbap, start, end;
@@ -529,10 +530,26 @@ void ff_ac3_remove_dithering(AC3DecodeCo
     }
 }
 
+static int get_transform_coeffs_ch(AC3DecodeContext *s, int blk, int ch,
+                                   mant_groups *m)
+{
+    if (!s->eac3 || !s->channel_uses_aht[ch]) {
+        if(ac3_get_transform_coeffs_ch(s, ch, m))
+            return -1;
+    } else if (s->channel_uses_aht[ch] == 1) {
+        ff_eac3_get_transform_coeffs_aht_ch(s, ch);
+        s->channel_uses_aht[ch] = -1; /* AHT info for this frame has been read - do not read again */
+    }
+    if (s->eac3 && s->channel_uses_aht[ch]) {
+        ff_eac3_idct_transform_coeffs_ch(s, ch, blk);
+    }
+    return 0;
+}
+
 /**
  * Get the transform coefficients.
  */
-static int get_transform_coeffs(AC3DecodeContext *s)
+int ff_ac3_get_transform_coeffs(AC3DecodeContext *s, int blk)
 {
     int ch, end;
     int got_cplchan = 0;
@@ -542,17 +559,15 @@ static int get_transform_coeffs(AC3Decod
 
     for (ch = 1; ch <= s->channels; ch++) {
         /* transform coefficients for full-bandwidth channel */
-        if(ff_ac3_get_transform_coeffs_ch(s, ch, &m))
+        if(get_transform_coeffs_ch(s, blk, ch, &m))
             return -1;
         /* tranform coefficients for coupling channel come right after the
            coefficients for the first coupled channel*/
         if (s->channel_in_cpl[ch])  {
             if (!got_cplchan) {
-                if (ff_ac3_get_transform_coeffs_ch(s, CPL_CH, &m)) {
-                    av_log(s->avctx, AV_LOG_ERROR, "error in decoupling channels\n");
+                if (get_transform_coeffs_ch(s, blk, CPL_CH, &m)) {
                     return -1;
                 }
-                ff_ac3_uncouple_channels(s);
                 got_cplchan = 1;
             }
             end = s->end_freq[CPL_CH];
@@ -564,6 +579,10 @@ static int get_transform_coeffs(AC3Decod
         while(++end < 256);
     }
 
+    /* calculate transform coefficients for coupling range */
+    if(s->cpl_in_use[blk])
+        ff_ac3_uncouple_channels(s);
+
     /* if any channel doesn't use dithering, zero appropriate coefficients */
     if(!s->dither_all)
         ff_ac3_remove_dithering(s);
@@ -962,8 +981,8 @@ static int ac3_parse_audio_block(AC3Deco
 
     /* unpack the transform coefficients
        this also uncouples channels if coupling is in use. */
-    if (get_transform_coeffs(s)) {
-        av_log(s->avctx, AV_LOG_ERROR, "Error in routine get_transform_coeffs\n");
+    if (ff_ac3_get_transform_coeffs(s, blk)) {
+        av_log(s->avctx, AV_LOG_ERROR, "Error decoding transform coefficients\n");
         return -1;
     }
 

Modified: eac3/ac3dec.h
==============================================================================
--- eac3/ac3dec.h	(original)
+++ eac3/ac3dec.h	Tue Jan  1 20:31:18 2008
@@ -251,9 +251,11 @@ int ff_ac3_parse_frame_header(AC3DecodeC
 /* TEMPORARY SOLUTION */
 int ff_eac3_parse_header(AC3DecodeContext *s);
 int ff_eac3_parse_audio_block(AC3DecodeContext *s, int blk);
+void ff_eac3_get_transform_coeffs_aht_ch(AC3DecodeContext *s, int ch);
+void ff_eac3_idct_transform_coeffs_ch(AC3DecodeContext *s, int ch, int blk);
 void ff_eac3_tables_init(void);
 
-int ff_ac3_get_transform_coeffs_ch(AC3DecodeContext *s, int ch, mant_groups *m);
+int ff_ac3_get_transform_coeffs(AC3DecodeContext *s, int blk);
 
 void ff_ac3_uncouple_channels(AC3DecodeContext *s);
 

Modified: eac3/eac3dec.c
==============================================================================
--- eac3/eac3dec.c	(original)
+++ eac3/eac3dec.c	Tue Jan  1 20:31:18 2008
@@ -169,7 +169,7 @@ static void spectral_extension(AC3Decode
 }
 #endif
 
-static void get_transform_coeffs_aht_ch(AC3DecodeContext *s, int ch){
+void ff_eac3_get_transform_coeffs_aht_ch(AC3DecodeContext *s, int ch){
     int bin, blk, gs;
     int hebap, end_bap, gaq_mode, bits, pre_mantissa, remap, log_gain;
     float mant;
@@ -261,7 +261,7 @@ static void get_transform_coeffs_aht_ch(
     }
 }
 
-static void idct_transform_coeffs_ch(AC3DecodeContext *s, int ch, int blk){
+void ff_eac3_idct_transform_coeffs_ch(AC3DecodeContext *s, int ch, int blk){
     // TODO fast IDCT
     int bin, i;
     float tmp;
@@ -274,23 +274,6 @@ static void idct_transform_coeffs_ch(AC3
     }
 }
 
-static void get_eac3_transform_coeffs_ch(AC3DecodeContext *s, int blk,
-        int ch, mant_groups *m){
-    if (!s->channel_uses_aht[ch]) {
-        ff_ac3_get_transform_coeffs_ch(s, ch, m);
-    } else if (s->channel_uses_aht[ch] == 1) {
-        get_transform_coeffs_aht_ch(s, ch);
-        s->channel_uses_aht[ch] = -1; /* AHT info for this frame has been read - do not read again */
-    }
-    if (s->channel_uses_aht[ch]) {
-        idct_transform_coeffs_ch(s, ch, blk);
-    }
-
-    memset(s->transform_coeffs[ch]+s->end_freq[ch], 0,
-           sizeof(s->transform_coeffs[ch]) -
-           s->end_freq[ch] * sizeof(*s->transform_coeffs[ch]));
-}
-
 static int parse_bsi(AC3DecodeContext *s){
     int i, blk;
     GetBitContext *gbc = &s->gbc;
@@ -1122,21 +1105,11 @@ int ff_eac3_parse_audio_block(AC3DecodeC
     got_cplchan = 0;
 
     /* Quantized mantissa values */
-    for (ch = 1; ch <= s->channels; ch++) {
-        get_eac3_transform_coeffs_ch(s, blk, ch, &m);
-        if (s->cpl_in_use[blk] && s->channel_in_cpl[ch] && !got_cplchan) {
-            get_eac3_transform_coeffs_ch(s, blk, CPL_CH, &m);
-            got_cplchan = 1;
-        }
-    }
-
-    if (s->cpl_in_use[blk]) {
-        ff_ac3_uncouple_channels(s);
+    if(ff_ac3_get_transform_coeffs(s, blk)) {
+        av_log(s->avctx, AV_LOG_ERROR, "error decoding transform coefficients\n");
+        return -1;
     }
 
-    if(!s->dither_all)
-        ff_ac3_remove_dithering(s);
-
 #if 0
     //apply spectral extension
     if (s->spxinu)



More information about the FFmpeg-soc mailing list