Title: [276717] trunk
Revision
276717
Author
[email protected]
Date
2021-04-28 09:29:11 -0700 (Wed, 28 Apr 2021)

Log Message

Set audio transceiver nMax to 1
https://bugs.webkit.org/show_bug.cgi?id=225149
<rdar://75956639>

Reviewed by Alex Christensen.

Source/WebCore:

Implement step 8.4 of https://w3c.github.io/webrtc-pc/#dom-rtcpeerconnection-addtransceiver and set nMax for audio to 1.

Test: webrtc/audio-addTransceiver.html

* Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
(WebCore::LibWebRTCMediaEndpoint::createTransceiverBackends):
(WebCore::LibWebRTCMediaEndpoint::addTransceiver):
* Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h:
* Modules/mediastream/libwebrtc/LibWebRTCUtils.cpp:
(WebCore::fromRtpTransceiverInit):
* Modules/mediastream/libwebrtc/LibWebRTCUtils.h:

LayoutTests:

* webrtc/audio-addTransceiver-expected.txt: Added.
* webrtc/audio-addTransceiver.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (276716 => 276717)


--- trunk/LayoutTests/ChangeLog	2021-04-28 15:44:59 UTC (rev 276716)
+++ trunk/LayoutTests/ChangeLog	2021-04-28 16:29:11 UTC (rev 276717)
@@ -1,3 +1,14 @@
+2021-04-28  Youenn Fablet  <[email protected]>
+
+        Set audio transceiver nMax to 1
+        https://bugs.webkit.org/show_bug.cgi?id=225149
+        <rdar://75956639>
+
+        Reviewed by Alex Christensen.
+
+        * webrtc/audio-addTransceiver-expected.txt: Added.
+        * webrtc/audio-addTransceiver.html: Added.
+
 2021-04-28  Tim Nguyen  <[email protected]>
 
         Use will-change: opacity instead of will-change: transform in fixed-inside-sticky-no-stacking-context-2.html

Added: trunk/LayoutTests/webrtc/audio-addTransceiver-expected.txt (0 => 276717)


--- trunk/LayoutTests/webrtc/audio-addTransceiver-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/webrtc/audio-addTransceiver-expected.txt	2021-04-28 16:29:11 UTC (rev 276717)
@@ -0,0 +1,3 @@
+
+PASS addTransceiver audio with encodings
+

Added: trunk/LayoutTests/webrtc/audio-addTransceiver.html (0 => 276717)


--- trunk/LayoutTests/webrtc/audio-addTransceiver.html	                        (rev 0)
+++ trunk/LayoutTests/webrtc/audio-addTransceiver.html	2021-04-28 16:29:11 UTC (rev 276717)
@@ -0,0 +1,25 @@
+<!doctype html>
+<html>
+    <head>
+        <meta charset="utf-8">
+        <title>Testing audio addTransceiver</title>
+        <script src=""
+        <script src=""
+    </head>
+    <body>
+        <script src =""
+        <script>
+promise_test(async (test) => {
+    const pc = new RTCPeerConnection();
+    const transceiver = pc.addTransceiver("audio", { sendEncodings: [ { rid: 'foo' }, { rid: 'baz' } ] });
+
+    const parameters = transceiver.sender.getParameters();
+    assert_equals(parameters.encodings.length, 1);
+
+    await pc.setLocalDescription();
+    const sdp = pc.localDescription.sdp;
+    assert_true(sdp.indexOf('baz') === -1);
+}, "addTransceiver audio with encodings");
+        </script>
+    </body>
+</html>

Modified: trunk/Source/WebCore/ChangeLog (276716 => 276717)


--- trunk/Source/WebCore/ChangeLog	2021-04-28 15:44:59 UTC (rev 276716)
+++ trunk/Source/WebCore/ChangeLog	2021-04-28 16:29:11 UTC (rev 276717)
@@ -1,3 +1,23 @@
+2021-04-28  Youenn Fablet  <[email protected]>
+
+        Set audio transceiver nMax to 1
+        https://bugs.webkit.org/show_bug.cgi?id=225149
+        <rdar://75956639>
+
+        Reviewed by Alex Christensen.
+
+        Implement step 8.4 of https://w3c.github.io/webrtc-pc/#dom-rtcpeerconnection-addtransceiver and set nMax for audio to 1.
+
+        Test: webrtc/audio-addTransceiver.html
+
+        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp:
+        (WebCore::LibWebRTCMediaEndpoint::createTransceiverBackends):
+        (WebCore::LibWebRTCMediaEndpoint::addTransceiver):
+        * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h:
+        * Modules/mediastream/libwebrtc/LibWebRTCUtils.cpp:
+        (WebCore::fromRtpTransceiverInit):
+        * Modules/mediastream/libwebrtc/LibWebRTCUtils.h:
+
 2021-04-28  Chris Dumez  <[email protected]>
 
         Drop ModernUnprefixedWebAudio & AudioWorklet experimental feature flags

Modified: trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp (276716 => 276717)


--- trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp	2021-04-28 15:44:59 UTC (rev 276716)
+++ trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp	2021-04-28 16:29:11 UTC (rev 276717)
@@ -430,9 +430,9 @@
 }
 
 template<typename T>
