summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Almer <jamrial@gmail.com>2021-06-18 17:58:18 -0300
committerJames Almer <jamrial@gmail.com>2021-06-21 14:59:54 -0300
commita4fb03563ab918bf9641365d08b4363590ced1eb (patch)
treed56383a2ac7089bf20c59bc148ecfd76634f8d70
parent05f9b3a0a570fcacbd38570f0860afdabc80a791 (diff)
avcodec/decode: fetch packets from the pkt_props FIFO on every frame returned
Fixes memleaks on decoders that don't call ff_decode_frame_props(), like libdav1d. Signed-off-by: James Almer <jamrial@gmail.com>
-rw-r--r--libavcodec/decode.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/libavcodec/decode.c b/libavcodec/decode.c
index 75bc7ad98e..44f0b11546 100644
--- a/libavcodec/decode.c
+++ b/libavcodec/decode.c
@@ -533,6 +533,10 @@ static int decode_receive_frame_internal(AVCodecContext *avctx, AVFrame *frame)
if (ret == AVERROR_EOF)
avci->draining_done = 1;
+ if (IS_EMPTY(avci->last_pkt_props) && av_fifo_size(avci->pkt_props) >= sizeof(*avci->last_pkt_props))
+ av_fifo_generic_read(avci->pkt_props,
+ avci->last_pkt_props, sizeof(*avci->last_pkt_props), NULL);
+
if (!ret) {
frame->best_effort_timestamp = guess_correct_pts(avctx,
frame->pts,
@@ -1490,10 +1494,6 @@ int ff_decode_frame_props(AVCodecContext *avctx, AVFrame *frame)
{ AV_PKT_DATA_S12M_TIMECODE, AV_FRAME_DATA_S12M_TIMECODE },
};
- if (IS_EMPTY(pkt) && av_fifo_size(avctx->internal->pkt_props) >= sizeof(*pkt))
- av_fifo_generic_read(avctx->internal->pkt_props,
- pkt, sizeof(*pkt), NULL);
-
frame->pts = pkt->pts;
frame->pkt_pos = pkt->pos;
frame->pkt_duration = pkt->duration;