[FFmpeg-devel] [PATCH] decode.c: Handle 0-size packets in compat_decode

Reimar Döffinger Reimar.Doeffinger at gmx.de
Mon Jul 3 21:57:21 EEST 2017


The old API did that just fine, and if we provide
a compatibility layer it should at least be compatible.
For the test-case (feeding AVParser output directly to
decoder, failing to discard 0-size packets) just discarding
0-size packets at the start works, but not sure if in some
cases we might want to pass them on to e.g. allow retrieving
additional pending frames.
---
 libavcodec/decode.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/libavcodec/decode.c b/libavcodec/decode.c
index 052f93d82f..c63090f137 100644
--- a/libavcodec/decode.c
+++ b/libavcodec/decode.c
@@ -842,6 +842,7 @@ static int compat_decode(AVCodecContext *avctx, AVFrame *frame,
     avci->compat_decode = 1;
 
     if (avci->compat_decode_partial_size > 0 &&
+        pkt->size &&
         avci->compat_decode_partial_size != pkt->size) {
         av_log(avctx, AV_LOG_ERROR,
                "Got unexpected packet size after a partial decode\n");
@@ -902,7 +903,10 @@ finish:
             ret = FFMIN(avci->compat_decode_consumed, pkt->size);
     }
     avci->compat_decode_consumed = 0;
-    avci->compat_decode_partial_size = (ret >= 0) ? pkt->size - ret : 0;
+    // for compatibility with old API behaviour handle
+    // 0-size specially
+    if (pkt->size)
+        avci->compat_decode_partial_size = (ret >= 0) ? pkt->size - ret : 0;
 
     return ret;
 }
-- 
2.13.2



More information about the ffmpeg-devel mailing list