From: Gilbok Lee Date: Tue, 31 Aug 2021 08:22:13 +0000 (+0900) Subject: hlsdemux: Send HLSMedia information through custom event X-Git-Tag: submit/tizen/20210906.055733~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=159d400da568de4594afccf2bdc2f6ea66b8f542;p=platform%2Fupstream%2Fgst-plugins-bad.git hlsdemux: Send HLSMedia information through custom event Change-Id: Ibd1845ec1a40c81e026752b1e955cf16644f27bc --- 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) {