[FFmpeg-devel] [PATCH] avformat/avidec: Move packet skip after prefix and related checks

Michael Niedermayer michael at niedermayer.cc
Tue Aug 8 03:51:07 EEST 2017


This fixes loosing packets
Fixes: big.avi

Signed-off-by: Michael Niedermayer <michael at niedermayer.cc>
---
 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;
-- 
2.13.0



More information about the ffmpeg-devel mailing list