|
|
|
@@ -452,6 +452,7 @@ static void ac3_decode_transform_coeffs_ch(AC3DecodeContext *s, int ch_index, ma |
|
|
|
uint8_t *baps = s->bap[ch_index]; |
|
|
|
int8_t *exps = s->dexps[ch_index]; |
|
|
|
int *coeffs = s->fixed_coeffs[ch_index]; |
|
|
|
int dither = (ch_index == CPL_CH) || s->dither_flag[ch_index]; |
|
|
|
GetBitContext *gbc = &s->gbc; |
|
|
|
int freq; |
|
|
|
|
|
|
|
@@ -460,7 +461,10 @@ static void ac3_decode_transform_coeffs_ch(AC3DecodeContext *s, int ch_index, ma |
|
|
|
int mantissa; |
|
|
|
switch(bap){ |
|
|
|
case 0: |
|
|
|
if (dither) |
|
|
|
mantissa = (av_lfg_get(&s->dith_state) & 0x7FFFFF) - 0x400000; |
|
|
|
else |
|
|
|
mantissa = 0; |
|
|
|
break; |
|
|
|
case 1: |
|
|
|
if(m->b1){ |
|
|
|
@@ -517,33 +521,18 @@ static void ac3_decode_transform_coeffs_ch(AC3DecodeContext *s, int ch_index, ma |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* Remove random dithering from coefficients with zero-bit mantissas |
|
|
|
* Remove random dithering from coupling range coefficients with zero-bit |
|
|
|
* mantissas for coupled channels which do not use dithering. |
|
|
|
* reference: Section 7.3.4 Dither for Zero Bit Mantissas (bap=0) |
|
|
|
*/ |
|
|
|
static void remove_dithering(AC3DecodeContext *s) { |
|
|
|
int ch, i; |
|
|
|
int end=0; |
|
|
|
int *coeffs; |
|
|
|
uint8_t *bap; |
|
|
|
|
|
|
|
for(ch=1; ch<=s->fbw_channels; ch++) { |
|
|
|
if(!s->dither_flag[ch]) { |
|
|
|
coeffs = s->fixed_coeffs[ch]; |
|
|
|
bap = s->bap[ch]; |
|
|
|
if(s->channel_in_cpl[ch]) |
|
|
|
end = s->start_freq[CPL_CH]; |
|
|
|
else |
|
|
|
end = s->end_freq[ch]; |
|
|
|
for(i=0; i<end; i++) { |
|
|
|
if(!bap[i]) |
|
|
|
coeffs[i] = 0; |
|
|
|
} |
|
|
|
if(s->channel_in_cpl[ch]) { |
|
|
|
bap = s->bap[CPL_CH]; |
|
|
|
for(; i<s->end_freq[CPL_CH]; i++) { |
|
|
|
if(!bap[i]) |
|
|
|
coeffs[i] = 0; |
|
|
|
} |
|
|
|
if(!s->dither_flag[ch] && s->channel_in_cpl[ch]) { |
|
|
|
for(i = s->start_freq[CPL_CH]; i<s->end_freq[CPL_CH]; i++) { |
|
|
|
if(!s->bap[CPL_CH][i]) |
|
|
|
s->fixed_coeffs[ch][i] = 0; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|