videoencoder: Expose _negotiate function
This is to be called by encoders once they have set the output format in order for (re)negotiation to be triggered as early as possible. https://bugzilla.gnome.org/show_bug.cgi?id=679878
This commit is contained in:
parent
65ea6dee60
commit
d2e1b64e0c
@ -1317,8 +1317,16 @@ close_failed:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
/**
|
||||||
gst_video_encoder_set_src_caps (GstVideoEncoder * encoder)
|
* 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 = GST_VIDEO_ENCODER_GET_CLASS (encoder);
|
GstVideoEncoderClass *klass = GST_VIDEO_ENCODER_GET_CLASS (encoder);
|
||||||
GstAllocator *allocator;
|
GstAllocator *allocator;
|
||||||
@ -1422,7 +1430,7 @@ gst_video_encoder_allocate_output_buffer (GstVideoEncoder * encoder, gsize size)
|
|||||||
if (G_UNLIKELY (encoder->priv->output_state_changed
|
if (G_UNLIKELY (encoder->priv->output_state_changed
|
||||||
|| (encoder->priv->output_state
|
|| (encoder->priv->output_state
|
||||||
&& gst_pad_check_reconfigure (encoder->srcpad))))
|
&& gst_pad_check_reconfigure (encoder->srcpad))))
|
||||||
gst_video_encoder_set_src_caps (encoder);
|
gst_video_encoder_negotiate (encoder);
|
||||||
|
|
||||||
buffer =
|
buffer =
|
||||||
gst_buffer_new_allocate (encoder->priv->allocator, size,
|
gst_buffer_new_allocate (encoder->priv->allocator, size,
|
||||||
@ -1459,7 +1467,7 @@ gst_video_encoder_allocate_output_frame (GstVideoEncoder *
|
|||||||
if (G_UNLIKELY (encoder->priv->output_state_changed
|
if (G_UNLIKELY (encoder->priv->output_state_changed
|
||||||
|| (encoder->priv->output_state
|
|| (encoder->priv->output_state
|
||||||
&& gst_pad_check_reconfigure (encoder->srcpad))))
|
&& gst_pad_check_reconfigure (encoder->srcpad))))
|
||||||
gst_video_encoder_set_src_caps (encoder);
|
gst_video_encoder_negotiate (encoder);
|
||||||
|
|
||||||
GST_LOG_OBJECT (encoder, "alloc buffer size %d", size);
|
GST_LOG_OBJECT (encoder, "alloc buffer size %d", size);
|
||||||
|
|
||||||
@ -1509,7 +1517,7 @@ gst_video_encoder_finish_frame (GstVideoEncoder * encoder,
|
|||||||
|
|
||||||
if (G_UNLIKELY (priv->output_state_changed || (priv->output_state
|
if (G_UNLIKELY (priv->output_state_changed || (priv->output_state
|
||||||
&& gst_pad_check_reconfigure (encoder->srcpad))))
|
&& gst_pad_check_reconfigure (encoder->srcpad))))
|
||||||
gst_video_encoder_set_src_caps (encoder);
|
gst_video_encoder_negotiate (encoder);
|
||||||
|
|
||||||
|
|
||||||
if (G_UNLIKELY (priv->output_state == NULL))
|
if (G_UNLIKELY (priv->output_state == NULL))
|
||||||
|
@ -258,6 +258,8 @@ GstVideoCodecState* gst_video_encoder_set_output_state (GstVideoEncoder * encod
|
|||||||
GstCaps * caps,
|
GstCaps * caps,
|
||||||
GstVideoCodecState * reference);
|
GstVideoCodecState * reference);
|
||||||
|
|
||||||
|
gboolean gst_video_encoder_negotiate (GstVideoEncoder * encoder);
|
||||||
|
|
||||||
GstVideoCodecFrame* gst_video_encoder_get_frame (GstVideoEncoder *encoder,
|
GstVideoCodecFrame* gst_video_encoder_get_frame (GstVideoEncoder *encoder,
|
||||||
int frame_number);
|
int frame_number);
|
||||||
GstVideoCodecFrame* gst_video_encoder_get_oldest_frame (GstVideoEncoder *encoder);
|
GstVideoCodecFrame* gst_video_encoder_get_oldest_frame (GstVideoEncoder *encoder);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user