X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=gst-libs%2Fgst%2Fvideo%2Fgstvideoencoder.c;h=6ae20e5c28b7576af0fe1d4da60dd26ee6a65df0;hb=cb6b835d11314935f19cb6a53cf1eb629abe6566;hp=18a6e8020bc4807b61660398ec40d041e54d9f3b;hpb=4b946e8cee1f9ca4570d657f4813d04fb4545b48;p=platform%2Fupstream%2Fgstreamer.git diff --git a/gst-libs/gst/video/gstvideoencoder.c b/gst-libs/gst/video/gstvideoencoder.c index 18a6e80..6ae20e5 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 */