summaryrefslogtreecommitdiff
path: root/ext/hls/m3u8.c
diff options
context:
space:
mode:
authorJan Schmidt <jan@centricular.com>2016-03-09 03:07:22 +1100
committerJan Schmidt <jan@centricular.com>2016-08-03 23:49:54 +1000
commitf3397e0d547fbb2ecc3d5fb4cbc87b9f6d6aa23e (patch)
tree3805e1e1bc995b16074036438275d27bfbbdf0c1 /ext/hls/m3u8.c
parent4df6f1ee930af0ec7961ade57e21bd904f199fa9 (diff)
downloadgstreamer-plugins-bad-f3397e0d547fbb2ecc3d5fb4cbc87b9f6d6aa23e.tar.gz
hlsdemux: Choose the default variant and track it when updating
Modify playlist updating to track information across updates better, although still hackish. When connection_speed == 0, choose the default variant not the first one in the (now sorted) variant list, as that will have the lowest bitrate.
Diffstat (limited to 'ext/hls/m3u8.c')
-rw-r--r--ext/hls/m3u8.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/ext/hls/m3u8.c b/ext/hls/m3u8.c
index 0f327adc1..db5d89855 100644
--- a/ext/hls/m3u8.c
+++ b/ext/hls/m3u8.c
@@ -1552,6 +1552,29 @@ gst_hls_variant_stream_is_live (GstHLSVariantStream * variant)
return is_live;
}
+static gint
+compare_media (const GstHLSMedia * a, const GstHLSMedia * b)
+{
+ return strcmp (a->name, b->name);
+}
+
+GstHLSMedia *
+gst_hls_variant_find_matching_media (GstHLSVariantStream * stream,
+ GstHLSMedia * media)
+{
+ GList *mlist = stream->media[media->mtype];
+ GList *match;
+
+ if (mlist == NULL)
+ return NULL;
+
+ match = g_list_find_custom (mlist, media, (GCompareFunc) compare_media);
+ if (match == NULL)
+ return NULL;
+
+ return match->data;
+}
+
GstHLSVariantStream *
gst_hls_master_playlist_get_variant_for_bitrate (GstHLSMasterPlaylist *
playlist, GstHLSVariantStream * current_variant, guint bitrate)
@@ -1574,3 +1597,15 @@ gst_hls_master_playlist_get_variant_for_bitrate (GstHLSMasterPlaylist *
return variant;
}
+
+GstHLSVariantStream *
+gst_hls_master_playlist_get_matching_variant (GstHLSMasterPlaylist * playlist,
+ GstHLSVariantStream * current_variant)
+{
+ if (current_variant->iframe) {
+ return find_variant_stream_by_uri (playlist->iframe_variants,
+ current_variant->uri);
+ }
+
+ return find_variant_stream_by_uri (playlist->variants, current_variant->uri);
+}