diff options
author | Loren Merritt <lorenm@u.washington.edu> | 2008-08-13 23:30:28 +0000 |
---|---|---|
committer | Loren Merritt <lorenm@u.washington.edu> | 2008-08-13 23:30:28 +0000 |
commit | 3b6516f7e7bb33b7aef9fa25adbf45f3de6c0560 (patch) | |
tree | 488ed08d4c3cf777003da210b2a3725382c9d566 | |
parent | da0def34ec2b9564f4a7e1d88494283fab87f6e0 (diff) | |
download | ffmpeg-3b6516f7e7bb33b7aef9fa25adbf45f3de6c0560.tar.gz |
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
-rw-r--r-- | libavcodec/ac3dec.c | 7 |
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)); } } |