summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authorThiago Santos <thiagossantos@gmail.com>2017-05-29 22:47:10 -0700
committerEdward Hervey <bilboed@bilboed.com>2017-07-13 07:42:58 +0200
commitead63a268647eff2bcf92d8dc55ca41ee44247c2 (patch)
treed4bd9e104fe34c2bfa1cb6c5c4696cfe30776362 /ext
parent33afa6bd18110b3db9ffde9d473c6af3d2d05936 (diff)
downloadgstreamer-plugins-bad-ead63a268647eff2bcf92d8dc55ca41ee44247c2.tar.gz
dashdemux: update manifest streams correctly if pads aren't exposed
In some cases, it is possible that we need to update the manifest before pads have been exposed at all. If there are no current pads, just expose the next prepared streams. This doesn't handle the case where a manifest update would happen while a live streams is changing periods, which is a type of use case that we're unaware of real usages yet. https://bugzilla.gnome.org/show_bug.cgi?id=783028
Diffstat (limited to 'ext')
-rw-r--r--ext/dash/gstdashdemux.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/ext/dash/gstdashdemux.c b/ext/dash/gstdashdemux.c
index 0131df2ba..baad2cfb7 100644
--- a/ext/dash/gstdashdemux.c
+++ b/ext/dash/gstdashdemux.c
@@ -2411,6 +2411,7 @@ gst_dash_demux_update_manifest_data (GstAdaptiveDemux * demux,
guint period_idx;
GList *iter;
GList *streams_iter;
+ GList *streams;
/* prepare the new manifest and try to transfer the stream position
* status from the old manifest client */
@@ -2449,8 +2450,18 @@ gst_dash_demux_update_manifest_data (GstAdaptiveDemux * demux,
return GST_FLOW_ERROR;
}
+ /* If no pads have been exposed yet, need to use those */
+ streams = NULL;
+ if (demux->streams == NULL) {
+ if (demux->prepared_streams) {
+ streams = demux->prepared_streams;
+ }
+ } else {
+ streams = demux->streams;
+ }
+
/* update the streams to play from the next segment */
- for (iter = demux->streams, streams_iter = new_client->active_streams;
+ for (iter = streams, streams_iter = new_client->active_streams;
iter && streams_iter;
iter = g_list_next (iter), streams_iter = g_list_next (streams_iter)) {
GstDashDemuxStream *demux_stream = iter->data;