From 28db6754a720c69a78d9fb45d49dc88cf7b97d09 Mon Sep 17 00:00:00 2001 From: Gilbok Lee Date: Fri, 13 Aug 2021 13:10:06 +0900 Subject: [PATCH] tsdemux: Save language tag when program is NULL - When streaming HLS, global_tag release because of the buffer discontinue. So, Save and sending pending laguage tag Change-Id: Ia2823d64894701d27dd47810c0a5a6db385e71b2 --- gst/mpegtsdemux/tsdemux.c | 33 +++++++++++++++++++++++++++++++++ gst/mpegtsdemux/tsdemux.h | 4 ++++ packaging/gst-plugins-bad.spec | 1 + 3 files changed, 38 insertions(+) diff --git a/gst/mpegtsdemux/tsdemux.c b/gst/mpegtsdemux/tsdemux.c index 9ba35af74..edaed130f 100644 --- a/gst/mpegtsdemux/tsdemux.c +++ b/gst/mpegtsdemux/tsdemux.c @@ -446,6 +446,12 @@ gst_ts_demux_reset (MpegTSBase * base) gst_tag_list_unref (demux->global_tags); demux->global_tags = NULL; } +#ifdef TIZEN_FEATURE_TSDEMUX_LANG_TAG + if (demux->pending_language_tag) { + gst_tag_list_unref (demux->pending_language_tag); + demux->pending_language_tag = NULL; + } +#endif if (demux->previous_program) { mpegts_base_deactivate_and_free_program (base, demux->previous_program); @@ -1008,6 +1014,17 @@ push_event (MpegTSBase * base, GstEvent * event) } if (G_UNLIKELY (demux->program == NULL)) { +#ifdef TIZEN_FEATURE_TSDEMUX_LANG_TAG + if (demux->global_tags) { + gchar *tag = NULL; + gst_tag_list_get_string (demux->global_tags, "language-code", &tag); + if (tag) { + demux->pending_language_tag = + gst_tag_list_new (GST_TAG_LANGUAGE_CODE, tag, NULL); + g_free (tag); + } + } +#endif gst_event_unref (event); return early_ret; } @@ -2833,6 +2850,22 @@ push_new_segment: /* Push pending tags */ if (stream->taglist) { +#ifdef TIZEN_FEATURE_TSDEMUX_LANG_TAG + if (demux->pending_language_tag) { + gchar *audio_codec = NULL; + if (gst_tag_list_get_string (stream->taglist, GST_TAG_AUDIO_CODEC, + &audio_codec)) { + GST_DEBUG ("Sending pending language tags %" GST_PTR_FORMAT, + demux->pending_language_tag); + gst_pad_push_event (stream->pad, + gst_event_new_tag (gst_tag_list_ref + (demux->pending_language_tag))); + g_free (audio_codec); + gst_tag_list_unref (demux->pending_language_tag); + demux->pending_language_tag = NULL; + } + } +#endif GST_DEBUG_OBJECT (stream->pad, "Sending tags %" GST_PTR_FORMAT, stream->taglist); gst_pad_push_event (stream->pad, gst_event_new_tag (stream->taglist)); diff --git a/gst/mpegtsdemux/tsdemux.h b/gst/mpegtsdemux/tsdemux.h index a7c08da14..420788c96 100644 --- a/gst/mpegtsdemux/tsdemux.h +++ b/gst/mpegtsdemux/tsdemux.h @@ -94,6 +94,10 @@ struct _GstTSDemux /* global taglist */ GstTagList *global_tags; +#ifdef TIZEN_FEATURE_TSDEMUX_LANG_TAG + GstTagList *pending_language_tag; +#endif + /* Full stream duration */ GstClockTime duration; diff --git a/packaging/gst-plugins-bad.spec b/packaging/gst-plugins-bad.spec index 2e1e716ae..1a37716fb 100644 --- a/packaging/gst-plugins-bad.spec +++ b/packaging/gst-plugins-bad.spec @@ -82,6 +82,7 @@ export CFLAGS+=" -Wall -g -fPIC\ -DTIZEN_FEATURE_ADAPTIVE_MODIFICATION\ -DTIZEN_FEATURE_HLSDEMUX_PROPERTY\ -DTIZEN_FEATURE_TSDEMUX_MODIFICATION\ + -DTIZEN_FEATURE_TSDEMUX_LANG_TAG\ -DTIZEN_FEATURE_HLS_WEBVTT\ -DTIZEN_FEATURE_OALSINK_MODIFICATION\ -DTIZEN_FEATURE_MPEGDEMUX_MODIFICATION\ -- 2.34.1