From: Gilbok Lee Date: Wed, 11 Aug 2021 08:26:48 +0000 (+0900) Subject: hlsdemux: Save the EXT-X-MEDIA information about embedded stream X-Git-Tag: submit/tizen/20210813.081349~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=ec9daa30001c24f2e271b87adb5022c1fc33de60;p=platform%2Fupstream%2Fgst-plugins-bad.git hlsdemux: Save the EXT-X-MEDIA information about embedded stream - And set the tag for embedded stream language code Change-Id: Ie5336e24d5c09c90324df902b63dfa57324f0dfd --- diff --git a/ext/hls/gsthlsdemux.c b/ext/hls/gsthlsdemux.c index 5ad6a7eba..e5aa43921 100644 --- a/ext/hls/gsthlsdemux.c +++ b/ext/hls/gsthlsdemux.c @@ -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 diff --git a/ext/hls/m3u8.c b/ext/hls/m3u8.c index 6104b61cb..55ca85e5e 100644 --- a/ext/hls/m3u8.c +++ b/ext/hls/m3u8.c @@ -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: {