tsmux: When selecting random PIDs, name the pads according to those PIDs

Some elements will make use of the automatically generated names to
create new pads in future muxer instances, for example splitmuxsink.

Previously we would've created a pad with a random pid that would become
"sink_0", and then on a new muxer instance a pad "sink_0" and tsmux
would've then failed because 0 is not a valid PID.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2318>
This commit is contained in:
Sebastian Dröge 2021-06-10 11:42:24 +03:00 committed by GStreamer Marge Bot
parent ba26a5aea8
commit 52a0c36598

View file

@ -1353,6 +1353,7 @@ gst_base_ts_mux_request_new_pad (GstElement * element, GstPadTemplate * templ,
GstBaseTsMux *mux = GST_BASE_TS_MUX (element); GstBaseTsMux *mux = GST_BASE_TS_MUX (element);
gint pid = -1; gint pid = -1;
GstPad *pad = NULL; GstPad *pad = NULL;
gchar *free_name = NULL;
if (name != NULL && sscanf (name, "sink_%d", &pid) == 1) { if (name != NULL && sscanf (name, "sink_%d", &pid) == 1) {
if (tsmux_find_stream (mux->tsmux, pid)) if (tsmux_find_stream (mux->tsmux, pid))
@ -1365,6 +1366,9 @@ gst_base_ts_mux_request_new_pad (GstElement * element, GstPadTemplate * templ,
do { do {
pid = tsmux_get_new_pid (mux->tsmux); pid = tsmux_get_new_pid (mux->tsmux);
} while (gst_base_ts_mux_has_pad_with_pid (mux, pid)); } while (gst_base_ts_mux_has_pad_with_pid (mux, pid));
/* Name the pad correctly after the selected pid */
name = free_name = g_strdup_printf ("sink_%d", pid);
} }
pad = (GstPad *) pad = (GstPad *)
@ -1374,6 +1378,8 @@ gst_base_ts_mux_request_new_pad (GstElement * element, GstPadTemplate * templ,
gst_base_ts_mux_pad_reset (GST_BASE_TS_MUX_PAD (pad)); gst_base_ts_mux_pad_reset (GST_BASE_TS_MUX_PAD (pad));
GST_BASE_TS_MUX_PAD (pad)->pid = pid; GST_BASE_TS_MUX_PAD (pad)->pid = pid;
g_free (free_name);
return pad; return pad;
/* ERRORS */ /* ERRORS */
@ -1387,7 +1393,7 @@ stream_exists:
invalid_stream_pid: invalid_stream_pid:
{ {
GST_ELEMENT_ERROR (element, STREAM, MUX, GST_ELEMENT_ERROR (element, STREAM, MUX,
("Invalid Elementary stream PID (< 0x40)"), (NULL)); ("Invalid Elementary stream PID (0x%02u < 0x40)", pid), (NULL));
return NULL; return NULL;
} }
} }