From f8cef99033e2e46e610f7378334f59cd242dacb4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kacper=20Michaj=C5=82ow?= Date: Thu, 17 Apr 2025 18:37:07 +0200 Subject: [PATCH] demux_lavf: replace deprecated usage of stack allocated AVPackets sizeof(AVPacket) being part of an ABI is deprecated. This was the last remaining stack usage, missed in previous related change. Note that we still use sizeof(AVPacket) and sizeof(AVBufferRef) in demux_packet_estimate_total_size(). But it's safe, the worse that can happen is that we underestimate the size on mismatch. Fixes: cb15bc4324327bded956b2c9b78f09bdc2729d98 --- demux/demux_lavf.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/demux/demux_lavf.c b/demux/demux_lavf.c index 6494131c01..9903fde530 100644 --- a/demux/demux_lavf.c +++ b/demux/demux_lavf.c @@ -1214,11 +1214,12 @@ static bool demux_lavf_read_packet(struct demuxer *demux, { lavf_priv_t *priv = demux->priv; - AVPacket *pkt = &(AVPacket){0}; + AVPacket *pkt = av_packet_alloc(); + MP_HANDLE_OOM(pkt); int r = av_read_frame(priv->avfc, pkt); update_read_stats(demux); if (r < 0) { - av_packet_unref(pkt); + av_packet_free(&pkt); if (r == AVERROR_EOF) return false; MP_WARN(demux, "error reading packet: %s.\n", av_err2str(r)); @@ -1240,19 +1241,19 @@ static bool demux_lavf_read_packet(struct demuxer *demux, AVStream *st = priv->avfc->streams[pkt->stream_index]; if (!demux_stream_is_selected(stream)) { - av_packet_unref(pkt); + av_packet_free(&pkt); return true; // don't signal EOF if skipping a packet } // Never send additional frames for streams that are a single frame. if (stream->image && priv->format_hack.first_frame_only && pkt->pos != 0) { - av_packet_unref(pkt); + av_packet_free(&pkt); return true; } struct demux_packet *dp = new_demux_packet_from_avpacket(demux->packet_pool, pkt); if (!dp) { - av_packet_unref(pkt); + av_packet_free(&pkt); return true; } @@ -1265,7 +1266,7 @@ static bool demux_lavf_read_packet(struct demuxer *demux, dp->pos = pkt->pos; dp->keyframe = pkt->flags & AV_PKT_FLAG_KEY; dp->is_wrapped_avframe = st->codecpar->codec_id == AV_CODEC_ID_WRAPPED_AVFRAME; - av_packet_unref(pkt); + av_packet_free(&pkt); if (priv->format_hack.clear_filepos) dp->pos = -1;