From 511e10f673a69c05744be0355cc9ce5705407bc2 Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Tue, 8 Aug 2017 02:17:16 +0200 Subject: [PATCH] avformat/avidec: Move packet skip after prefix and related checks This fixes loosing packets Fixes: big.avi Signed-off-by: Michael Niedermayer --- libavformat/avidec.c | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/libavformat/avidec.c b/libavformat/avidec.c index df52092067..9816a1dfac 100644 --- a/libavformat/avidec.c +++ b/libavformat/avidec.c @@ -1265,19 +1265,6 @@ start_sync: } } - if (!avi->dv_demux && - ((st->discard >= AVDISCARD_DEFAULT && size == 0) /* || - // FIXME: needs a little reordering - (st->discard >= AVDISCARD_NONKEY && - !(pkt->flags & AV_PKT_FLAG_KEY)) */ - || st->discard >= AVDISCARD_ALL)) { - if (!exit_early) { - ast->frame_offset += get_duration(ast, size); - avio_skip(pb, size); - goto start_sync; - } - } - if (d[2] == 'p' && d[3] == 'c' && size <= 4 * 256 + 4) { int k = avio_r8(pb); int last = (k + avio_r8(pb) - 1) & 0xFF; @@ -1304,6 +1291,18 @@ start_sync: ast->prefix_count = 0; } + if (!avi->dv_demux && + ((st->discard >= AVDISCARD_DEFAULT && size == 0) /* || + // FIXME: needs a little reordering + (st->discard >= AVDISCARD_NONKEY && + !(pkt->flags & AV_PKT_FLAG_KEY)) */ + || st->discard >= AVDISCARD_ALL)) { + + ast->frame_offset += get_duration(ast, size); + avio_skip(pb, size); + goto start_sync; + } + avi->stream_index = n; ast->packet_size = size + 8; ast->remaining = size;