From cb6b835d11314935f19cb6a53cf1eb629abe6566 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Tue, 19 Jun 2012 09:34:49 +0100 Subject: [PATCH] videoencoder: Ensure buffers don't disappear early The frames are the owners of the buffers --- gst-libs/gst/video/gstvideoencoder.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/gst-libs/gst/video/gstvideoencoder.c b/gst-libs/gst/video/gstvideoencoder.c index 18a6e8020b..6ae20e5c28 100644 --- a/gst-libs/gst/video/gstvideoencoder.c +++ b/gst-libs/gst/video/gstvideoencoder.c @@ -1489,10 +1489,13 @@ gst_video_encoder_finish_frame (GstVideoEncoder * encoder, if (encoder_class->pre_push) ret = encoder_class->pre_push (encoder, frame); + /* A reference always needs to be owned by the frame on the buffer. + * For that reason, we use a complete sub-buffer (zero-cost) to push + * downstream. + * The original buffer will be free-ed only when downstream AND the + * current implementation are done with the frame. */ if (ret == GST_FLOW_OK) - ret = gst_pad_push (encoder->srcpad, frame->output_buffer); - - frame->output_buffer = NULL; + ret = gst_pad_push (encoder->srcpad, gst_buffer_ref (frame->output_buffer)); done: /* handed out */