+ GST_ERROR_OBJECT (basesrc, "Failed to perform initial seek");
+ gst_base_src_set_flushing (basesrc, TRUE, FALSE, TRUE, NULL);
+ if (event)
+ gst_event_unref (event);
+ ret = GST_FLOW_ERROR;
+ goto error;
+ }
+no_get_range:
+ {
+ gst_base_src_set_flushing (basesrc, TRUE, FALSE, TRUE, NULL);
+ GST_ERROR_OBJECT (basesrc, "Cannot operate in pull mode, stopping");
+ ret = GST_FLOW_ERROR;
+ goto error;
+ }
+error:
+ {
+ GST_LIVE_LOCK (basesrc);
+ basesrc->priv->start_result = ret;
+ GST_OBJECT_FLAG_UNSET (basesrc, GST_BASE_SRC_FLAG_STARTING);
+ GST_LIVE_SIGNAL (basesrc);
+ GST_LIVE_UNLOCK (basesrc);
+ return;
+ }
+}
+
+/**
+ * gst_base_src_start_wait:
+ * @src: base source instance
+ * @ret: a #GstFlowReturn
+ *
+ * Wait until the start operation completes.
+ *
+ * Returns: a #GstFlowReturn.
+ */
+GstFlowReturn
+gst_base_src_start_wait (GstBaseSrc * basesrc)
+{
+ GstFlowReturn result;
+
+ GST_LIVE_LOCK (basesrc);
+ if (G_UNLIKELY (basesrc->priv->flushing))
+ goto flushing;
+
+ while (GST_BASE_SRC_IS_STARTING (basesrc)) {
+ GST_LIVE_WAIT (basesrc);
+ if (G_UNLIKELY (basesrc->priv->flushing))
+ goto flushing;
+ }
+ result = basesrc->priv->start_result;
+ GST_LIVE_UNLOCK (basesrc);
+
+ return result;
+
+ /* ERRORS */
+flushing:
+ {
+ GST_DEBUG_OBJECT (basesrc, "we are flushing");
+ GST_LIVE_UNLOCK (basesrc);
+ return GST_FLOW_FLUSHING;