GstFlowReturn start_result;
gboolean async;
+ /* if a stream-start event should be sent */
+ gboolean stream_start_pending;
+
/* if segment should be sent */
gboolean segment_pending;
return res;
}
+static gboolean
+gst_base_src_send_stream_start (GstBaseSrc * src)
+{
+ gboolean ret = TRUE;
+
+ if (src->priv->stream_start_pending) {
+ ret = gst_pad_push_event (src->srcpad, gst_event_new_stream_start ());
+ src->priv->stream_start_pending = FALSE;
+ }
+
+ return ret;
+}
+
/**
* gst_base_src_set_caps:
* @src: a #GstBaseSrc
bclass = GST_BASE_SRC_GET_CLASS (src);
+ gst_base_src_send_stream_start (src);
gst_pad_push_event (src->srcpad, gst_event_new_caps (caps));
if (bclass->set_caps)
src = GST_BASE_SRC (GST_OBJECT_PARENT (pad));
+ gst_base_src_send_stream_start (src);
+
/* check if we need to renegotiate */
if (gst_pad_check_reconfigure (pad)) {
if (!gst_base_src_negotiate (src))
case GST_STATE_CHANGE_NULL_TO_READY:
break;
case GST_STATE_CHANGE_READY_TO_PAUSED:
+ basesrc->priv->stream_start_pending = TRUE;
no_preroll = gst_base_src_is_live (basesrc);
break;
case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
* already did this */
g_atomic_int_set (&basesrc->priv->pending_eos, FALSE);
gst_event_replace (&basesrc->pending_seek, NULL);
+ basesrc->priv->stream_start_pending = FALSE;
break;
}
case GST_STATE_CHANGE_READY_TO_NULL: