hlsdemux: Save the EXT-X-MEDIA information about embedded stream
authorGilbok Lee <gilbok.lee@samsung.com>
Wed, 11 Aug 2021 08:26:48 +0000 (17:26 +0900)
committerGilbok Lee <gilbok.lee@samsung.com>
Fri, 13 Aug 2021 03:04:01 +0000 (12:04 +0900)
- And set the tag for embedded stream language code

Change-Id: Ie5336e24d5c09c90324df902b63dfa57324f0dfd

ext/hls/gsthlsdemux.c
ext/hls/m3u8.c

index 5ad6a7e..e5aa439 100644 (file)
@@ -133,6 +133,10 @@ static gboolean gst_hls_demux_get_live_seek_range (GstAdaptiveDemux * demux,
 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_language_tags (GstAdaptiveDemuxStream * stream,
+    const gchar * language);
+#endif
 
 #define gst_hls_demux_parent_class parent_class
 G_DEFINE_TYPE (GstHLSDemux, gst_hls_demux, GST_TYPE_ADAPTIVE_DEMUX);
@@ -656,9 +660,6 @@ create_stream_for_playlist (GstAdaptiveDemux * demux, GstM3U8 * playlist,
   GstHLSDemux *hlsdemux = GST_HLS_DEMUX_CAST (demux);
   GstHLSDemuxStream *hlsdemux_stream;
   GstAdaptiveDemuxStream *stream;
-#ifdef TIZEN_FEATURE_HLSDEMUX_LANG_TAG
-  GstTagList *lang_tag = NULL;
-#endif
 
   if (!selected) {
     /* FIXME: Later, create the stream but mark not-selected */
@@ -680,14 +681,18 @@ create_stream_for_playlist (GstAdaptiveDemux * demux, GstM3U8 * playlist,
   hlsdemux_stream->reset_pts = TRUE;
 
 #ifdef TIZEN_FEATURE_HLSDEMUX_LANG_TAG
-  if (media && media->lang) {
-    if (gst_tag_check_language_code (media->lang))
-      lang_tag = gst_tag_list_new (GST_TAG_LANGUAGE_CODE, media->lang, NULL);
-    else
-      lang_tag = gst_tag_list_new (GST_TAG_LANGUAGE_NAME, media->lang, NULL);
-
-    if (lang_tag)
-      gst_adaptive_demux_stream_set_tags (stream, 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);
   }
 #endif
 }
@@ -2182,3 +2187,26 @@ gst_hls_demux_get_live_seek_range (GstAdaptiveDemux * demux, gint64 * start,
 
   return ret;
 }
+
+#ifdef TIZEN_FEATURE_HLSDEMUX_LANG_TAG
+static gboolean
+gst_hlsdemux_set_language_tags (GstAdaptiveDemuxStream *stream, const gchar *language)
+{
+  GstTagList *lang_tag = NULL;
+
+  if (!stream)
+    return FALSE;
+
+  if (gst_tag_check_language_code (language))
+    lang_tag = gst_tag_list_new (GST_TAG_LANGUAGE_CODE, language, NULL);
+  else
+    lang_tag = gst_tag_list_new (GST_TAG_LANGUAGE_NAME, language, NULL);
+
+  if (!lang_tag)
+    return FALSE;
+
+  gst_adaptive_demux_stream_set_tags (stream, lang_tag);
+
+  return TRUE;
+}
+#endif
\ No newline at end of file
index 6104b61..55ca85e 100644 (file)
@@ -1398,14 +1398,18 @@ gst_m3u8_parse_media (gchar * desc, const gchar * base_uri)
   if (media->mtype == GST_HLS_MEDIA_TYPE_INVALID)
     goto required_attributes_missing;
 
+#ifndef TIZEN_FEATURE_HLSDEMUX_LANG_TAG
   if (media->uri == NULL)
     goto existing_stream;
+#endif
 
   if (media->group_id == NULL || media->name == NULL)
     goto required_attributes_missing;
 
+#ifndef TIZEN_FEATURE_HLSDEMUX_LANG_TAG
   if (media->mtype == GST_HLS_MEDIA_TYPE_CLOSED_CAPTIONS)
     goto uri_with_cc;
+#endif
 
   GST_DEBUG ("media: %s, group '%s', name '%s', uri '%s', %s %s %s, lang=%s",
       GST_HLS_MEDIA_TYPE_NAME (media->mtype), media->group_id, media->name,
@@ -1415,22 +1419,26 @@ gst_m3u8_parse_media (gchar * desc, const gchar * base_uri)
 
   return media;
 
+#ifndef TIZEN_FEATURE_HLSDEMUX_LANG_TAG
 uri_with_cc:
   {
     GST_WARNING ("closed captions EXT-X-MEDIA should not have URI specified");
     goto out_error;
   }
+#endif
 required_attributes_missing:
   {
     GST_WARNING ("EXT-X-MEDIA description is missing required attributes");
     goto out_error;
     /* fall through */
   }
+#ifndef TIZEN_FEATURE_HLSDEMUX_LANG_TAG
 existing_stream:
   {
     GST_DEBUG ("EXT-X-MEDIA without URI, describes embedded stream, skipping");
     /* fall through */
   }
+#endif
 
 out_error:
   {