videoencoder: Expose _negotiate function
authorVivia Nikolaidou <vivia.nikolaidou@collabora.co.uk>
Tue, 24 Jul 2012 17:23:56 +0000 (17:23 +0000)
committerSebastian Dröge <sebastian.droege@collabora.co.uk>
Tue, 24 Jul 2012 18:42:49 +0000 (20:42 +0200)
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

gst-libs/gst/video/gstvideoencoder.c
gst-libs/gst/video/gstvideoencoder.h

index bd6cdeb..8bad465 100644 (file)
@@ -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);
   GstAllocator *allocator;
@@ -1422,7 +1430,7 @@ gst_video_encoder_allocate_output_buffer (GstVideoEncoder * encoder, gsize size)
   if (G_UNLIKELY (encoder->priv->output_state_changed
           || (encoder->priv->output_state
               && gst_pad_check_reconfigure (encoder->srcpad))))
-    gst_video_encoder_set_src_caps (encoder);
+    gst_video_encoder_negotiate (encoder);
 
   buffer =
       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
           || (encoder->priv->output_state
               && 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);
 
@@ -1509,7 +1517,7 @@ gst_video_encoder_finish_frame (GstVideoEncoder * encoder,
 
   if (G_UNLIKELY (priv->output_state_changed || (priv->output_state
               && 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))
index 2c36404..0f5dd7f 100644 (file)
@@ -258,6 +258,8 @@ GstVideoCodecState*  gst_video_encoder_set_output_state (GstVideoEncoder * encod
                                                         GstCaps * caps,
                                                         GstVideoCodecState * reference);
 
+gboolean             gst_video_encoder_negotiate        (GstVideoEncoder * encoder);
+
 GstVideoCodecFrame*  gst_video_encoder_get_frame        (GstVideoEncoder *encoder,
                                                         int frame_number);
 GstVideoCodecFrame*  gst_video_encoder_get_oldest_frame (GstVideoEncoder *encoder);