From 07f8147b03fe4309d9cc25392319641caa7dae6a Mon Sep 17 00:00:00 2001 From: Gilbok Lee Date: Wed, 1 Dec 2021 13:55:42 +0900 Subject: [PATCH] mpegtsdemux: activate new stream when program update Change-Id: If8f299f90e181d47579f143e9671d488f0b2dbe6 --- gst/mpegtsdemux/mpegtsbase.c | 19 ++++++++++++++++++- gst/mpegtsdemux/tsdemux.c | 5 +++++ packaging/gst-plugins-bad.spec | 3 ++- 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/gst/mpegtsdemux/mpegtsbase.c b/gst/mpegtsdemux/mpegtsbase.c index 3f65b014c..2e41f9507 100644 --- a/gst/mpegtsdemux/mpegtsbase.c +++ b/gst/mpegtsdemux/mpegtsbase.c @@ -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; } diff --git a/gst/mpegtsdemux/tsdemux.c b/gst/mpegtsdemux/tsdemux.c index 34c2b3b85..6726d60a9 100644 --- a/gst/mpegtsdemux/tsdemux.c +++ b/gst/mpegtsdemux/tsdemux.c @@ -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 diff --git a/packaging/gst-plugins-bad.spec b/packaging/gst-plugins-bad.spec index 60956e999..81b6aeee4 100644 --- a/packaging/gst-plugins-bad.spec +++ b/packaging/gst-plugins-bad.spec @@ -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\ -- 2.34.1