avfvideosrc: Don't pretend to support reconfiguration
authorSebastian Dröge <sebastian@centricular.com>
Sun, 9 Nov 2014 09:25:25 +0000 (10:25 +0100)
committerSebastian Dröge <sebastian@centricular.com>
Sun, 9 Nov 2014 09:41:52 +0000 (10:41 +0100)
We will run into an assertion in set_caps() if we try to change
caps while the source is already running. Don't try to find new
caps in GstBaseSrc::negotiate() to prevent caps changes.

sys/applemedia/avfvideosrc.m

index ad649bcf7f501879bce2f0ae9fe1e6ae83458d5b..58d6d56c85ff75e27335fed3c754208a377cd3df 100644 (file)
@@ -921,6 +921,7 @@ static gboolean gst_avf_video_src_unlock (GstBaseSrc * basesrc);
 static gboolean gst_avf_video_src_unlock_stop (GstBaseSrc * basesrc);
 static GstFlowReturn gst_avf_video_src_create (GstPushSrc * pushsrc,
     GstBuffer ** buf);
+static gboolean gst_avf_video_src_negotiate (GstBaseSrc * basesrc);
 
 
 static void
@@ -945,6 +946,7 @@ gst_avf_video_src_class_init (GstAVFVideoSrcClass * klass)
   gstbasesrc_class->unlock = gst_avf_video_src_unlock;
   gstbasesrc_class->unlock_stop = gst_avf_video_src_unlock_stop;
   gstbasesrc_class->decide_allocation = gst_avf_video_src_decide_allocation;
+  gstbasesrc_class->negotiate = gst_avf_video_src_negotiate;
 
   gstpushsrc_class->create = gst_avf_video_src_create;
 
@@ -1198,3 +1200,14 @@ gst_avf_video_src_create (GstPushSrc * pushsrc, GstBuffer ** buf)
 
   return ret;
 }
+
+static gboolean
+gst_avf_video_src_negotiate (GstBaseSrc * basesrc)
+{
+  /* FIXME: We don't support reconfiguration yet */
+  if (gst_pad_has_current_caps (GST_BASE_SRC_PAD (basesrc)))
+    return TRUE;
+
+  return GST_BASE_SRC_CLASS (parent_class)->negotiate (basesrc);
+}
+