From 159d400da568de4594afccf2bdc2f6ea66b8f542 Mon Sep 17 00:00:00 2001 From: Gilbok Lee Date: Tue, 31 Aug 2021 17:22:13 +0900 Subject: [PATCH] hlsdemux: Send HLSMedia information through custom event Change-Id: Ibd1845ec1a40c81e026752b1e955cf16644f27bc --- ext/hls/gsthlsdemux.c | 54 +++++++++++++++++++++++++++++++++---------- 1 file changed, 42 insertions(+), 12 deletions(-) diff --git a/ext/hls/gsthlsdemux.c b/ext/hls/gsthlsdemux.c index 47356f053..7e5742b9d 100644 --- a/ext/hls/gsthlsdemux.c +++ b/ext/hls/gsthlsdemux.c @@ -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 } @@ -2396,6 +2395,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) { -- 2.34.1