video: add gst_video_decoder_allocate_output_frame_with_params

It adds a third argument to pass GstBufferPoolAcquireParams
to gst_buffer_pool_acquire_buffer.

If a user subclasses GstBufferPoolAcquireParams, this allows to
pass an updated param to the underlying buffer pool at each
gst_video_decoder_allocate_output_frame_with_params call.

https://bugzilla.gnome.org/show_bug.cgi?id=773165
This commit is contained in:
Julien Isorce 2016-10-14 15:14:14 +01:00
parent e73eb54908
commit 3bf893e12a
3 changed files with 26 additions and 1 deletions

View file

@ -2876,6 +2876,7 @@ GstVideoDecoderClass
gst_video_decoder_add_to_frame gst_video_decoder_add_to_frame
gst_video_decoder_allocate_output_buffer gst_video_decoder_allocate_output_buffer
gst_video_decoder_allocate_output_frame gst_video_decoder_allocate_output_frame
gst_video_decoder_allocate_output_frame_full
gst_video_decoder_get_allocator gst_video_decoder_get_allocator
gst_video_decoder_get_buffer_pool gst_video_decoder_get_buffer_pool
gst_video_decoder_drop_frame gst_video_decoder_drop_frame

View file

@ -3955,6 +3955,27 @@ failed_allocation:
GstFlowReturn GstFlowReturn
gst_video_decoder_allocate_output_frame (GstVideoDecoder * gst_video_decoder_allocate_output_frame (GstVideoDecoder *
decoder, GstVideoCodecFrame * frame) decoder, GstVideoCodecFrame * frame)
{
return gst_video_decoder_allocate_output_frame_with_params (decoder, frame,
NULL);
}
/**
* gst_video_decoder_allocate_output_frame_with_params:
* @decoder: a #GstVideoDecoder
* @frame: a #GstVideoCodecFrame
* @params: a #GstBufferPoolAcquireParams
*
* Same as #gst_video_decoder_allocate_output_frame except it allows passing
* #GstBufferPoolAcquireParams to the sub call gst_buffer_pool_acquire_buffer.
*
* Returns: %GST_FLOW_OK if an output buffer could be allocated
*
* Since: 1.12
*/
GstFlowReturn
gst_video_decoder_allocate_output_frame_with_params (GstVideoDecoder *
decoder, GstVideoCodecFrame * frame, GstBufferPoolAcquireParams * params)
{ {
GstFlowReturn flow_ret; GstFlowReturn flow_ret;
GstVideoCodecState *state; GstVideoCodecState *state;
@ -3988,7 +4009,7 @@ gst_video_decoder_allocate_output_frame (GstVideoDecoder *
GST_LOG_OBJECT (decoder, "alloc buffer size %d", num_bytes); GST_LOG_OBJECT (decoder, "alloc buffer size %d", num_bytes);
flow_ret = gst_buffer_pool_acquire_buffer (decoder->priv->pool, flow_ret = gst_buffer_pool_acquire_buffer (decoder->priv->pool,
&frame->output_buffer, NULL); &frame->output_buffer, params);
GST_VIDEO_DECODER_STREAM_UNLOCK (decoder); GST_VIDEO_DECODER_STREAM_UNLOCK (decoder);

View file

@ -391,6 +391,9 @@ gsize gst_video_decoder_get_pending_frame_size (GstVideoDecoder *decode
GstBuffer *gst_video_decoder_allocate_output_buffer (GstVideoDecoder * decoder); GstBuffer *gst_video_decoder_allocate_output_buffer (GstVideoDecoder * decoder);
GstFlowReturn gst_video_decoder_allocate_output_frame_with_params (GstVideoDecoder *decoder,
GstVideoCodecFrame * frame,
GstBufferPoolAcquireParams *params);
GstFlowReturn gst_video_decoder_allocate_output_frame (GstVideoDecoder *decoder, GstFlowReturn gst_video_decoder_allocate_output_frame (GstVideoDecoder *decoder,
GstVideoCodecFrame *frame); GstVideoCodecFrame *frame);