videoencoder: Ensure buffers don't disappear early

The frames are the owners of the buffers
This commit is contained in:
Sebastian Dröge 2012-06-19 09:34:49 +01:00
parent 4b946e8cee
commit cb6b835d11

View file

@ -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 */