changeset 6123:8d88831a2777 libavcodec

fix phase flag processing for the case when coupling coordinates are reused for the right channel, but new for the left channel
author jbr
date Sun, 06 Jan 2008 20:15:24 +0000
parents 61f95f3a62e0
children d06c62429572
files ac3dec.c
diffstat 1 files changed, 7 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/ac3dec.c	Sun Jan 06 16:02:55 2008 +0000
+++ b/ac3dec.c	Sun Jan 06 20:15:24 2008 +0000
@@ -133,6 +133,7 @@
     int cpl_in_use;                         ///< coupling in use
     int channel_in_cpl[AC3_MAX_CHANNELS];   ///< channel in coupling
     int phase_flags_in_use;                 ///< phase flags in use
+    int phase_flags[18];                    ///< phase flags
     int cpl_band_struct[18];                ///< coupling band structure
     int rematrixing_strategy;               ///< rematrixing strategy
     int num_rematrixing_bands;              ///< number of rematrixing bands
@@ -470,8 +471,11 @@
             subbnd++;
             for(j=0; j<12; j++) {
                 for(ch=1; ch<=s->fbw_channels; ch++) {
-                    if(s->channel_in_cpl[ch])
+                    if(s->channel_in_cpl[ch]) {
                         s->transform_coeffs[ch][i] = s->transform_coeffs[CPL_CH][i] * s->cpl_coords[ch][bnd] * 8.0f;
+                        if (ch == 2 && s->phase_flags[bnd])
+                            s->transform_coeffs[ch][i] = -s->transform_coeffs[ch][i];
+                    }
                 }
                 i++;
             }
@@ -866,10 +870,9 @@
             }
         }
         /* phase flags */
-        if (channel_mode == AC3_CHMODE_STEREO && s->phase_flags_in_use && cpl_coords_exist) {
+        if (channel_mode == AC3_CHMODE_STEREO && cpl_coords_exist) {
             for (bnd = 0; bnd < s->num_cpl_bands; bnd++) {
-                if (get_bits1(gbc))
-                    s->cpl_coords[2][bnd] = -s->cpl_coords[2][bnd];
+                s->phase_flags[bnd] = s->phase_flags_in_use? get_bits1(gbc) : 0;
             }
         }
     }