diff options
author | Anton Khirnov <anton@khirnov.net> | 2024-09-16 10:41:30 +0200 |
---|---|---|
committer | Anton Khirnov <anton@khirnov.net> | 2024-09-23 17:11:40 +0200 |
commit | e19551d16524b04d01b24962f385a17f87566c8e (patch) | |
tree | fc9a9d27af099fd4be2451caa3968e9c0808e2e1 | |
parent | 75914b58228031044d2b6ddd49bfea11ece5ea7a (diff) | |
download | ffmpeg-e19551d16524b04d01b24962f385a17f87566c8e.tar.gz |
lavc/decode: do not clear the frame discard flag in ff_decode_frame_props_from_pkt()
Only do it in reget_buffer().
The purpose of this clearing this flag is to prevent it for
unintentionally persisting across multiple invocations of this function
on one frame, however that is only a problem if the frame is not
unreffed between uses, which is only the case with reget_buffer().
In other cases the caller may legitimately want to set the discard flag
and should have the option of doing so.
-rw-r--r-- | libavcodec/decode.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/libavcodec/decode.c b/libavcodec/decode.c index fb642799b1..844f1d02e4 100644 --- a/libavcodec/decode.c +++ b/libavcodec/decode.c @@ -1481,8 +1481,6 @@ FF_ENABLE_DEPRECATION_WARNINGS if (pkt->flags & AV_PKT_FLAG_DISCARD) { frame->flags |= AV_FRAME_FLAG_DISCARD; - } else { - frame->flags = (frame->flags & ~AV_FRAME_FLAG_DISCARD); } if (avctx->flags & AV_CODEC_FLAG_COPY_OPAQUE) { @@ -1720,6 +1718,9 @@ static int reget_buffer_internal(AVCodecContext *avctx, AVFrame *frame, int flag av_assert0(avctx->codec_type == AVMEDIA_TYPE_VIDEO); + // make sure the discard flag does not persist + frame->flags &= ~AV_FRAME_FLAG_DISCARD; + if (frame->data[0] && (frame->width != avctx->width || frame->height != avctx->height || frame->format != avctx->pix_fmt)) { av_log(avctx, AV_LOG_WARNING, "Picture changed from size:%dx%d fmt:%s to size:%dx%d fmt:%s in reget buffer()\n", frame->width, frame->height, av_get_pix_fmt_name(frame->format), avctx->width, avctx->height, av_get_pix_fmt_name(avctx->pix_fmt)); |