summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Nauwelaerts <mnauw@users.sourceforge.net>2013-11-26 20:55:43 +0100
committerMark Nauwelaerts <mnauw@users.sourceforge.net>2013-11-26 20:55:43 +0100
commit2ec4008ea5f3296f50d56b11422ed5d56de6692b (patch)
tree8482c96c7b64a79bdcc76ba4fee904176519f7af
parent40d9f00106ada79a3e7ea110630021aff4102ed2 (diff)
avviddec: really release frame at proper time
... by also removing it from the pending list of frames, where it may still be in if it has never been submitted to _finish. This could happen if is a decode-only frame, or in skipped decoding situation, ... Fixes https://bugzilla.gnome.org/show_bug.cgi?id=693772
-rw-r--r--ext/libav/gstavviddec.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/ext/libav/gstavviddec.c b/ext/libav/gstavviddec.c
index 0635767..689cdeb 100644
--- a/ext/libav/gstavviddec.c
+++ b/ext/libav/gstavviddec.c
@@ -539,11 +539,12 @@ gst_ffmpegviddec_video_frame_new (GstVideoCodecFrame * frame)
}
static void
-gst_ffmpegviddec_video_frame_free (GstFFMpegVidDecVideoFrame * frame)
+gst_ffmpegviddec_video_frame_free (GstFFMpegVidDec * ffmpegdec,
+ GstFFMpegVidDecVideoFrame * frame)
{
if (frame->mapped)
gst_video_frame_unmap (&frame->vframe);
- gst_video_codec_frame_unref (frame->frame);
+ gst_video_decoder_release_frame (GST_VIDEO_DECODER (ffmpegdec), frame->frame);
g_slice_free (GstFFMpegVidDecVideoFrame, frame);
}
@@ -768,7 +769,7 @@ gst_ffmpegviddec_release_buffer (AVCodecContext * context, AVFrame * picture)
/* we remove the opaque data now */
picture->opaque = NULL;
- gst_ffmpegviddec_video_frame_free (frame);
+ gst_ffmpegviddec_video_frame_free (ffmpegdec, frame);
/* zero out the reference in ffmpeg */
for (i = 0; i < 4; i++) {