mssdemux should set the streams it has exposed as active so that
the manifest won't use the non-active streams to compute total bitrates
or providing fragments
_set_src_pad_functions (srcpad);
stream = gst_mss_demux_stream_new (mssdemux, manifeststream, srcpad);
_set_src_pad_functions (srcpad);
stream = gst_mss_demux_stream_new (mssdemux, manifeststream, srcpad);
+ gst_mss_stream_set_active (manifeststream, TRUE);
mssdemux->streams = g_slist_append (mssdemux->streams, stream);
}
}
mssdemux->streams = g_slist_append (mssdemux->streams, stream);
}
}
+ gboolean active; /* if the stream is currently being used */
gint selectedQualityIndex;
GList *fragments;
gint selectedQualityIndex;
GList *fragments;
+void
+gst_mss_stream_set_active (GstMssStream * stream, gboolean active)
+{
+ stream->active = active;
+}
+
guint64
gst_mss_stream_get_timescale (GstMssStream * stream)
{
guint64
gst_mss_stream_get_timescale (GstMssStream * stream)
{
GstMssStreamFragment *fragment;
GstMssStreamQuality *quality = stream->current_quality->data;
GstMssStreamFragment *fragment;
GstMssStreamQuality *quality = stream->current_quality->data;
+ g_return_val_if_fail (stream->active, GST_FLOW_ERROR);
+
if (stream->current_fragment == NULL) /* stream is over */
return GST_FLOW_UNEXPECTED;
if (stream->current_fragment == NULL) /* stream is over */
return GST_FLOW_UNEXPECTED;
guint64 timescale;
GstMssStreamFragment *fragment;
guint64 timescale;
GstMssStreamFragment *fragment;
+ g_return_val_if_fail (stream->active, GST_FLOW_ERROR);
+
if (!stream->current_fragment)
return GST_CLOCK_TIME_NONE;
if (!stream->current_fragment)
return GST_CLOCK_TIME_NONE;
guint64 timescale;
GstMssStreamFragment *fragment;
guint64 timescale;
GstMssStreamFragment *fragment;
+ g_return_val_if_fail (stream->active, GST_FLOW_ERROR);
+
if (!stream->current_fragment)
return GST_CLOCK_TIME_NONE;
if (!stream->current_fragment)
return GST_CLOCK_TIME_NONE;
GstFlowReturn
gst_mss_stream_advance_fragment (GstMssStream * stream)
{
GstFlowReturn
gst_mss_stream_advance_fragment (GstMssStream * stream)
{
+ g_return_val_if_fail (stream->active, GST_FLOW_ERROR);
+
if (stream->current_fragment == NULL)
return GST_FLOW_UNEXPECTED;
if (stream->current_fragment == NULL)
return GST_FLOW_UNEXPECTED;
GstMssStreamType gst_mss_stream_get_type (GstMssStream *stream);
GstCaps * gst_mss_stream_get_caps (GstMssStream * stream);
GstMssStreamType gst_mss_stream_get_type (GstMssStream *stream);
GstCaps * gst_mss_stream_get_caps (GstMssStream * stream);
+void gst_mss_stream_set_active (GstMssStream * stream, gboolean active);
guint64 gst_mss_stream_get_timescale (GstMssStream * stream);
GstFlowReturn gst_mss_stream_get_fragment_url (GstMssStream * stream, gchar ** url);
GstClockTime gst_mss_stream_get_fragment_gst_timestamp (GstMssStream * stream);
guint64 gst_mss_stream_get_timescale (GstMssStream * stream);
GstFlowReturn gst_mss_stream_get_fragment_url (GstMssStream * stream, gchar ** url);
GstClockTime gst_mss_stream_get_fragment_gst_timestamp (GstMssStream * stream);