[FFmpeg-cvslog] dca: Move the downmix request check outside the loop
Anton Khirnov
git at videolan.org
Mon Oct 30 18:53:44 EET 2017
ffmpeg | branch: master | Anton Khirnov <anton at khirnov.net> | Mon Apr 24 22:39:32 2017 +0200| [3889dfde9c0284b008c5cfcbc921c1d137fb81e2] | committer: Luca Barbato
dca: Move the downmix request check outside the loop
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=3889dfde9c0284b008c5cfcbc921c1d137fb81e2
---
libavcodec/dcadec.c | 11 +++++++----
1 file changed, 7 insertions(+), 4 deletions(-)
diff --git a/libavcodec/dcadec.c b/libavcodec/dcadec.c
index 3fe46cdc5c..9c1f878239 100644
--- a/libavcodec/dcadec.c
+++ b/libavcodec/dcadec.c
@@ -932,7 +932,7 @@ static int dca_subsubframe(DCAContext *s, int base_channel, int block_index)
return 0;
}
-static int dca_filter_channels(DCAContext *s, int block_index, int upsample)
+static int dca_filter_channels(DCAContext *s, int block_index, int upsample, int downmix)
{
int k;
@@ -1000,8 +1000,7 @@ static int dca_filter_channels(DCAContext *s, int block_index, int upsample)
/* FIXME: This downmixing is probably broken with upsample.
* Probably totally broken also with XLL in general. */
/* Downmixing to Stereo */
- if (s->audio_header.prim_channels + !!s->lfe > 2 &&
- s->avctx->request_channel_layout == AV_CH_LAYOUT_STEREO) {
+ if (downmix) {
dca_downmix(s->samples_chanptr, s->amode, !!s->lfe, s->downmix_coef,
s->channel_order_tab);
}
@@ -1378,6 +1377,7 @@ static int dca_decode_frame(AVCodecContext *avctx, void *data,
DCAContext *s = avctx->priv_data;
int channels, full_channels;
int upsample = 0;
+ int downmix;
s->exss_ext_mask = 0;
s->xch_present = 0;
@@ -1488,6 +1488,9 @@ static int dca_decode_frame(AVCodecContext *avctx, void *data,
return ret;
}
+ downmix = s->audio_header.prim_channels > 2 &&
+ avctx->request_channel_layout == AV_CH_LAYOUT_STEREO;
+
/* filter to get final output */
for (i = 0; i < (s->sample_blocks / SAMPLES_PER_SUBBAND); i++) {
int ch;
@@ -1497,7 +1500,7 @@ static int dca_decode_frame(AVCodecContext *avctx, void *data,
for (; ch < full_channels; ch++)
s->samples_chanptr[ch] = s->extra_channels[ch - channels] + i * block;
- dca_filter_channels(s, i, upsample);
+ dca_filter_channels(s, i, upsample, downmix);
/* If this was marked as a DTS-ES stream we need to subtract back- */
/* channel from SL & SR to remove matrixed back-channel signal */
More information about the ffmpeg-cvslog
mailing list