mpegtsdemux: activate new stream when program update
authorGilbok Lee <gilbok.lee@samsung.com>
Wed, 1 Dec 2021 04:55:42 +0000 (13:55 +0900)
committerGilbok Lee <gilbok.lee@samsung.com>
Wed, 1 Dec 2021 04:55:42 +0000 (13:55 +0900)
Change-Id: If8f299f90e181d47579f143e9671d488f0b2dbe6

gst/mpegtsdemux/mpegtsbase.c
gst/mpegtsdemux/tsdemux.c
packaging/gst-plugins-bad.spec

index 3f65b01..2e41f95 100644 (file)
@@ -740,9 +740,23 @@ mpegts_base_update_program (MpegTSBase * base, MpegTSBaseProgram * program,
   nbstreams = pmt->streams->len;
   for (i = 0; i < nbstreams; i++) {
     GstMpegtsPMTStream *stream = g_ptr_array_index (pmt->streams, i);
-    if (!_pmt_stream_in_program (program, stream))
+    if (!_pmt_stream_in_program (program, stream)) {
+#ifdef TIZEN_FEATURE_TSDEMUX_UPDATE_STREAM
+      if (G_UNLIKELY (MPEGTS_BIT_IS_SET (base->is_pes, stream->pid)))
+        GST_FIXME
+            ("Refcounting issue. Setting twice a PID (0x%04x) as known PES",
+            stream->pid);
+      if (G_UNLIKELY (MPEGTS_BIT_IS_SET (base->known_psi, stream->pid))) {
+        GST_FIXME
+            ("Refcounting issue. Setting a known PSI PID (0x%04x) as known PES",
+            stream->pid);
+        MPEGTS_BIT_UNSET (base->known_psi, stream->pid);
+      }
+      MPEGTS_BIT_SET (base->is_pes, stream->pid);
+#endif
       mpegts_base_program_add_stream (base, program, stream->pid,
           stream->stream_type, stream);
+    }
   }
 
   /* Call subclass update */
@@ -759,6 +773,9 @@ mpegts_base_update_program (MpegTSBase * base, MpegTSBaseProgram * program,
   for (tmp = toremove; tmp; tmp = tmp->next) {
     MpegTSBaseStream *stream = (MpegTSBaseStream *) tmp->data;
     mpegts_base_program_remove_stream (base, program, stream->pid);
+#ifdef TIZEN_FEATURE_TSDEMUX_UPDATE_STREAM
+    MPEGTS_BIT_UNSET (base->is_pes, stream->pid);
+#endif
   }
   return TRUE;
 }
index 34c2b3b..6726d60 100644 (file)
@@ -2145,7 +2145,12 @@ gst_ts_demux_update_program (MpegTSBase * base, MpegTSBaseProgram * program)
   /* Add all streams, then fire no-more-pads */
   for (tmp = program->stream_list; tmp; tmp = tmp->next) {
     TSDemuxStream *stream = (TSDemuxStream *) tmp->data;
+#ifdef TIZEN_FEATURE_TSDEMUX_UPDATE_STREAM
+    if (!stream->pad
+        || (stream->pad && !stream->active)) {
+#else
     if (!stream->pad) {
+#endif
       activate_pad_for_stream (demux, stream);
       if (stream->sparse) {
         /* force sending of pending sticky events which have been stored on the
index 60956e9..81b6aee 100644 (file)
@@ -4,7 +4,7 @@
 
 Name:           gst-plugins-bad
 Version:        1.16.2
-Release:        26
+Release:        27
 Summary:        GStreamer Streaming-Media Framework Plug-Ins
 License:        LGPL-2.0+
 Group:          Multimedia/Framework
@@ -86,6 +86,7 @@ export CFLAGS+=" -Wall -g -fPIC\
   -DTIZEN_FEATURE_TSDEMUX_INVALID_PCR_PID\
   -DTIZEN_FEATURE_TSDEMUX_LANG_TAG\
   -DTIZEN_FEATURE_TSDEMUX_UPDATE_PMT\
+  -DTIZEN_FEATURE_TSDEMUX_UPDATE_STREAM\
   -DTIZEN_FEATURE_HLS_WEBVTT\
   -DTIZEN_FEATURE_OALSINK_MODIFICATION\
   -DTIZEN_FEATURE_MPEGDEMUX_MODIFICATION\