diff mbox

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

Message ID 20170808005107.3574-1-michael@niedermayer.cc
State Accepted
Commit 511e10f673a69c05744be0355cc9ce5705407bc2
Headers show

Commit Message

Michael Niedermayer Aug. 8, 2017, 12:51 a.m. UTC
This fixes loosing packets
Fixes: big.avi

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
---
 libavformat/avidec.c | 25 ++++++++++++-------------
 1 file changed, 12 insertions(+), 13 deletions(-)

Comments

Michael Niedermayer Aug. 11, 2017, 10:11 a.m. UTC | #1
On Tue, Aug 08, 2017 at 02:51:07AM +0200, Michael Niedermayer wrote:
> This fixes loosing packets
> Fixes: big.avi
> 
> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
> ---
>  libavformat/avidec.c | 25 ++++++++++++-------------
>  1 file changed, 12 insertions(+), 13 deletions(-)

applied

[...]
diff mbox

Patch

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;