diff options
author | George Kiagiadakis <george.kiagiadakis@collabora.com> | 2020-09-04 14:18:13 +0300 |
---|---|---|
committer | GStreamer Merge Bot <gitlab-merge-bot@gstreamer-foundation.org> | 2020-10-16 17:23:46 +0000 |
commit | 2fcbb4386bc6cb73082a56ed207392f9f4848f53 (patch) | |
tree | a571e1a8f8b73050868a71e8898c413b1c2f82ee /gst | |
parent | 6e30cbb3fc13d9de76b848e1c6dee7108b6e1af2 (diff) | |
download | gstreamer-plugins-bad-2fcbb4386bc6cb73082a56ed207392f9f4848f53.tar.gz |
rtpsrc: re-use the same src pad for streams that have the same payload type
Also use payload type when naming pads, this will make it easier to identify
pads and simplify the code.
Fixes #1395
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1575>
Diffstat (limited to 'gst')
-rw-r--r-- | gst/rtp/gstrtpsrc.c | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/gst/rtp/gstrtpsrc.c b/gst/rtp/gstrtpsrc.c index f8c29a725..3e576facd 100644 --- a/gst/rtp/gstrtpsrc.c +++ b/gst/rtp/gstrtpsrc.c @@ -426,7 +426,9 @@ gst_rtp_src_rtpbin_pad_added_cb (GstElement * element, GstPad * pad, { GstRtpSrc *self = GST_RTP_SRC (data); GstCaps *caps = gst_pad_query_caps (pad, NULL); - GstPad *upad; + const GstStructure *s; + GstPad *upad = NULL; + gint pt = -1; gchar name[48]; /* Expose RTP data pad only */ @@ -458,15 +460,26 @@ gst_rtp_src_rtpbin_pad_added_cb (GstElement * element, GstPad * pad, return; } + + s = gst_caps_get_structure (caps, 0); + gst_structure_get_int (s, "payload", &pt); gst_caps_unref (caps); GST_RTP_SRC_LOCK (self); - g_snprintf (name, 48, "src_%u", GST_ELEMENT (self)->numpads); - upad = gst_ghost_pad_new (name, pad); + g_snprintf (name, 48, "src_%u", pt); + upad = gst_element_get_static_pad (GST_ELEMENT (self), name); - gst_pad_set_active (upad, TRUE); - gst_element_add_pad (GST_ELEMENT (self), upad); + if (!upad) { + GST_DEBUG_OBJECT (self, "Adding new pad: %s", name); + upad = gst_ghost_pad_new (name, pad); + gst_pad_set_active (upad, TRUE); + gst_element_add_pad (GST_ELEMENT (self), upad); + } else { + GST_DEBUG_OBJECT (self, "Re-using existing pad: %s", GST_PAD_NAME (upad)); + gst_ghost_pad_set_target (GST_GHOST_PAD (upad), pad); + gst_object_unref (upad); + } GST_RTP_SRC_UNLOCK (self); } |