mirror of https://git.ffmpeg.org/ffmpeg.git
dcadec: Use correct channel count in stereo downmix check
s->prim_channels is greater than num_core_channels when an XCh extension is present in the bitstream. Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
This commit is contained in:
parent
c8cf461c19
commit
801c39e1e3
|
@ -1890,7 +1890,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
|
||||||
s->channel_order_tab[channels - 1 - !!s->lfe] < 0)
|
s->channel_order_tab[channels - 1 - !!s->lfe] < 0)
|
||||||
return AVERROR_INVALIDDATA;
|
return AVERROR_INVALIDDATA;
|
||||||
|
|
||||||
if (s->prim_channels + !!s->lfe > 2 &&
|
if (num_core_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 = s->prim_channels == 2 ? s->amode : DCA_STEREO;
|
s->output = s->prim_channels == 2 ? s->amode : DCA_STEREO;
|
||||||
|
@ -1904,7 +1904,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
|
||||||
if (s->core_downmix && (s->core_downmix_amode == DCA_STEREO ||
|
if (s->core_downmix && (s->core_downmix_amode == DCA_STEREO ||
|
||||||
s->core_downmix_amode == DCA_STEREO_TOTAL)) {
|
s->core_downmix_amode == DCA_STEREO_TOTAL)) {
|
||||||
int sign, code;
|
int sign, code;
|
||||||
for (i = 0; i < s->prim_channels + !!s->lfe; i++) {
|
for (i = 0; i < num_core_channels + !!s->lfe; i++) {
|
||||||
sign = s->core_downmix_codes[i][0] & 0x100 ? 1 : -1;
|
sign = s->core_downmix_codes[i][0] & 0x100 ? 1 : -1;
|
||||||
code = s->core_downmix_codes[i][0] & 0x0FF;
|
code = s->core_downmix_codes[i][0] & 0x0FF;
|
||||||
s->downmix_coef[i][0] = (!code ? 0.0f :
|
s->downmix_coef[i][0] = (!code ? 0.0f :
|
||||||
|
@ -1922,19 +1922,19 @@ FF_ENABLE_DEPRECATION_WARNINGS
|
||||||
"Invalid channel mode %d\n", am);
|
"Invalid channel mode %d\n", am);
|
||||||
return AVERROR_INVALIDDATA;
|
return AVERROR_INVALIDDATA;
|
||||||
}
|
}
|
||||||
if (s->prim_channels + !!s->lfe >
|
if (num_core_channels + !!s->lfe >
|
||||||
FF_ARRAY_ELEMS(dca_default_coeffs[0])) {
|
FF_ARRAY_ELEMS(dca_default_coeffs[0])) {
|
||||||
avpriv_request_sample(s->avctx, "Downmixing %d channels",
|
avpriv_request_sample(s->avctx, "Downmixing %d channels",
|
||||||
s->prim_channels + !!s->lfe);
|
s->prim_channels + !!s->lfe);
|
||||||
return AVERROR_PATCHWELCOME;
|
return AVERROR_PATCHWELCOME;
|
||||||
}
|
}
|
||||||
for (i = 0; i < s->prim_channels + !!s->lfe; i++) {
|
for (i = 0; i < num_core_channels + !!s->lfe; i++) {
|
||||||
s->downmix_coef[i][0] = dca_default_coeffs[am][i][0];
|
s->downmix_coef[i][0] = dca_default_coeffs[am][i][0];
|
||||||
s->downmix_coef[i][1] = dca_default_coeffs[am][i][1];
|
s->downmix_coef[i][1] = dca_default_coeffs[am][i][1];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
av_dlog(s->avctx, "Stereo downmix coeffs:\n");
|
av_dlog(s->avctx, "Stereo downmix coeffs:\n");
|
||||||
for (i = 0; i < s->prim_channels + !!s->lfe; i++) {
|
for (i = 0; i < num_core_channels + !!s->lfe; i++) {
|
||||||
av_dlog(s->avctx, "L, input channel %d = %f\n", i,
|
av_dlog(s->avctx, "L, input channel %d = %f\n", i,
|
||||||
s->downmix_coef[i][0]);
|
s->downmix_coef[i][0]);
|
||||||
av_dlog(s->avctx, "R, input channel %d = %f\n", i,
|
av_dlog(s->avctx, "R, input channel %d = %f\n", i,
|
||||||
|
|
Loading…
Reference in New Issue