From 63517d0ed348784cce4ab4b295c2c0f1b78baa81 Mon Sep 17 00:00:00 2001 From: Thibault Saunier Date: Fri, 15 Jan 2016 13:35:22 +0000 Subject: [PATCH] videoencoder: Release video frame when ->handle return ERROR or DROPPED https://bugzilla.gnome.org/show_bug.cgi?id=760666 --- gst-libs/gst/video/gstvideoencoder.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/gst-libs/gst/video/gstvideoencoder.c b/gst-libs/gst/video/gstvideoencoder.c index c45bc7d382..fc0c9a99ae 100644 --- a/gst-libs/gst/video/gstvideoencoder.c +++ b/gst-libs/gst/video/gstvideoencoder.c @@ -212,7 +212,9 @@ static void gst_video_encoder_init (GstVideoEncoder * enc, GstVideoEncoderClass * klass); static void gst_video_encoder_finalize (GObject * object); - +static void +gst_video_encoder_release_frame (GstVideoEncoder * enc, + GstVideoCodecFrame * frame); static gboolean gst_video_encoder_setcaps (GstVideoEncoder * enc, GstCaps * caps); static GstCaps *gst_video_encoder_sink_getcaps (GstVideoEncoder * encoder, @@ -1479,6 +1481,11 @@ gst_video_encoder_chain (GstPad * pad, GstObject * parent, GstBuffer * buf) ret = klass->handle_frame (encoder, frame); + if (ret == GST_VIDEO_ENCODER_FLOW_DROPPED || ret == GST_FLOW_ERROR) { + GST_INFO_OBJECT (encoder, "Dropping frame %p", frame); + gst_video_encoder_release_frame (encoder, frame); + } + done: GST_VIDEO_ENCODER_STREAM_UNLOCK (encoder);