mirror of
https://github.com/mpv-player/mpv.git
synced 2026-10-28 23:13:18 +08:00
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: cb15bc4324
This commit is contained in:
+7
-6
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user