hlsdemux: Send HLSMedia information through custom event
authorGilbok Lee <gilbok.lee@samsung.com>
Tue, 31 Aug 2021 08:22:13 +0000 (17:22 +0900)
committerGilbok Lee <gilbok.lee@samsung.com>
Wed, 1 Sep 2021 06:26:56 +0000 (06:26 +0000)
Change-Id: Ibd1845ec1a40c81e026752b1e955cf16644f27bc

ext/hls/gsthlsdemux.c

index 47356f0..7e5742b 100644 (file)
@@ -134,6 +134,8 @@ static GstM3U8 *gst_hls_demux_stream_get_m3u8 (GstHLSDemuxStream * hls_stream);
 static void gst_hls_demux_set_current_variant (GstHLSDemux * hlsdemux,
     GstHLSVariantStream * variant);
 #ifdef TIZEN_FEATURE_HLSDEMUX_LANG_TAG
+static gboolean gst_hlsdemux_set_stream_event (GstAdaptiveDemuxStream *stream,
+    GstHLSMedia *media);
 static gboolean gst_hlsdemux_set_language_tags (GstAdaptiveDemuxStream * stream,
     const gchar * language);
 #endif
@@ -691,18 +693,15 @@ create_stream_for_playlist (GstAdaptiveDemux * demux, GstM3U8 * playlist,
   hlsdemux_stream->reset_pts = TRUE;
 
 #ifdef TIZEN_FEATURE_HLSDEMUX_LANG_TAG
-  if (!media) {
-    GList *mlist = hlsdemux->current_variant->media[GST_HLS_MEDIA_TYPE_AUDIO];
-    while (mlist != NULL) {
-      GstHLSMedia *media = mlist->data;
-      if (media->uri == NULL && media->lang) {
-        if (gst_hlsdemux_set_language_tags(stream, media->lang))
-          break;
-      }
-      mlist = mlist->next;
-    }
-  } else if (media->lang) {
-    gst_hlsdemux_set_language_tags(stream, media->lang);
+  if (media) {
+    gst_hlsdemux_set_stream_event (stream, media);
+    return;
+  }
+
+  for (GList *mlist = hlsdemux->current_variant->media[GST_HLS_MEDIA_TYPE_AUDIO]; mlist; mlist = g_list_next(mlist)) {
+    GstHLSMedia *media = mlist->data;
+    if (!media->uri && gst_hlsdemux_set_stream_event (stream, media))
+      return;
   }
 #endif
 }
@@ -2397,6 +2396,37 @@ gst_hls_demux_get_live_seek_range (GstAdaptiveDemux * demux, gint64 * start,
 
 #ifdef TIZEN_FEATURE_HLSDEMUX_LANG_TAG
 static gboolean
+gst_hlsdemux_set_stream_event (GstAdaptiveDemuxStream *stream, GstHLSMedia *media)
+{
+  GstStructure *structure;
+  GstEvent *event;
+
+  if (!stream) {
+    GST_WARNING ("stream is NULL");
+    return FALSE;
+  }
+
+  if (!media) {
+    GST_WARNING ("media is NULL");
+    return FALSE;
+  }
+
+  if (media->lang)
+    gst_hlsdemux_set_language_tags (stream, media->lang);
+
+  structure = gst_structure_new ("GstHLSMedia", "mtype", G_TYPE_INT, media->mtype,
+      "default", G_TYPE_BOOLEAN, media->is_default,
+      "autoselect", G_TYPE_BOOLEAN, media->autoselect,
+      "forced", G_TYPE_BOOLEAN, media->forced, NULL);
+
+  event = gst_event_new_custom (GST_EVENT_CUSTOM_DOWNSTREAM, structure);
+
+  gst_adaptive_demux_stream_queue_event (stream, event);
+
+  return TRUE;
+}
+
+static gboolean
 gst_hlsdemux_set_language_tags (GstAdaptiveDemuxStream *stream, const gchar *language)
 {
   GstTagList *lang_tag = NULL;