diff options
author | Muhammad Faiz <mfcc64@gmail.com> | 2017-05-01 07:34:25 +0700 |
---|---|---|
committer | Muhammad Faiz <mfcc64@gmail.com> | 2017-05-03 01:31:48 +0700 |
commit | 9b4648a2cdeb31bf15eb8e238d34b51fe7ff0b87 (patch) | |
tree | 13c9cd01226ab034c9e5c5999a7401743feedf01 /libavcodec/decode.c | |
parent | 2da5bf4c2f4cb878bad794be2b76108afbbd899d (diff) | |
download | ffmpeg-9b4648a2cdeb31bf15eb8e238d34b51fe7ff0b87.tar.gz |
avcodec/decode: do not treat discarded frames as eof when draining
Fix fate failures:
make fate-mov THREADS=32
Reviewed-by: wm4 <nfxjfg@googlemail.com>
Signed-off-by: Muhammad Faiz <mfcc64@gmail.com>
Diffstat (limited to 'libavcodec/decode.c')
-rw-r--r-- | libavcodec/decode.c | 8 |
1 files 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 */ |