mssdemux: activate streams before configuring bitrate
authorPhilippe Normand <philn@igalia.com>
Wed, 16 Sep 2015 10:50:46 +0000 (12:50 +0200)
committerTim-Philipp Müller <tim@centricular.com>
Wed, 30 Sep 2015 16:20:59 +0000 (17:20 +0100)
Doing the contrary has no effect and the consequence is that playback
will start with the lowest bitrate even if we can already handle
higher bitrate.

https://bugzilla.gnome.org/show_bug.cgi?id=755108

ext/smoothstreaming/gstmssdemux.c

index 8f10d7d..196ce41 100644 (file)
@@ -373,6 +373,7 @@ gst_mss_demux_setup_streams (GstAdaptiveDemux * demux)
   GstMssDemux *mssdemux = GST_MSS_DEMUX_CAST (demux);
   GSList *streams = gst_mss_manifest_get_streams (mssdemux->manifest);
   GSList *iter;
+  GSList *active_streams = NULL;
 
   if (streams == NULL) {
     GST_INFO_OBJECT (mssdemux, "No streams found in the manifest");
@@ -382,16 +383,11 @@ gst_mss_demux_setup_streams (GstAdaptiveDemux * demux)
     return FALSE;
   }
 
-  GST_INFO_OBJECT (mssdemux, "Changing max bitrate to %u",
-      demux->connection_speed);
-  gst_mss_manifest_change_bitrate (mssdemux->manifest, demux->connection_speed);
-
+  GST_INFO_OBJECT (mssdemux, "Activating streams");
   for (iter = streams; iter; iter = g_slist_next (iter)) {
     GstPad *srcpad = NULL;
     GstMssDemuxStream *stream = NULL;
     GstMssStream *manifeststream = iter->data;
-    GstCaps *caps;
-    const gchar *lang;
 
     srcpad = _create_pad (mssdemux, manifeststream);
 
@@ -404,6 +400,18 @@ gst_mss_demux_setup_streams (GstAdaptiveDemux * demux)
         srcpad);
     stream->manifest_stream = manifeststream;
     gst_mss_stream_set_active (manifeststream, TRUE);
+    active_streams = g_slist_prepend (active_streams, stream);
+  }
+
+  GST_INFO_OBJECT (mssdemux, "Changing max bitrate to %u",
+      demux->connection_speed);
+  gst_mss_manifest_change_bitrate (mssdemux->manifest, demux->connection_speed);
+
+  for (iter = active_streams; iter; iter = g_slist_next (iter)) {
+    GstMssDemuxStream *stream = iter->data;
+    GstCaps *caps;
+    const gchar *lang;
+
     caps = gst_mss_stream_get_caps (stream->manifest_stream);
     gst_adaptive_demux_stream_set_caps (GST_ADAPTIVE_DEMUX_STREAM_CAST (stream),
         create_mss_caps (stream, caps));
@@ -419,6 +427,7 @@ gst_mss_demux_setup_streams (GstAdaptiveDemux * demux)
     }
   }
 
+  g_slist_free (active_streams);
   return TRUE;
 }