tsdemux: Disable smart program update

The goal of this code was, for programs which were updates (i.e. adding/removing
streams but not completely changing) to allow dynamic addition/removal of
streams without completely removing everything.

But this wasn't 100% tested and there are a bunch of issues which make it fail
in plenty of ways.

For now disable that feature and force the legacy "add all pads again and then
remove old ones" behaviour to make it switch.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6651>
This commit is contained in:
Edward Hervey 2024-04-16 09:50:52 +02:00 committed by GStreamer Marge Bot
parent 9fd0f44492
commit 6d228c420c

View file

@ -684,6 +684,7 @@ mpegts_base_program_remove_stream (MpegTSBase * base,
program->streams[pid] = NULL; program->streams[pid] = NULL;
} }
#if 0 /* Smart-update disabled */
/* Check if pmtstream is already present in the program */ /* Check if pmtstream is already present in the program */
static inline gboolean static inline gboolean
_stream_in_pmt (const GstMpegtsPMT * pmt, MpegTSBaseStream * stream) _stream_in_pmt (const GstMpegtsPMT * pmt, MpegTSBaseStream * stream)
@ -768,7 +769,7 @@ mpegts_base_update_program (MpegTSBase * base, MpegTSBaseProgram * program,
g_list_free (toremove); g_list_free (toremove);
return TRUE; return TRUE;
} }
#endif
static gboolean static gboolean
_stream_is_private_section (const GstMpegtsPMT * pmt, _stream_is_private_section (const GstMpegtsPMT * pmt,
@ -862,6 +863,7 @@ mpegts_base_is_same_program (MpegTSBase * base, MpegTSBaseProgram * oldprogram,
return TRUE; return TRUE;
} }
#if 0 /* Smart-update disabled */
/* Return TRUE if program is an update /* Return TRUE if program is an update
* *
* A program is equal if: * A program is equal if:
@ -923,6 +925,7 @@ mpegts_base_is_program_update (MpegTSBase * base,
GST_DEBUG ("Program is not an update of the previous one"); GST_DEBUG ("Program is not an update of the previous one");
return FALSE; return FALSE;
} }
#endif
static void static void
mpegts_base_deactivate_program (MpegTSBase * base, MpegTSBaseProgram * program) mpegts_base_deactivate_program (MpegTSBase * base, MpegTSBaseProgram * program)
@ -1208,6 +1211,8 @@ mpegts_base_apply_pmt (MpegTSBase * base, GstMpegtsSection * section)
pmt))) pmt)))
goto same_program; goto same_program;
#if 0
/* parsebin doesn't support program update properly. Disable this feature for now */
if (base->streams_aware if (base->streams_aware
&& mpegts_base_is_program_update (base, old_program, section->pid, pmt)) { && mpegts_base_is_program_update (base, old_program, section->pid, pmt)) {
GST_FIXME ("We are streams_aware and new program is an update"); GST_FIXME ("We are streams_aware and new program is an update");
@ -1215,6 +1220,7 @@ mpegts_base_apply_pmt (MpegTSBase * base, GstMpegtsSection * section)
mpegts_base_update_program (base, old_program, section, pmt); mpegts_base_update_program (base, old_program, section, pmt);
goto beach; goto beach;
} }
#endif
/* If the current program is active, this means we have a new program */ /* If the current program is active, this means we have a new program */
if (old_program->active) { if (old_program->active) {
@ -1247,7 +1253,9 @@ mpegts_base_apply_pmt (MpegTSBase * base, GstMpegtsSection * section)
mpegts_base_activate_program (base, program, section->pid, section, pmt, mpegts_base_activate_program (base, program, section->pid, section, pmt,
initial_program); initial_program);
#if 0 /* Smart-update disabled */
beach: beach:
#endif
GST_DEBUG ("Done activating program"); GST_DEBUG ("Done activating program");
return TRUE; return TRUE;