summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThibault Saunier <tsaunier@gnome.org>2016-01-15 13:35:22 +0000
committerTim-Philipp Müller <tim@centricular.com>2016-01-16 21:59:56 +0000
commit50ad5639559496ae07e67b2f6da44ebe4a5527b1 (patch)
tree86135cf93e560ae3c65b8bd1bbec6e86012d35d5
parent3bc67006d4075f5bcbaa7de68230c8b0f551d44a (diff)
downloadgstreamer-plugins-base-50ad5639559496ae07e67b2f6da44ebe4a5527b1.tar.gz
videoencoder: Release video frame when ->handle return ERROR or DROPPED
https://bugzilla.gnome.org/show_bug.cgi?id=760666
-rw-r--r--gst-libs/gst/video/gstvideoencoder.c9
1 files changed, 8 insertions, 1 deletions
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);