mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-23 10:11:08 +00:00
videoencoder: Add negotiate vfunc that is used to negotiate with downstream
The default implementation negotiates a buffer pool and allocator with downstream.
This commit is contained in:
parent
7cb22ef241
commit
e37bb460bd
2 changed files with 34 additions and 10 deletions
|
@ -231,6 +231,7 @@ static gboolean gst_video_encoder_decide_allocation_default (GstVideoEncoder *
|
|||
encoder, GstQuery * query);
|
||||
static gboolean gst_video_encoder_propose_allocation_default (GstVideoEncoder *
|
||||
encoder, GstQuery * query);
|
||||
static gboolean gst_video_encoder_negotiate_default (GstVideoEncoder * encoder);
|
||||
|
||||
/* we can't use G_DEFINE_ABSTRACT_TYPE because we need the klass in the _init
|
||||
* method to get to the padtemplates */
|
||||
|
@ -292,6 +293,7 @@ gst_video_encoder_class_init (GstVideoEncoderClass * klass)
|
|||
klass->src_event = gst_video_encoder_src_event_default;
|
||||
klass->propose_allocation = gst_video_encoder_propose_allocation_default;
|
||||
klass->decide_allocation = gst_video_encoder_decide_allocation_default;
|
||||
klass->negotiate = gst_video_encoder_negotiate_default;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -1391,16 +1393,8 @@ close_failed:
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* gst_video_encoder_negotiate:
|
||||
* @encoder: a #GstVideoEncoder
|
||||
*
|
||||
* Negotiate with downstream elements to currently configured #GstVideoCodecState.
|
||||
*
|
||||
* Returns: #TRUE if the negotiation succeeded, else #FALSE.
|
||||
*/
|
||||
gboolean
|
||||
gst_video_encoder_negotiate (GstVideoEncoder * encoder)
|
||||
static gboolean
|
||||
gst_video_encoder_negotiate_default (GstVideoEncoder * encoder)
|
||||
{
|
||||
GstVideoEncoderClass *klass = GST_VIDEO_ENCODER_GET_CLASS (encoder);
|
||||
GstAllocator *allocator;
|
||||
|
@ -1481,6 +1475,32 @@ no_decide_allocation:
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* gst_video_encoder_negotiate:
|
||||
* @encoder: a #GstVideoEncoder
|
||||
*
|
||||
* Negotiate with downstream elements to currently configured #GstVideoCodecState.
|
||||
*
|
||||
* Returns: #TRUE if the negotiation succeeded, else #FALSE.
|
||||
*/
|
||||
gboolean
|
||||
gst_video_encoder_negotiate (GstVideoEncoder * encoder)
|
||||
{
|
||||
GstVideoEncoderClass *klass;
|
||||
gboolean ret = TRUE;
|
||||
|
||||
g_return_val_if_fail (GST_IS_VIDEO_ENCODER (encoder), FALSE);
|
||||
|
||||
klass = GST_VIDEO_ENCODER_GET_CLASS (encoder);
|
||||
|
||||
GST_VIDEO_ENCODER_STREAM_LOCK (encoder);
|
||||
if (klass->negotiate)
|
||||
ret = klass->negotiate (encoder);
|
||||
GST_VIDEO_ENCODER_STREAM_UNLOCK (encoder);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* gst_video_encoder_allocate_output_buffer:
|
||||
* @encoder: a #GstVideoEncoder
|
||||
|
|
|
@ -191,6 +191,8 @@ struct _GstVideoEncoder
|
|||
* Event handler on the source pad. This function should return
|
||||
* TRUE if the event was handled and should be discarded
|
||||
* (i.e. not unref'ed).
|
||||
* @negotiate: Optional.
|
||||
* Negotiate with downstream and configure buffer pools, etc.
|
||||
* @decide_allocation: Optional.
|
||||
* Setup the allocation parameters for allocating output
|
||||
* buffers. The passed in query contains the result of the
|
||||
|
@ -240,6 +242,8 @@ struct _GstVideoEncoderClass
|
|||
gboolean (*src_event) (GstVideoEncoder *encoder,
|
||||
GstEvent *event);
|
||||
|
||||
gboolean (*negotiate) (GstVideoEncoder *encoder);
|
||||
|
||||
gboolean (*decide_allocation) (GstVideoEncoder *encoder, GstQuery *query);
|
||||
|
||||
gboolean (*propose_allocation) (GstVideoEncoder * encoder,
|
||||
|
|
Loading…
Reference in a new issue