summaryrefslogtreecommitdiff
path: root/libavcodec/ac3dec.c
diff options
context:
space:
mode:
authorLoren Merritt <lorenm@u.washington.edu>2008-08-13 23:30:28 +0000
committerLoren Merritt <lorenm@u.washington.edu>2008-08-13 23:30:28 +0000
commit3b6516f7e7bb33b7aef9fa25adbf45f3de6c0560 (patch)
tree488ed08d4c3cf777003da210b2a3725382c9d566 /libavcodec/ac3dec.c
parentda0def34ec2b9564f4a7e1d88494283fab87f6e0 (diff)
oops, non-normalized downmix to mono contaminated add_bias for non-simd float-to-int.
Originally committed as revision 14740 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/ac3dec.c')
-rw-r--r--libavcodec/ac3dec.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/libavcodec/ac3dec.c b/libavcodec/ac3dec.c
index 14b8dd90ae..d6f5d8a79b 100644
--- a/libavcodec/ac3dec.c
+++ b/libavcodec/ac3dec.c
@@ -606,6 +606,9 @@ static void do_rematrixing(AC3DecodeContext *s)
static inline void do_imdct(AC3DecodeContext *s, int channels)
{
int ch;
+ float add_bias = s->add_bias;
+ if(s->out_channels==1 && channels>1)
+ add_bias *= LEVEL_MINUS_3DB; // compensate for the gain in downmix
for (ch=1; ch<=channels; ch++) {
if (s->block_switch[ch]) {
@@ -614,13 +617,13 @@ static inline void do_imdct(AC3DecodeContext *s, int channels)
for(i=0; i<128; i++)
x[i] = s->transform_coeffs[ch][2*i];
ff_imdct_half(&s->imdct_256, s->tmp_output, x);
- s->dsp.vector_fmul_window(s->output[ch-1], s->delay[ch-1], s->tmp_output, s->window, s->add_bias, 128);
+ s->dsp.vector_fmul_window(s->output[ch-1], s->delay[ch-1], s->tmp_output, s->window, add_bias, 128);
for(i=0; i<128; i++)
x[i] = s->transform_coeffs[ch][2*i+1];
ff_imdct_half(&s->imdct_256, s->delay[ch-1], x);
} else {
ff_imdct_half(&s->imdct_512, s->tmp_output, s->transform_coeffs[ch]);
- s->dsp.vector_fmul_window(s->output[ch-1], s->delay[ch-1], s->tmp_output, s->window, s->add_bias, 128);
+ s->dsp.vector_fmul_window(s->output[ch-1], s->delay[ch-1], s->tmp_output, s->window, add_bias, 128);
memcpy(s->delay[ch-1], s->tmp_output+128, 128*sizeof(float));
}
}