From 4b6900999a70b7438d72bae9665d1e76036e3291 Mon Sep 17 00:00:00 2001 From: Thiago Santos Date: Tue, 8 Jan 2013 17:55:49 -0300 Subject: [PATCH] mssdemux: add an 'active' flag to manifest stream 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 --- ext/smoothstreaming/gstmssdemux.c | 1 + ext/smoothstreaming/gstmssmanifest.c | 15 +++++++++++++++ ext/smoothstreaming/gstmssmanifest.h | 1 + 3 files changed, 17 insertions(+) diff --git a/ext/smoothstreaming/gstmssdemux.c b/ext/smoothstreaming/gstmssdemux.c index 59bc694..22bfdc7 100644 --- a/ext/smoothstreaming/gstmssdemux.c +++ b/ext/smoothstreaming/gstmssdemux.c @@ -529,6 +529,7 @@ gst_mss_demux_create_streams (GstMssDemux * mssdemux) _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); } } diff --git a/ext/smoothstreaming/gstmssmanifest.c b/ext/smoothstreaming/gstmssmanifest.c index 80e22e9..71fd576 100644 --- a/ext/smoothstreaming/gstmssmanifest.c +++ b/ext/smoothstreaming/gstmssmanifest.c @@ -64,6 +64,7 @@ struct _GstMssStream { xmlNodePtr xmlnode; + gboolean active; /* if the stream is currently being used */ gint selectedQualityIndex; GList *fragments; @@ -504,6 +505,12 @@ end: return caps; } +void +gst_mss_stream_set_active (GstMssStream * stream, gboolean active) +{ + stream->active = active; +} + guint64 gst_mss_stream_get_timescale (GstMssStream * stream) { @@ -606,6 +613,8 @@ gst_mss_stream_get_fragment_url (GstMssStream * stream, gchar ** url) 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; @@ -630,6 +639,8 @@ gst_mss_stream_get_fragment_gst_timestamp (GstMssStream * stream) guint64 timescale; GstMssStreamFragment *fragment; + g_return_val_if_fail (stream->active, GST_FLOW_ERROR); + if (!stream->current_fragment) return GST_CLOCK_TIME_NONE; @@ -648,6 +659,8 @@ gst_mss_stream_get_fragment_gst_duration (GstMssStream * stream) guint64 timescale; GstMssStreamFragment *fragment; + g_return_val_if_fail (stream->active, GST_FLOW_ERROR); + if (!stream->current_fragment) return GST_CLOCK_TIME_NONE; @@ -662,6 +675,8 @@ gst_mss_stream_get_fragment_gst_duration (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; diff --git a/ext/smoothstreaming/gstmssmanifest.h b/ext/smoothstreaming/gstmssmanifest.h index 29741a3..6abb4e9 100644 --- a/ext/smoothstreaming/gstmssmanifest.h +++ b/ext/smoothstreaming/gstmssmanifest.h @@ -48,6 +48,7 @@ gboolean gst_mss_manifest_seek (GstMssManifest * manifest, guint64 time); 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); -- 2.7.4