From 50ad5639559496ae07e67b2f6da44ebe4a5527b1 Mon Sep 17 00:00:00 2001 From: Thibault Saunier Date: Fri, 15 Jan 2016 13:35:22 +0000 Subject: 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 c45bc7d38..fc0c9a99a 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); -- cgit v1.2.1