summaryrefslogtreecommitdiff
path: root/ext/webrtc/gstwebrtcbin.c
diff options
context:
space:
mode:
authorOlivier CrĂȘte <olivier.crete@collabora.com>2021-03-31 11:30:16 -0400
committerOlivier CrĂȘte <olivier.crete@collabora.com>2021-04-12 18:37:27 -0400
commit83e546f935218754ec2d603cefaffacd613f53a1 (patch)
tree89fc141512400f9cfaef997e8053821bccebff63 /ext/webrtc/gstwebrtcbin.c
parent7db58483764ff6ea0be0b947a019b0077aa0dbab (diff)
downloadgstreamer-plugins-bad-83e546f935218754ec2d603cefaffacd613f53a1.tar.gz
webrtcbin: Match unassociated transceiver by kind too
When a new m-line comes in that doesn't have a transceiver, only match existing transceivers of the same kind. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2104>
Diffstat (limited to 'ext/webrtc/gstwebrtcbin.c')
-rw-r--r--ext/webrtc/gstwebrtcbin.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/ext/webrtc/gstwebrtcbin.c b/ext/webrtc/gstwebrtcbin.c
index 165860023..cc4ad55da 100644
--- a/ext/webrtc/gstwebrtcbin.c
+++ b/ext/webrtc/gstwebrtcbin.c
@@ -4527,12 +4527,16 @@ static gboolean
_find_compatible_unassociated_transceiver (GstWebRTCRTPTransceiver * p1,
gconstpointer data)
{
+ GstWebRTCKind kind = GPOINTER_TO_INT (data);
+
if (p1->mid)
return FALSE;
if (p1->mline != -1)
return FALSE;
if (p1->stopped)
return FALSE;
+ if (p1->kind != GST_WEBRTC_KIND_UNKNOWN && p1->kind != kind)
+ return FALSE;
return TRUE;
}
@@ -4659,7 +4663,14 @@ _update_transceivers_from_sdp (GstWebRTCBin * webrtc, SDPSource source,
g_strcmp0 (gst_sdp_media_get_media (media), "video") == 0) {
/* No existing transceiver, find an unused one */
if (!trans) {
- trans = _find_transceiver (webrtc, NULL,
+ GstWebRTCKind kind;
+
+ if (g_strcmp0 (gst_sdp_media_get_media (media), "audio") == 0)
+ kind = GST_WEBRTC_KIND_AUDIO;
+ else
+ kind = GST_WEBRTC_KIND_VIDEO;
+
+ trans = _find_transceiver (webrtc, GINT_TO_POINTER (kind),
(FindTransceiverFunc) _find_compatible_unassociated_transceiver);
}