mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-23 02:01:12 +00:00
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:
parent
ba26a5aea8
commit
52a0c36598
1 changed files with 7 additions and 1 deletions
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue