From 9631312c6fc707bfce1bf1bb0cecfc180125e875 Mon Sep 17 00:00:00 2001 From: banan Date: Thu, 10 Apr 2008 06:15:17 +0000 Subject: [PATCH] Only set channels in the stream if previously unset, fixes resampling crash on broken dca frames git-svn-id: file:///var/local/repositories/ffmpeg/trunk@12780 9553f0bf-9b14-0410-a0b8-cfaf0461ba5b --- libavcodec/dca.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/libavcodec/dca.c b/libavcodec/dca.c index 98fa1f66f..ea0462451 100644 --- a/libavcodec/dca.c +++ b/libavcodec/dca.c @@ -1173,7 +1173,14 @@ static int dca_decode_frame(AVCodecContext * avctx, s->output = DCA_STEREO; } - avctx->channels = channels; + /* There is nothing that prevents a dts frame to change channel configuration + but FFmpeg doesn't support that so only set the channels if it is previously + unset. Ideally during the first probe for channels the crc should be checked + and only set avctx->channels when the crc is ok. Right now the decoder could + set the channels based on a broken first frame.*/ + if (!avctx->channels) + avctx->channels = channels; + if(*data_size < (s->sample_blocks / 8) * 256 * sizeof(int16_t) * channels) return -1; *data_size = 0; -- 2.39.2