tsdemux: Save language tag when program is NULL
authorGilbok Lee <gilbok.lee@samsung.com>
Fri, 13 Aug 2021 04:10:06 +0000 (13:10 +0900)
committerGilbok Lee <gilbok.lee@samsung.com>
Fri, 13 Aug 2021 06:09:38 +0000 (15:09 +0900)
- 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
gst/mpegtsdemux/tsdemux.h
packaging/gst-plugins-bad.spec

index 9ba35af..edaed13 100644 (file)
@@ -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));
index a7c08da..420788c 100644 (file)
@@ -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;
 
index 2e1e716..1a37716 100644 (file)
@@ -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\