ffmpeg: avauddec/avviddec: Free packet side data after usage

As we don't use proper refcounting with AVPacket we have to manage this
ourselves.

Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/2006

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4079>
This commit is contained in:
Sebastian Dröge 2023-02-28 14:00:26 +02:00 committed by Tim-Philipp Müller
parent ccb77f72ef
commit 6b16b41889
2 changed files with 7 additions and 3 deletions

View file

@ -726,8 +726,10 @@ gst_ffmpegauddec_handle_frame (GstAudioDecoder * decoder, GstBuffer * inbuf)
goto unmap;
if (avcodec_send_packet (ffmpegdec->context, &packet) < 0) {
av_packet_free_side_data (&packet);
goto send_packet_failed;
}
av_packet_free_side_data (&packet);
do {
/* decode a frame of audio now */

View file

@ -2048,6 +2048,9 @@ gst_ffmpegviddec_handle_frame (GstVideoDecoder * decoder,
/* now decode the frame */
gst_avpacket_init (&packet, data, size);
if (!packet.size)
goto done;
if (ffmpegdec->palette) {
guint8 *pal;
@ -2057,9 +2060,6 @@ gst_ffmpegviddec_handle_frame (GstVideoDecoder * decoder,
GST_DEBUG_OBJECT (ffmpegdec, "copy pal %p %p", &packet, pal);
}
if (!packet.size)
goto done;
/* save reference to the timing info */
ffmpegdec->context->reordered_opaque = (gint64) frame->system_frame_number;
ffmpegdec->picture->reordered_opaque = (gint64) frame->system_frame_number;
@ -2075,8 +2075,10 @@ gst_ffmpegviddec_handle_frame (GstVideoDecoder * decoder,
GST_VIDEO_DECODER_STREAM_UNLOCK (ffmpegdec);
if (avcodec_send_packet (ffmpegdec->context, &packet) < 0) {
GST_VIDEO_DECODER_STREAM_LOCK (ffmpegdec);
av_packet_free_side_data (&packet);
goto send_packet_failed;
}
av_packet_free_side_data (&packet);
GST_VIDEO_DECODER_STREAM_LOCK (ffmpegdec);
do {