summaryrefslogtreecommitdiff
path: root/gst/rist/gstristsink.c
diff options
context:
space:
mode:
authorOlivier CrĂȘte <olivier.crete@collabora.com>2019-07-26 17:43:57 -0400
committerOlivier CrĂȘte <olivier.crete@ocrete.ca>2020-04-30 18:31:31 +0000
commitfc76254dfcc6099cc798ae096241ec081fc1bff3 (patch)
tree4d5ba18383584727a18b95fd3a7310dc882b6b4d /gst/rist/gstristsink.c
parente873780a1f615235a41464a378adae32524de7bb (diff)
downloadgstreamer-plugins-bad-fc76254dfcc6099cc798ae096241ec081fc1bff3.tar.gz
ristsink: Pass the session id to the on-app-rtcp callback
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/1153>
Diffstat (limited to 'gst/rist/gstristsink.c')
-rw-r--r--gst/rist/gstristsink.c20
1 files changed, 16 insertions, 4 deletions
diff --git a/gst/rist/gstristsink.c b/gst/rist/gstristsink.c
index 8ae36fccc..cbcd9c2fb 100644
--- a/gst/rist/gstristsink.c
+++ b/gst/rist/gstristsink.c
@@ -181,6 +181,8 @@ gst_rist_bonding_method_get_type (void)
G_DEFINE_TYPE_WITH_CODE (GstRistSink, gst_rist_sink, GST_TYPE_BIN,
GST_DEBUG_CATEGORY_INIT (gst_rist_sink_debug, "ristsink", 0, "RIST Sink"));
+GQuark session_id_quark = 0;
+
static RistSenderBond *
gst_rist_sink_add_bond (GstRistSink * sink)
{
@@ -295,16 +297,23 @@ gst_rist_sink_request_aux_sender (GstRistSink * sink, guint session_id,
static void
on_app_rtcp (GObject * session, guint32 subtype, guint32 ssrc,
- const gchar * name, GstBuffer * data, GstElement * rtpsession)
+ const gchar * name, GstBuffer * data, GstRistSink * sink)
{
if (g_str_equal (name, "RIST")) {
+ guint session_id =
+ GPOINTER_TO_UINT (g_object_get_qdata (session, session_id_quark));
+
if (subtype == 0) {
GstEvent *event;
GstPad *send_rtp_sink;
GstMapInfo map;
gint i;
+ GstElement *gstsession;
+
+ g_signal_emit_by_name (sink->rtpbin, "get-session", session_id,
+ &gstsession);
- send_rtp_sink = gst_element_get_static_pad (rtpsession, "send_rtp_sink");
+ send_rtp_sink = gst_element_get_static_pad (gstsession, "send_rtp_sink");
if (send_rtp_sink) {
gst_buffer_map (data, &map, GST_MAP_READ);
@@ -347,12 +356,12 @@ gst_rist_sink_on_new_sender_ssrc (GstRistSink * sink, guint session_id,
g_signal_emit_by_name (rtpbin, "get-session", session_id, &gstsession);
g_signal_emit_by_name (rtpbin, "get-internal-session", session_id, &session);
g_signal_emit_by_name (session, "get-source-by-ssrc", ssrc, &source);
+ g_object_set_qdata (session, session_id_quark, GUINT_TO_POINTER (session_id));
if (ssrc & 1)
g_object_set (source, "disable-rtcp", TRUE, NULL);
else
- g_signal_connect (session, "on-app-rtcp", (GCallback) on_app_rtcp,
- gstsession);
+ g_signal_connect (session, "on-app-rtcp", (GCallback) on_app_rtcp, sink);
g_object_unref (source);
g_object_unref (session);
@@ -1191,6 +1200,9 @@ gst_rist_sink_class_init (GstRistSinkClass * klass)
GstElementClass *element_class = (GstElementClass *) klass;
GObjectClass *object_class = (GObjectClass *) klass;
+
+ session_id_quark = g_quark_from_static_string ("gst-rist-sink-session-id");
+
gst_element_class_set_metadata (element_class,
"RIST Sink", "Source/Network",
"Sink that implements RIST TR-06-1 streaming specification",