You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-15 14:13:16 +02:00
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.
This commit is contained in:
@@ -1890,7 +1890,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
|
|||||||
if (s->prim_channels + !!s->lfe > 2 &&
|
if (s->prim_channels + !!s->lfe > 2 &&
|
||||||
avctx->request_channel_layout == AV_CH_LAYOUT_STEREO) {
|
avctx->request_channel_layout == AV_CH_LAYOUT_STEREO) {
|
||||||
channels = 2;
|
channels = 2;
|
||||||
s->output = DCA_STEREO;
|
s->output = s->prim_channels == 2 ? s->amode : DCA_STEREO;
|
||||||
avctx->channel_layout = AV_CH_LAYOUT_STEREO;
|
avctx->channel_layout = AV_CH_LAYOUT_STEREO;
|
||||||
|
|
||||||
/* Stereo downmix coefficients
|
/* Stereo downmix coefficients
|
||||||
@@ -1911,6 +1911,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
|
|||||||
s->downmix_coef[i][1] = (!code ? 0.0f :
|
s->downmix_coef[i][1] = (!code ? 0.0f :
|
||||||
sign * dca_dmixtable[code - 1]);
|
sign * dca_dmixtable[code - 1]);
|
||||||
}
|
}
|
||||||
|
s->output = s->core_downmix_amode;
|
||||||
} else {
|
} else {
|
||||||
int am = s->amode & DCA_CHANNEL_MASK;
|
int am = s->amode & DCA_CHANNEL_MASK;
|
||||||
if (am >= FF_ARRAY_ELEMS(dca_default_coeffs)) {
|
if (am >= FF_ARRAY_ELEMS(dca_default_coeffs)) {
|
||||||
|
Reference in New Issue
Block a user