Signed-off-by: Michael Niedermayer <mich...@niedermayer.cc> --- libavcodec/decode.c | 4 +++- libavcodec/internal.h | 3 +++ libavcodec/pthread_frame.c | 1 + 3 files changed, 7 insertions(+), 1 deletion(-)
diff --git a/libavcodec/decode.c b/libavcodec/decode.c index 72482e2168..a757249f93 100644 --- a/libavcodec/decode.c +++ b/libavcodec/decode.c @@ -2054,8 +2054,10 @@ void avcodec_flush_buffers(AVCodecContext *avctx) if (HAVE_THREADS && avctx->active_thread_type & FF_THREAD_FRAME) ff_thread_flush(avctx); - else if (avctx->codec->flush) + else if (avctx->codec->flush) { + avctx->internal->need_flush = 0; avctx->codec->flush(avctx); + } avctx->pts_correction_last_pts = avctx->pts_correction_last_dts = INT64_MIN; diff --git a/libavcodec/internal.h b/libavcodec/internal.h index 15ef0bbefc..4bb1b1af36 100644 --- a/libavcodec/internal.h +++ b/libavcodec/internal.h @@ -233,6 +233,9 @@ typedef struct AVCodecInternal { int initial_sample_rate; int initial_channels; uint64_t initial_channel_layout; + + /* used for preserving a frame at the last PTS */ + int need_flush; } AVCodecInternal; struct AVCodecDefault { diff --git a/libavcodec/pthread_frame.c b/libavcodec/pthread_frame.c index 36ac0ac1e5..4556b2101e 100644 --- a/libavcodec/pthread_frame.c +++ b/libavcodec/pthread_frame.c @@ -864,6 +864,7 @@ void ff_thread_flush(AVCodecContext *avctx) release_delayed_buffers(p); + avctx->internal->need_flush = 0; if (avctx->codec->flush) avctx->codec->flush(p->avctx); } -- 2.23.0 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".