-static void
-new_bundled_ssrc_pad_found (GstElement * element, guint ssrc, GstPad * pad,
- GstRtpBinSession * session)
-{
- GValue result = G_VALUE_INIT;
- GValue params[2] = { G_VALUE_INIT, G_VALUE_INIT };
- guint session_id = 0;
- GstRtpBinSession *target_session = NULL;
- GstRtpBin *rtpbin = session->bin;
- gchar *name;
- GstPad *src_pad;
- GstPad *recv_rtp_sink = NULL;
- GstPad *recv_rtcp_sink = NULL;
- GstPadLinkReturn ret;
-
- GST_RTP_BIN_DYN_LOCK (rtpbin);
- GST_DEBUG_OBJECT (rtpbin, "new bundled SSRC pad %08x, %s:%s", ssrc,
- GST_DEBUG_PAD_NAME (pad));
-
- g_value_init (&result, G_TYPE_UINT);
- g_value_init (¶ms[0], GST_TYPE_ELEMENT);
- g_value_set_object (¶ms[0], rtpbin);
- g_value_init (¶ms[1], G_TYPE_UINT);
- g_value_set_uint (¶ms[1], ssrc);
-
- g_signal_emitv (params,
- gst_rtp_bin_signals[SIGNAL_ON_BUNDLED_SSRC], 0, &result);
- g_value_unset (¶ms[0]);
-
- session_id = g_value_get_uint (&result);
- if (session_id == 0) {
- target_session = session;
- } else {
- target_session = find_session_by_id (rtpbin, (gint) session_id);
- if (!target_session) {
- target_session = create_session (rtpbin, session_id);
- }
- if (!target_session) {
- /* create_session() warned already */
- GST_RTP_BIN_DYN_UNLOCK (rtpbin);
- return;
- }
-
- if (!target_session->recv_rtp_sink) {
- recv_rtp_sink = complete_session_sink (rtpbin, target_session, FALSE);
- }
-
- if (!target_session->recv_rtp_src)
- complete_session_receiver (rtpbin, target_session, session_id);
-
- if (!target_session->recv_rtcp_sink) {
- recv_rtcp_sink =
- complete_session_rtcp (rtpbin, target_session, session_id, FALSE);
- }
- }
-
- GST_DEBUG_OBJECT (rtpbin, "Assigning bundled ssrc %u to session %u", ssrc,
- session_id);
-
- if (!recv_rtp_sink) {
- recv_rtp_sink =
- gst_element_get_request_pad (target_session->rtp_funnel, "sink_%u");
- }
-
- if (!recv_rtcp_sink) {
- recv_rtcp_sink =
- gst_element_get_request_pad (target_session->rtcp_funnel, "sink_%u");
- }
-
- name = g_strdup_printf ("src_%u", ssrc);
- src_pad = gst_element_get_static_pad (element, name);
- ret = gst_pad_link (src_pad, recv_rtp_sink);
- g_free (name);
- gst_object_unref (src_pad);
- gst_object_unref (recv_rtp_sink);
- if (ret != GST_PAD_LINK_OK) {
- g_warning
- ("rtpbin: failed to link bundle demuxer to receive rtp funnel for session %u",
- session_id);
- }
-
- name = g_strdup_printf ("rtcp_src_%u", ssrc);
- src_pad = gst_element_get_static_pad (element, name);
- gst_pad_link (src_pad, recv_rtcp_sink);
- g_free (name);
- gst_object_unref (src_pad);
- gst_object_unref (recv_rtcp_sink);
- if (ret != GST_PAD_LINK_OK) {
- g_warning
- ("rtpbin: failed to link bundle demuxer to receive rtcp sink pad for session %u",
- session_id);
- }
-
- GST_RTP_BIN_DYN_UNLOCK (rtpbin);
-}
-