videoencoder: Don't delay set_format
authorNicolas Dufresne <nicolas.dufresne@collabora.com>
Tue, 8 Jul 2014 20:59:37 +0000 (16:59 -0400)
committerNicolas Dufresne <nicolas.dufresne@collabora.co.uk>
Fri, 25 Jul 2014 18:12:02 +0000 (14:12 -0400)
This prevent implementing allocation query, as the format need to be
known in order to determin the size and number of buffers needed.

Note: This may lead to few regressions that will need fixing

https://bugzilla.gnome.org/show_bug.cgi?id=732288

gst-libs/gst/video/gstvideoencoder.c

index e0264d1201e90936a88af108e01dd4bd725ab58c..45fdbf9c69863cc8a66d268bb5f7018f725a7091 100644 (file)
@@ -138,7 +138,6 @@ struct _GstVideoEncoderPrivate
   /* FIXME : (and introduce a context ?) */
   gboolean drained;
   gboolean at_eos;
-  gboolean do_caps;
 
   gint64 min_latency;
   gint64 max_latency;
@@ -981,8 +980,8 @@ gst_video_encoder_sink_event_default (GstVideoEncoder * encoder,
       GstCaps *caps;
 
       gst_event_parse_caps (event, &caps);
-      ret = TRUE;
-      encoder->priv->do_caps = TRUE;
+      ret = gst_video_encoder_setcaps (encoder, caps);
+
       gst_event_unref (event);
       event = NULL;
       break;
@@ -1353,18 +1352,6 @@ gst_video_encoder_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
 
   g_return_val_if_fail (klass->handle_frame != NULL, GST_FLOW_ERROR);
 
-  if (G_UNLIKELY (encoder->priv->do_caps)) {
-    GstCaps *caps = gst_pad_get_current_caps (encoder->sinkpad);
-    if (!caps)
-      goto not_negotiated;
-    if (!gst_video_encoder_setcaps (encoder, caps)) {
-      gst_caps_unref (caps);
-      goto not_negotiated;
-    }
-    gst_caps_unref (caps);
-    encoder->priv->do_caps = FALSE;
-  }
-
   if (!encoder->priv->input_state)
     goto not_negotiated;