videoencoder: Release video frame when ->handle return ERROR or DROPPED
authorThibault Saunier <tsaunier@gnome.org>
Fri, 15 Jan 2016 13:35:22 +0000 (13:35 +0000)
committerThibault Saunier <tsaunier@gnome.org>
Sat, 16 Jan 2016 07:53:35 +0000 (08:53 +0100)
https://bugzilla.gnome.org/show_bug.cgi?id=760666

gst-libs/gst/video/gstvideoencoder.c

index c45bc7d..fc0c9a9 100644 (file)
@@ -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);