Commit a676e48d authored by Michael Niedermayer's avatar Michael Niedermayer

Merge commit '801c39e1'

* commit '801c39e1':
  dcadec: Use correct channel count in stereo downmix check

Conflicts:
	libavcodec/dcadec.c
Merged-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
parents 952614b8 801c39e1
...@@ -2173,7 +2173,7 @@ static int dca_decode_frame(AVCodecContext *avctx, void *data, ...@@ -2173,7 +2173,7 @@ static int dca_decode_frame(AVCodecContext *avctx, void *data,
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 :
...@@ -2191,19 +2191,19 @@ static int dca_decode_frame(AVCodecContext *avctx, void *data, ...@@ -2191,19 +2191,19 @@ static int dca_decode_frame(AVCodecContext *avctx, void *data,
"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,
...@@ -2377,7 +2377,7 @@ FF_ENABLE_DEPRECATION_WARNINGS ...@@ -2377,7 +2377,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
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;
...@@ -2444,6 +2444,7 @@ FF_ENABLE_DEPRECATION_WARNINGS ...@@ -2444,6 +2444,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
s->xxch_order_tab[j++] = posn; s->xxch_order_tab[j++] = posn;
} }
} }
} }
s->lfe_index = av_popcount(channel_layout & (AV_CH_LOW_FREQUENCY-1)); s->lfe_index = av_popcount(channel_layout & (AV_CH_LOW_FREQUENCY-1));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment