[SCM] libav/experimental: Only set channels in the stream if previously unset, fixes resampling crash on broken dca frames

siretart at users.alioth.debian.org siretart at users.alioth.debian.org
Sun Jun 30 16:18:38 UTC 2013


The following commit has been merged in the experimental branch:
commit 4a24837e07c4782658d1475b77506bccc3d0b5e2
Author: Benjamin Larsson <banan at ludd.ltu.se>
Date:   Thu Apr 10 06:15:17 2008 +0000

    Only set channels in the stream if previously unset, fixes resampling crash on broken dca frames
    
    Originally committed as revision 12780 to svn://svn.ffmpeg.org/ffmpeg/trunk

diff --git a/libavcodec/dca.c b/libavcodec/dca.c
index 98fa1f6..ea04624 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;

-- 
Libav/FFmpeg packaging



More information about the pkg-multimedia-commits mailing list