-ExceptionOr<LibWebRTCMediaEndpoint::Backends> LibWebRTCMediaEndpoint::createTransceiverBackends(T&& trackOrKind, const RTCRtpTransceiverInit& init, LibWebRTCRtpSenderBackend::Source&& source)
+ExceptionOr<LibWebRTCMediaEndpoint::Backends> LibWebRTCMediaEndpoint::createTransceiverBackends(T&& trackOrKind, webrtc::RtpTransceiverInit&& init, LibWebRTCRtpSenderBackend::Source&& source)
 {
-    auto result = m_backend->AddTransceiver(WTFMove(trackOrKind), fromRtpTransceiverInit(init));
+    auto result = m_backend->AddTransceiver(WTFMove(trackOrKind), WTFMove(init));
     if (!result.ok())
         return toException(result.error());
 
@@ -443,7 +443,7 @@
 ExceptionOr<LibWebRTCMediaEndpoint::Backends> LibWebRTCMediaEndpoint::addTransceiver(const String& trackKind, const RTCRtpTransceiverInit& init)
 {
     auto type = trackKind == "audio" ? cricket::MediaType::MEDIA_TYPE_AUDIO : cricket::MediaType::MEDIA_TYPE_VIDEO;
-    return createTransceiverBackends(type, init, nullptr);
+    return createTransceiverBackends(type, fromRtpTransceiverInit(init, type), nullptr);
 }
 
 std::pair<LibWebRTCRtpSenderBackend::Source, rtc::scoped_refptr<webrtc::MediaStreamTrackInterface>> LibWebRTCMediaEndpoint::createSourceAndRTCTrack(MediaStreamTrack& track)
@@ -472,8 +472,9 @@
 
 ExceptionOr<LibWebRTCMediaEndpoint::Backends> LibWebRTCMediaEndpoint::addTransceiver(MediaStreamTrack& track, const RTCRtpTransceiverInit& init)
 {
+    auto type = track.source().type() == RealtimeMediaSource::Type::Audio ? cricket::MediaType::MEDIA_TYPE_AUDIO : cricket::MediaType::MEDIA_TYPE_VIDEO;
     auto sourceAndTrack = createSourceAndRTCTrack(track);
-    return createTransceiverBackends(WTFMove(sourceAndTrack.second), init, WTFMove(sourceAndTrack.first));
+    return createTransceiverBackends(WTFMove(sourceAndTrack.second), fromRtpTransceiverInit(init, type), WTFMove(sourceAndTrack.first));
 }
 
 void LibWebRTCMediaEndpoint::setSenderSourceFromTrack(LibWebRTCRtpSenderBackend& sender, MediaStreamTrack& track)

Modified: trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h (276716 => 276717)


--- trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h	2021-04-28 15:44:59 UTC (rev 276716)
+++ trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h	2021-04-28 16:29:11 UTC (rev 276717)
@@ -147,7 +147,7 @@
     void addPendingTrackEvent(Ref<RTCRtpReceiver>&&, MediaStreamTrack&, const std::vector<rtc::scoped_refptr<webrtc::MediaStreamInterface>>&, RefPtr<RTCRtpTransceiver>&&);
 
     template<typename T>
-    ExceptionOr<Backends> createTransceiverBackends(T&&, const RTCRtpTransceiverInit&, LibWebRTCRtpSenderBackend::Source&&);
+    ExceptionOr<Backends> createTransceiverBackends(T&&, webrtc::RtpTransceiverInit&&, LibWebRTCRtpSenderBackend::Source&&);
 
     void OnStatsDelivered(const rtc::scoped_refptr<const webrtc::RTCStatsReport>&) final;
     void gatherStatsForLogging();

Modified: trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCUtils.cpp (276716 => 276717)


--- trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCUtils.cpp	2021-04-28 15:44:59 UTC (rev 276716)
+++ trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCUtils.cpp	2021-04-28 16:29:11 UTC (rev 276717)
@@ -317,14 +317,20 @@
     RELEASE_ASSERT_NOT_REACHED();
 }
 
-webrtc::RtpTransceiverInit fromRtpTransceiverInit(const RTCRtpTransceiverInit& init)
+webrtc::RtpTransceiverInit fromRtpTransceiverInit(const RTCRtpTransceiverInit& init, cricket::MediaType type)
 {
     webrtc::RtpTransceiverInit rtcInit;
     rtcInit.direction = fromRTCRtpTransceiverDirection(init.direction);
     for (auto& stream : init.streams)
         rtcInit.stream_ids.push_back(stream->id().utf8().data());
-    for (auto& encoding : init.sendEncodings)
-        rtcInit.send_encodings.push_back(fromRTCEncodingParameters(encoding));
+
+    if (type == cricket::MediaType::MEDIA_TYPE_AUDIO) {
+        if (!init.sendEncodings.isEmpty())
+            rtcInit.send_encodings.push_back(fromRTCEncodingParameters(init.sendEncodings[0]));
+    } else {
+        for (auto& encoding : init.sendEncodings)
+            rtcInit.send_encodings.push_back(fromRTCEncodingParameters(encoding));
+    }
     return rtcInit;
 }
 

Modified: trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCUtils.h (276716 => 276717)


--- trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCUtils.h	2021-04-28 15:44:59 UTC (rev 276716)
+++ trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCUtils.h	2021-04-28 16:29:11 UTC (rev 276717)
@@ -27,6 +27,7 @@
 #if USE(LIBWEBRTC)
 
 #include "ExceptionCode.h"
+#include <webrtc/api/media_types.h>
 #include <wtf/text/WTFString.h>
 
 namespace webrtc {
@@ -58,7 +59,7 @@
 
 RTCRtpTransceiverDirection toRTCRtpTransceiverDirection(webrtc::RtpTransceiverDirection);
 webrtc::RtpTransceiverDirection fromRTCRtpTransceiverDirection(RTCRtpTransceiverDirection);
-webrtc::RtpTransceiverInit fromRtpTransceiverInit(const RTCRtpTransceiverInit&);
+webrtc::RtpTransceiverInit fromRtpTransceiverInit(const RTCRtpTransceiverInit&, cricket::MediaType);
 
 ExceptionCode toExceptionCode(webrtc::RTCErrorType);
 Exception toException(const webrtc::RTCError&);
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to