[FFmpeg-cvslog] avcodec/decode: do not treat discarded frames as eof when draining

Muhammad Faiz git at videolan.org
Tue May 2 21:42:48 EEST 2017


ffmpeg | branch: master | Muhammad Faiz <mfcc64 at gmail.com> | Mon May  1 07:34:25 2017 +0700| [9b4648a2cdeb31bf15eb8e238d34b51fe7ff0b87] | committer: Muhammad Faiz

avcodec/decode: do not treat discarded frames as eof when draining

Fix fate failures:
    make fate-mov THREADS=32

Reviewed-by: wm4 <nfxjfg at googlemail.com>
Signed-off-by: Muhammad Faiz <mfcc64 at gmail.com>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=9b4648a2cdeb31bf15eb8e238d34b51fe7ff0b87
---

 libavcodec/decode.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/libavcodec/decode.c b/libavcodec/decode.c
index edfae5583c..e330f14826 100644
--- a/libavcodec/decode.c
+++ b/libavcodec/decode.c
@@ -369,7 +369,7 @@ static int decode_simple_internal(AVCodecContext *avctx, AVFrame *frame)
     AVPacket           *pkt = ds->in_pkt;
     // copy to ensure we do not change pkt
     AVPacket tmp;
-    int got_frame, did_split;
+    int got_frame, actual_got_frame, did_split;
     int ret;
 
     if (!pkt->data && !avci->draining) {
@@ -431,6 +431,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
         }
     }
     emms_c();
+    actual_got_frame = got_frame;
 
     if (avctx->codec->type == AVMEDIA_TYPE_VIDEO) {
         if (frame->flags & AV_FRAME_FLAG_DISCARD)
@@ -568,8 +569,9 @@ FF_ENABLE_DEPRECATION_WARNINGS
         avctx->time_base = av_inv_q(av_mul_q(avctx->framerate, (AVRational){avctx->ticks_per_frame, 1}));
 #endif
 
-    /* do not stop draining when got_frame != 0 or ret < 0 */
-    if (avctx->internal->draining && !got_frame) {
+    /* do not stop draining when actual_got_frame != 0 or ret < 0 */
+    /* got_frame == 0 but actual_got_frame != 0 when frame is discarded */
+    if (avctx->internal->draining && !actual_got_frame) {
         if (ret < 0) {
             /* prevent infinite loop if a decoder wrongly always return error on draining */
             /* reasonable nb_errors_max = maximum b frames + thread count */



More information about the ffmpeg-cvslog mailing list