mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-10-05 10:12:20 +00:00
gst/rtpmanager/: When an SSRC is found on the caps of the sender RTP, use this as the internal SSRC. Fixes #565910.
Original commit message from CVS: Patch by: Olivier Crete <tester at tester dot ca> * gst/rtpmanager/gstrtpsession.c: (gst_rtp_session_setcaps_send_rtp), (create_send_rtp_sink): * gst/rtpmanager/rtpsession.c: (rtp_session_set_internal_ssrc): When an SSRC is found on the caps of the sender RTP, use this as the internal SSRC. Fixes #565910.
This commit is contained in:
parent
0df77bfcd6
commit
c3060dfb64
3 changed files with 38 additions and 0 deletions
10
ChangeLog
10
ChangeLog
|
@ -1,3 +1,13 @@
|
||||||
|
2009-01-02 Wim Taymans <wim.taymans@collabora.co.uk>
|
||||||
|
|
||||||
|
Patch by: Olivier Crete <tester at tester dot ca>
|
||||||
|
|
||||||
|
* gst/rtpmanager/gstrtpsession.c:
|
||||||
|
(gst_rtp_session_setcaps_send_rtp), (create_send_rtp_sink):
|
||||||
|
* gst/rtpmanager/rtpsession.c: (rtp_session_set_internal_ssrc):
|
||||||
|
When an SSRC is found on the caps of the sender RTP, use this as the
|
||||||
|
internal SSRC. Fixes #565910.
|
||||||
|
|
||||||
2009-01-02 Wim Taymans <wim.taymans@collabora.co.uk>
|
2009-01-02 Wim Taymans <wim.taymans@collabora.co.uk>
|
||||||
|
|
||||||
* gst/rtpmanager/gstrtpsession.c:
|
* gst/rtpmanager/gstrtpsession.c:
|
||||||
|
|
|
@ -1675,6 +1675,27 @@ gst_rtp_session_getcaps_send_rtp (GstPad * pad)
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
gst_rtp_session_setcaps_send_rtp (GstPad * pad, GstCaps * caps)
|
||||||
|
{
|
||||||
|
GstRtpSession *rtpsession;
|
||||||
|
GstRtpSessionPrivate *priv;
|
||||||
|
GstStructure *s = gst_caps_get_structure (caps, 0);
|
||||||
|
guint ssrc;
|
||||||
|
|
||||||
|
rtpsession = GST_RTP_SESSION (gst_pad_get_parent (pad));
|
||||||
|
priv = rtpsession->priv;
|
||||||
|
|
||||||
|
if (gst_structure_get_uint (s, "ssrc", &ssrc)) {
|
||||||
|
GST_DEBUG_OBJECT (rtpsession, "setting internal SSRC to %08x", ssrc);
|
||||||
|
rtp_session_set_internal_ssrc (priv->session, ssrc);
|
||||||
|
}
|
||||||
|
|
||||||
|
gst_object_unref (rtpsession);
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
/* Recieve an RTP packet to be send to the receivers, send to RTP session
|
/* Recieve an RTP packet to be send to the receivers, send to RTP session
|
||||||
* manager and forward to send_rtp_src.
|
* manager and forward to send_rtp_src.
|
||||||
*/
|
*/
|
||||||
|
@ -1852,6 +1873,8 @@ create_send_rtp_sink (GstRtpSession * rtpsession)
|
||||||
gst_rtp_session_chain_send_rtp);
|
gst_rtp_session_chain_send_rtp);
|
||||||
gst_pad_set_getcaps_function (rtpsession->send_rtp_sink,
|
gst_pad_set_getcaps_function (rtpsession->send_rtp_sink,
|
||||||
gst_rtp_session_getcaps_send_rtp);
|
gst_rtp_session_getcaps_send_rtp);
|
||||||
|
gst_pad_set_setcaps_function (rtpsession->send_rtp_sink,
|
||||||
|
gst_rtp_session_setcaps_send_rtp);
|
||||||
gst_pad_set_event_function (rtpsession->send_rtp_sink,
|
gst_pad_set_event_function (rtpsession->send_rtp_sink,
|
||||||
(GstPadEventFunction) gst_rtp_session_event_send_rtp_sink);
|
(GstPadEventFunction) gst_rtp_session_event_send_rtp_sink);
|
||||||
gst_pad_set_internal_link_function (rtpsession->send_rtp_sink,
|
gst_pad_set_internal_link_function (rtpsession->send_rtp_sink,
|
||||||
|
|
|
@ -1209,9 +1209,14 @@ rtp_session_set_internal_ssrc (RTPSession * sess, guint32 ssrc)
|
||||||
g_hash_table_steal (sess->ssrcs[sess->mask_idx],
|
g_hash_table_steal (sess->ssrcs[sess->mask_idx],
|
||||||
GINT_TO_POINTER (sess->source->ssrc));
|
GINT_TO_POINTER (sess->source->ssrc));
|
||||||
|
|
||||||
|
GST_DEBUG ("setting internal SSRC to %08x", ssrc);
|
||||||
|
/* After this call, any receiver of the old SSRC either in RTP or RTCP
|
||||||
|
* packets will timeout on the old SSRC, we could potentially schedule a
|
||||||
|
* BYE RTCP for the old SSRC... */
|
||||||
sess->source->ssrc = ssrc;
|
sess->source->ssrc = ssrc;
|
||||||
rtp_source_reset (sess->source);
|
rtp_source_reset (sess->source);
|
||||||
|
|
||||||
|
/* rehash with the new SSRC */
|
||||||
g_hash_table_insert (sess->ssrcs[sess->mask_idx],
|
g_hash_table_insert (sess->ssrcs[sess->mask_idx],
|
||||||
GINT_TO_POINTER (sess->source->ssrc), sess->source);
|
GINT_TO_POINTER (sess->source->ssrc), sess->source);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue