[FFmpeg-cvslog] dcadec: set the output channel mode more accurately.

Tim Walker git at videolan.org
Sun Jan 5 22:33:49 CET 2014


ffmpeg | branch: master | Tim Walker <tdskywalker at gmail.com> | Wed Dec 11 02:03:30 2013 +0000| [6bfdb2de881372048be7fbda643417e1fd3ce93c] | committer: Tim Walker

dcadec: set the output channel mode more accurately.

When downmixing 2.1 to 2-channel, if the 2.0 portion is Lt/Rt, sum-difference or dual mono, the actual output will be the same (with the LFE either mixed-in or discarded).

Also, when downmixing an arbitrary layout to 2-channel, if the bitstream contains custom downmix coefficients targeting Lt/Rt, then the output will be Lt/Rt rather than regular Stereo.

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=6bfdb2de881372048be7fbda643417e1fd3ce93c
---

 libavcodec/dcadec.c |    3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/libavcodec/dcadec.c b/libavcodec/dcadec.c
index aa713f3..f3afb4e 100644
--- a/libavcodec/dcadec.c
+++ b/libavcodec/dcadec.c
@@ -1890,7 +1890,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
         if (s->prim_channels + !!s->lfe > 2 &&
             avctx->request_channel_layout == AV_CH_LAYOUT_STEREO) {
             channels = 2;
-            s->output = DCA_STEREO;
+            s->output = s->prim_channels == 2 ? s->amode : DCA_STEREO;
             avctx->channel_layout = AV_CH_LAYOUT_STEREO;
 
             /* Stereo downmix coefficients
@@ -1911,6 +1911,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
                     s->downmix_coef[i][1] = (!code ? 0.0f :
                                              sign * dca_dmixtable[code - 1]);
                 }
+                s->output = s->core_downmix_amode;
             } else {
                 int am = s->amode & DCA_CHANNEL_MASK;
                 if (am >= FF_ARRAY_ELEMS(dca_default_coeffs)) {



More information about the ffmpeg-cvslog mailing list