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);