summaryrefslogtreecommitdiff
path: root/libavformat/avidec.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2008-03-27 20:58:01 +0000
committerMichael Niedermayer <michaelni@gmx.at>2008-03-27 20:58:01 +0000
commit41757171e77feeb6e06a35e5bdeba09b44d90743 (patch)
treec4d8304faaa4ceb3e0ed3248bdf47a40230d88dc /libavformat/avidec.c
parent0d14ab27a805c23b804b6ef9bef6263e092cdfce (diff)
Support wb00+dc00 chunk mix.
fixes issue402 Originally committed as revision 12609 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavformat/avidec.c')
-rw-r--r--libavformat/avidec.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/libavformat/avidec.c b/libavformat/avidec.c
index e338ddbb7c..b45641ebd5 100644
--- a/libavformat/avidec.c
+++ b/libavformat/avidec.c
@@ -778,10 +778,29 @@ resync:
//parse ##dc/##wb
if(n < s->nb_streams){
AVStream *st;
+ AVStream *st1 = s->streams[1];
+ AVIStream *ast1= st1->priv_data;
AVIStream *ast;
st = s->streams[n];
ast = st->priv_data;
+
+ //workaround for broken small-file-bug402.avi
+ if( d[2] == 'w' && d[3] == 'b'
+ && n==0
+ && s->nb_streams>=2
+ && st ->codec->codec_type == CODEC_TYPE_VIDEO
+ && st1->codec->codec_type == CODEC_TYPE_AUDIO
+ && ast->prefix == 'd'*256+'c'
+ && (d[2]*256+d[3] == ast1->prefix || !ast1->prefix_count)
+ ){
+ n=1;
+ st = st1;
+ ast = ast1;
+ av_log(s, AV_LOG_WARNING, "Invalid stream+prefix combination, assuming audio\n");
+ }
+
+
if( (st->discard >= AVDISCARD_DEFAULT && size==0)
/*|| (st->discard >= AVDISCARD_NONKEY && !(pkt->flags & PKT_FLAG_KEY))*/ //FIXME needs a little reordering
|| st->discard >= AVDISCARD_ALL){