Title: [235714] trunk
Revision
235714
Author
[email protected]
Date
2018-09-05 15:30:04 -0700 (Wed, 05 Sep 2018)

Log Message

Expose RTCRtpSender.setParameters
https://bugs.webkit.org/show_bug.cgi?id=189307

Reviewed by Eric Carlson.

LayoutTests/imported/w3c:

* web-platform-tests/webrtc/RTCRtpSender-replaceTrack-expected.txt:
* web-platform-tests/webrtc/RTCRtpSender-setParameters-expected.txt:

Source/ThirdParty/libwebrtc:

* Configurations/libwebrtc.iOS.exp:
* Configurations/libwebrtc.iOSsim.exp:
* Configurations/libwebrtc.mac.exp:

Source/WebCore:

Implement RTCRtpSender.setParameters.
This is an incomplete implementation as we need to refresh parameters as per the spec and testing is much easier with full transceiver support.
Implementation uses sender backend to set the parameters at libwebrtc level.
Fix the case of a stopped sender/transceiver in which case promise should be rejected.
Covered by rebased and modified tests.

* Modules/mediastream/RTCRtpParameters.h:
* Modules/mediastream/RTCRtpSender.cpp:
(WebCore::RTCRtpSender::setParameters):
* Modules/mediastream/RTCRtpSender.h:
* Modules/mediastream/RTCRtpSender.idl:
* Modules/mediastream/RTCRtpSenderBackend.h:
* Modules/mediastream/RTCRtpTransceiver.cpp:
(WebCore::RTCRtpTransceiver::stop):
* Modules/mediastream/RTCRtpTransceiver.h:
* Modules/mediastream/libwebrtc/LibWebRTCRtpReceiverBackend.cpp:
(WebCore::LibWebRTCRtpReceiverBackend::getParameters):
* Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.cpp:
(WebCore::LibWebRTCRtpSenderBackend::getParameters const):
(WebCore::LibWebRTCRtpSenderBackend::setParameters):
* Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.h:
* Modules/mediastream/libwebrtc/LibWebRTCUtils.cpp:
(WebCore::toRTCEncodingParameters):
(WebCore::fromRTCEncodingParameters):
(WebCore::toRTCHeaderExtensionParameters):
(WebCore::fromRTCHeaderExtensionParameters):
(WebCore::toRTCCodecParameters):
(WebCore::toRTCRtpParameters):
(WebCore::fromRTCRtpParameters):
* Modules/mediastream/libwebrtc/LibWebRTCUtils.h:

LayoutTests:

* webrtc/video-getParameters.html:

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (235713 => 235714)


--- trunk/LayoutTests/ChangeLog	2018-09-05 22:25:46 UTC (rev 235713)
+++ trunk/LayoutTests/ChangeLog	2018-09-05 22:30:04 UTC (rev 235714)
@@ -1,3 +1,12 @@
+2018-09-05  Youenn Fablet  <[email protected]>
+
+        Expose RTCRtpSender.setParameters
+        https://bugs.webkit.org/show_bug.cgi?id=189307
+
+        Reviewed by Eric Carlson.
+
+        * webrtc/video-getParameters.html:
+
 2018-09-05  Truitt Savell  <[email protected]>
 
         Rebaseline test after changes in https://trac.webkit.org/changeset/235669/webkit deleted the expectation. 

Modified: trunk/LayoutTests/imported/w3c/ChangeLog (235713 => 235714)


--- trunk/LayoutTests/imported/w3c/ChangeLog	2018-09-05 22:25:46 UTC (rev 235713)
+++ trunk/LayoutTests/imported/w3c/ChangeLog	2018-09-05 22:30:04 UTC (rev 235714)
@@ -1,3 +1,13 @@
+2018-09-05  Youenn Fablet  <[email protected]>
+
+        Expose RTCRtpSender.setParameters
+        https://bugs.webkit.org/show_bug.cgi?id=189307
+
+        Reviewed by Eric Carlson.
+
+        * web-platform-tests/webrtc/RTCRtpSender-replaceTrack-expected.txt:
+        * web-platform-tests/webrtc/RTCRtpSender-setParameters-expected.txt:
+
 2018-09-04  Frederic Wang  <[email protected]>
 
         Add basic support for ScrollIntoViewOptions

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCRtpSender-replaceTrack-expected.txt (235713 => 235714)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCRtpSender-replaceTrack-expected.txt	2018-09-05 22:25:46 UTC (rev 235713)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCRtpSender-replaceTrack-expected.txt	2018-09-05 22:30:04 UTC (rev 235714)
@@ -1,7 +1,7 @@
 
 PASS Calling replaceTrack on closed connection should reject with InvalidStateError 
 PASS Calling replaceTrack with track of different kind should reject with TypeError 
-FAIL Calling replaceTrack on stopped sender should reject with InvalidStateError assert_unreached: Should have rejected: undefined Reached unreachable code
+PASS Calling replaceTrack on stopped sender should reject with InvalidStateError 
 PASS Calling replaceTrack on sender with null track and not set to session description should resolve with sender.track set to given track 
 PASS Calling replaceTrack on sender not set to session description should resolve with sender.track set to given track 
 PASS Calling replaceTrack(null) on sender not set to session description should resolve with sender.track set to null 

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCRtpSender-setParameters-expected.txt (235713 => 235714)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCRtpSender-setParameters-expected.txt	2018-09-05 22:25:46 UTC (rev 235713)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCRtpSender-setParameters-expected.txt	2018-09-05 22:30:04 UTC (rev 235714)
@@ -1,3 +1,3 @@
 
-FAIL setParameters() when transceiver is stopped should reject with InvalidStateError sender.setParameters is not a function. (In 'sender.setParameters(param)', 'sender.setParameters' is undefined)
+PASS setParameters() when transceiver is stopped should reject with InvalidStateError 
 

Modified: trunk/LayoutTests/webrtc/video-getParameters.html (235713 => 235714)


--- trunk/LayoutTests/webrtc/video-getParameters.html	2018-09-05 22:25:46 UTC (rev 235713)
+++ trunk/LayoutTests/webrtc/video-getParameters.html	2018-09-05 22:30:04 UTC (rev 235714)
@@ -51,7 +51,7 @@
         assert_equals(JSON.stringify(senderParameters), JSON.stringify(receiverParameters), "testing sender vs. receiver parameters");
 
         senderParameters.encodings[0].ssrc = 1;
-        assert_equals(JSON.stringify(senderParameters), '{"codecs":[],"degradationPreference":"balanced","encodings":[{"active":true,"dtx":"disabled","fec":{"ssrc":1},"maxBitrate":0,"maxFramerate":0,"priority":"medium","rid":"","rtx":{"ssrc":1},"scaleResolutionDownBy":1,"ssrc":1}],"headerExtensions":[],"transactionId":""}', "Testing sanitized parameters");
+        assert_equals(JSON.stringify(senderParameters), '{"codecs":[],"degradationPreference":"balanced","encodings":[{"active":true,"fec":{"ssrc":1},"maxBitrate":0,"maxFramerate":0,"priority":"medium","rid":"","rtx":{"ssrc":1},"scaleResolutionDownBy":1,"ssrc":1}],"headerExtensions":[],"transactionId":""}', "Testing sanitized parameters");
     });
 }, "Basic video stats");
         </script>

Modified: trunk/Source/ThirdParty/libwebrtc/ChangeLog (235713 => 235714)


--- trunk/Source/ThirdParty/libwebrtc/ChangeLog	2018-09-05 22:25:46 UTC (rev 235713)
+++ trunk/Source/ThirdParty/libwebrtc/ChangeLog	2018-09-05 22:30:04 UTC (rev 235714)
@@ -1,3 +1,14 @@
+2018-09-05  Youenn Fablet  <[email protected]>
+
+        Expose RTCRtpSender.setParameters
+        https://bugs.webkit.org/show_bug.cgi?id=189307
+
+        Reviewed by Eric Carlson.
+
+        * Configurations/libwebrtc.iOS.exp:
+        * Configurations/libwebrtc.iOSsim.exp:
+        * Configurations/libwebrtc.mac.exp:
+
 2018-08-29  David Kilzer  <[email protected]>
 
         Remove empty directories from from svn.webkit.org repository

Modified: trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.iOS.exp (235713 => 235714)


--- trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.iOS.exp	2018-09-05 22:25:46 UTC (rev 235713)
+++ trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.iOS.exp	2018-09-05 22:30:04 UTC (rev 235714)
@@ -206,3 +206,9 @@
 __ZN3rtc19PacketSocketFactory21CreateClientTcpSocketERKNS_13SocketAddressES3_RKNS_9ProxyInfoERKNSt3__112basic_stringIcNS7_11char_traitsIcEENS7_9allocatorIcEEEERKNS_22PacketSocketTcpOptionsE
 __ZN3rtc13PacketOptionsC1Ev
 __ZN6webrtc27CreatePeerConnectionFactoryEPN3rtc6ThreadES2_S2_NS0_13scoped_refptrINS_17AudioDeviceModuleEEENS3_INS_19AudioEncoderFactoryEEENS3_INS_19AudioDecoderFactoryEEENSt3__110unique_ptrINS_19VideoEncoderFactoryENSA_14default_deleteISC_EEEENSB_INS_19VideoDecoderFactoryENSD_ISG_EEEENS3_INS_10AudioMixerEEENS3_INS_15AudioProcessingEEE
+__ZNK6webrtc8RTCError7messageEv
+__ZN6webrtc12RtpExtensionC1Ev
+__ZN6webrtc12RtpExtensionD1Ev
+__ZN6webrtc21RtpEncodingParametersC1ERKS0_
+__ZN6webrtc21RtpEncodingParametersC1Ev
+__ZN6webrtc21RtpEncodingParametersD1Ev

Modified: trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.iOSsim.exp (235713 => 235714)


--- trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.iOSsim.exp	2018-09-05 22:25:46 UTC (rev 235713)
+++ trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.iOSsim.exp	2018-09-05 22:30:04 UTC (rev 235714)
@@ -206,3 +206,10 @@
 __ZN3rtc19PacketSocketFactory21CreateClientTcpSocketERKNS_13SocketAddressES3_RKNS_9ProxyInfoERKNSt3__112basic_stringIcNS7_11char_traitsIcEENS7_9allocatorIcEEEERKNS_22PacketSocketTcpOptionsE
 __ZN3rtc13PacketOptionsC1Ev
 __ZN6webrtc27CreatePeerConnectionFactoryEPN3rtc6ThreadES2_S2_NS0_13scoped_refptrINS_17AudioDeviceModuleEEENS3_INS_19AudioEncoderFactoryEEENS3_INS_19AudioDecoderFactoryEEENSt3__110unique_ptrINS_19VideoEncoderFactoryENSA_14default_deleteISC_EEEENSB_INS_19VideoDecoderFactoryENSD_ISG_EEEENS3_INS_10AudioMixerEEENS3_INS_15AudioProcessingEEE
+__ZNK6webrtc8RTCError7messageEv
+__ZNK6webrtc8RTCError7messageEv
+__ZN6webrtc12RtpExtensionC1Ev
+__ZN6webrtc12RtpExtensionD1Ev
+__ZN6webrtc21RtpEncodingParametersC1ERKS0_
+__ZN6webrtc21RtpEncodingParametersC1Ev
+__ZN6webrtc21RtpEncodingParametersD1Ev

Modified: trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.mac.exp (235713 => 235714)


--- trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.mac.exp	2018-09-05 22:25:46 UTC (rev 235713)
+++ trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.mac.exp	2018-09-05 22:30:04 UTC (rev 235714)
@@ -206,3 +206,10 @@
 __ZN3rtc19PacketSocketFactory21CreateClientTcpSocketERKNS_13SocketAddressES3_RKNS_9ProxyInfoERKNSt3__112basic_stringIcNS7_11char_traitsIcEENS7_9allocatorIcEEEERKNS_22PacketSocketTcpOptionsE
 __ZN3rtc13PacketOptionsC1Ev
 __ZN6webrtc27CreatePeerConnectionFactoryEPN3rtc6ThreadES2_S2_NS0_13scoped_refptrINS_17AudioDeviceModuleEEENS3_INS_19AudioEncoderFactoryEEENS3_INS_19AudioDecoderFactoryEEENSt3__110unique_ptrINS_19VideoEncoderFactoryENSA_14default_deleteISC_EEEENSB_INS_19VideoDecoderFactoryENSD_ISG_EEEENS3_INS_10AudioMixerEEENS3_INS_15AudioProcessingEEE
+__ZNK6webrtc8RTCError7messageEv
+__ZNK6webrtc8RTCError7messageEv
+__ZN6webrtc12RtpExtensionC1Ev
+__ZN6webrtc12RtpExtensionD1Ev
+__ZN6webrtc21RtpEncodingParametersC1ERKS0_
+__ZN6webrtc21RtpEncodingParametersC1Ev
+__ZN6webrtc21RtpEncodingParametersD1Ev

Modified: trunk/Source/WebCore/ChangeLog (235713 => 235714)


--- trunk/Source/WebCore/ChangeLog	2018-09-05 22:25:46 UTC (rev 235713)
+++ trunk/Source/WebCore/ChangeLog	2018-09-05 22:30:04 UTC (rev 235714)
@@ -1,3 +1,41 @@
+2018-09-05  Youenn Fablet  <[email protected]>
+
+        Expose RTCRtpSender.setParameters
+        https://bugs.webkit.org/show_bug.cgi?id=189307
+
+        Reviewed by Eric Carlson.
+
+        Implement RTCRtpSender.setParameters.
+        This is an incomplete implementation as we need to refresh parameters as per the spec and testing is much easier with full transceiver support.
+        Implementation uses sender backend to set the parameters at libwebrtc level.
+        Fix the case of a stopped sender/transceiver in which case promise should be rejected.
+        Covered by rebased and modified tests.
+
+        * Modules/mediastream/RTCRtpParameters.h:
+        * Modules/mediastream/RTCRtpSender.cpp:
+        (WebCore::RTCRtpSender::setParameters):
+        * Modules/mediastream/RTCRtpSender.h:
+        * Modules/mediastream/RTCRtpSender.idl:
+        * Modules/mediastream/RTCRtpSenderBackend.h:
+        * Modules/mediastream/RTCRtpTransceiver.cpp:
+        (WebCore::RTCRtpTransceiver::stop):
+        * Modules/mediastream/RTCRtpTransceiver.h:
+        * Modules/mediastream/libwebrtc/LibWebRTCRtpReceiverBackend.cpp:
+        (WebCore::LibWebRTCRtpReceiverBackend::getParameters):
+        * Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.cpp:
+        (WebCore::LibWebRTCRtpSenderBackend::getParameters const):
+        (WebCore::LibWebRTCRtpSenderBackend::setParameters):
+        * Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.h:
+        * Modules/mediastream/libwebrtc/LibWebRTCUtils.cpp:
+        (WebCore::toRTCEncodingParameters):
+        (WebCore::fromRTCEncodingParameters):
+        (WebCore::toRTCHeaderExtensionParameters):
+        (WebCore::fromRTCHeaderExtensionParameters):
+        (WebCore::toRTCCodecParameters):
+        (WebCore::toRTCRtpParameters):
+        (WebCore::fromRTCRtpParameters):
+        * Modules/mediastream/libwebrtc/LibWebRTCUtils.h:
+
 2018-09-05  Simon Fraser  <[email protected]>
 
         Remove some logging that I committed by mistake.

Modified: trunk/Source/WebCore/Modules/mediastream/RTCRtpParameters.h (235713 => 235714)


--- trunk/Source/WebCore/Modules/mediastream/RTCRtpParameters.h	2018-09-05 22:25:46 UTC (rev 235713)
+++ trunk/Source/WebCore/Modules/mediastream/RTCRtpParameters.h	2018-09-05 22:30:04 UTC (rev 235714)
@@ -57,7 +57,7 @@
         unsigned long ssrc { 0 };
         RtxParameters rtx;
         FecParameters fec;
-        DtxStatus dtx { DtxStatus::Disabled };
+        std::optional<DtxStatus> dtx;
         bool active { false};
         PriorityType priority { PriorityType::Medium };
         unsigned long maxBitrate { 0 };

Modified: trunk/Source/WebCore/Modules/mediastream/RTCRtpSender.cpp (235713 => 235714)


--- trunk/Source/WebCore/Modules/mediastream/RTCRtpSender.cpp	2018-09-05 22:25:46 UTC (rev 235713)
+++ trunk/Source/WebCore/Modules/mediastream/RTCRtpSender.cpp	2018-09-05 22:30:04 UTC (rev 235714)
@@ -99,6 +99,15 @@
     return m_backend->getParameters();
 }
 
+void RTCRtpSender::setParameters(const RTCRtpParameters& parameters, DOMPromiseDeferred<void>&& promise)
+{
+    if (isStopped()) {
+        promise.reject(InvalidStateError);
+        return;
+    }
+    return m_backend->setParameters(parameters, WTFMove(promise));
+}
+
 } // namespace WebCore
 
 #endif // ENABLE(WEB_RTC)

Modified: trunk/Source/WebCore/Modules/mediastream/RTCRtpSender.h (235713 => 235714)


--- trunk/Source/WebCore/Modules/mediastream/RTCRtpSender.h	2018-09-05 22:25:46 UTC (rev 235713)
+++ trunk/Source/WebCore/Modules/mediastream/RTCRtpSender.h	2018-09-05 22:30:04 UTC (rev 235714)
@@ -57,6 +57,8 @@
     void replaceTrack(RefPtr<MediaStreamTrack>&&, DOMPromiseDeferred<void>&&);
 
     RTCRtpParameters getParameters();
+    void setParameters(const RTCRtpParameters&, DOMPromiseDeferred<void>&&);
+
     RTCRtpSenderBackend* backend() { return m_backend.get(); }
 
 private:

Modified: trunk/Source/WebCore/Modules/mediastream/RTCRtpSender.idl (235713 => 235714)


--- trunk/Source/WebCore/Modules/mediastream/RTCRtpSender.idl	2018-09-05 22:25:46 UTC (rev 235713)
+++ trunk/Source/WebCore/Modules/mediastream/RTCRtpSender.idl	2018-09-05 22:30:04 UTC (rev 235714)
@@ -37,7 +37,8 @@
     // FIXME 169662: missing transport
     // FIXME 169662: missing rtcpTransport
     // FIXME 169662: missing getCapabilities
-    // FIXME 169662: missing setParameters
+    // FIXME 169662: missing setStreams
     RTCRtpParameters getParameters();
+    Promise<void> setParameters(RTCRtpParameters parameters);
     Promise<void> replaceTrack(MediaStreamTrack? withTrack);
 };

Modified: trunk/Source/WebCore/Modules/mediastream/RTCRtpSenderBackend.h (235713 => 235714)


--- trunk/Source/WebCore/Modules/mediastream/RTCRtpSenderBackend.h	2018-09-05 22:25:46 UTC (rev 235713)
+++ trunk/Source/WebCore/Modules/mediastream/RTCRtpSenderBackend.h	2018-09-05 22:30:04 UTC (rev 235714)
@@ -38,6 +38,7 @@
 public:
     virtual void replaceTrack(RTCRtpSender&, RefPtr<MediaStreamTrack>&&, DOMPromiseDeferred<void>&&) = 0;
     virtual RTCRtpParameters getParameters() const = 0;
+    virtual void setParameters(const RTCRtpParameters&, DOMPromiseDeferred<void>&&) = 0;
     virtual ~RTCRtpSenderBackend() = default;
 };
 

Modified: trunk/Source/WebCore/Modules/mediastream/RTCRtpTransceiver.cpp (235713 => 235714)


--- trunk/Source/WebCore/Modules/mediastream/RTCRtpTransceiver.cpp	2018-09-05 22:25:46 UTC (rev 235713)
+++ trunk/Source/WebCore/Modules/mediastream/RTCRtpTransceiver.cpp	2018-09-05 22:30:04 UTC (rev 235714)
@@ -102,6 +102,13 @@
         m_direction = RTCRtpTransceiverDirection::Inactive;
 }
 
+void RTCRtpTransceiver::stop()
+{
+    m_stopped = true;
+    m_receiver->stop();
+    m_sender->stop();
+}
+
 void RtpTransceiverSet::append(Ref<RTCRtpTransceiver>&& transceiver)
 {
     m_senders.append(transceiver->sender());

Modified: trunk/Source/WebCore/Modules/mediastream/RTCRtpTransceiver.h (235713 => 235714)


--- trunk/Source/WebCore/Modules/mediastream/RTCRtpTransceiver.h	2018-09-05 22:25:46 UTC (rev 235713)
+++ trunk/Source/WebCore/Modules/mediastream/RTCRtpTransceiver.h	2018-09-05 22:30:04 UTC (rev 235714)
@@ -68,7 +68,7 @@
     RTCRtpReceiver& receiver() { return m_receiver.get(); }
 
     bool stopped() const { return m_stopped; }
-    void stop() { m_stopped = true; }
+    void stop();
 
     // FIXME: Temporary solution to keep track of ICE states for this transceiver. Later, each
     // sender and receiver will have up to two DTLS transports, which in turn will have an ICE

Modified: trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCRtpReceiverBackend.cpp (235713 => 235714)


--- trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCRtpReceiverBackend.cpp	2018-09-05 22:25:46 UTC (rev 235713)
+++ trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCRtpReceiverBackend.cpp	2018-09-05 22:30:04 UTC (rev 235714)
@@ -33,7 +33,7 @@
 
 RTCRtpParameters LibWebRTCRtpReceiverBackend::getParameters()
 {
-    return fillRtpParameters(m_rtcReceiver->GetParameters());
+    return toRTCRtpParameters(m_rtcReceiver->GetParameters());
 }
 
 } // namespace WebCore

Modified: trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.cpp (235713 => 235714)


--- trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.cpp	2018-09-05 22:25:46 UTC (rev 235713)
+++ trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.cpp	2018-09-05 22:30:04 UTC (rev 235714)
@@ -49,9 +49,23 @@
     if (!m_rtcSender)
         return { };
 
-    return fillRtpParameters(m_rtcSender->GetParameters());
+    return toRTCRtpParameters(m_rtcSender->GetParameters());
 }
 
+void LibWebRTCRtpSenderBackend::setParameters(const RTCRtpParameters& parameters, DOMPromiseDeferred<void>&& promise)
+{
+    if (!m_rtcSender) {
+        promise.reject(NotSupportedError);
+        return;
+    }
+    auto error = m_rtcSender->SetParameters(fromRTCRtpParameters(parameters));
+    if (!error.ok()) {
+        promise.reject(Exception { InvalidStateError, error.message() });
+        return;
+    }
+    promise.resolve();
+}
+
 } // namespace WebCore
 
 #endif // ENABLE(WEB_RTC) && USE(LIBWEBRTC)

Modified: trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.h (235713 => 235714)


--- trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.h	2018-09-05 22:25:46 UTC (rev 235713)
+++ trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.h	2018-09-05 22:30:04 UTC (rev 235714)
@@ -56,6 +56,7 @@
 private:
     void replaceTrack(RTCRtpSender&, RefPtr<MediaStreamTrack>&&, DOMPromiseDeferred<void>&&) final;
     RTCRtpParameters getParameters() const final;
+    void setParameters(const RTCRtpParameters&, DOMPromiseDeferred<void>&&) final;
 
     WeakPtr<LibWebRTCPeerConnectionBackend> m_peerConnectionBackend;
     rtc::scoped_refptr<webrtc::RtpSenderInterface> m_rtcSender;

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


--- trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCUtils.cpp	2018-09-05 22:25:46 UTC (rev 235713)
+++ trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCUtils.cpp	2018-09-05 22:30:04 UTC (rev 235714)
@@ -34,7 +34,7 @@
 
 namespace WebCore {
 
-static inline RTCRtpParameters::EncodingParameters fillEncodingParameters(const webrtc::RtpEncodingParameters& rtcParameters)
+static inline RTCRtpParameters::EncodingParameters toRTCEncodingParameters(const webrtc::RtpEncodingParameters& rtcParameters)
 {
     RTCRtpParameters::EncodingParameters parameters;
 
@@ -65,8 +65,33 @@
     return parameters;
 }
 
-static inline RTCRtpParameters::HeaderExtensionParameters fillHeaderExtensionParameters(const webrtc::RtpHeaderExtensionParameters& rtcParameters)
+static inline webrtc::RtpEncodingParameters fromRTCEncodingParameters(const RTCRtpParameters::EncodingParameters& parameters)
 {
+    webrtc::RtpEncodingParameters rtcParameters;
+
+    if (parameters.dtx) {
+        switch (*parameters.dtx) {
+        case RTCRtpParameters::DtxStatus::Disabled:
+            rtcParameters.dtx = webrtc::DtxStatus::DISABLED;
+            break;
+        case RTCRtpParameters::DtxStatus::Enabled:
+            rtcParameters.dtx = webrtc::DtxStatus::ENABLED;
+        }
+    }
+    rtcParameters.active = parameters.active;
+    if (parameters.maxBitrate)
+        rtcParameters.max_bitrate_bps = parameters.maxBitrate;
+    if (parameters.maxFramerate)
+        rtcParameters.max_framerate = parameters.maxFramerate;
+    rtcParameters.rid = parameters.rid.utf8().data();
+    if (parameters.scaleResolutionDownBy != 1)
+        rtcParameters.scale_resolution_down_by = parameters.scaleResolutionDownBy;
+
+    return rtcParameters;
+}
+
+static inline RTCRtpParameters::HeaderExtensionParameters toRTCHeaderExtensionParameters(const webrtc::RtpHeaderExtensionParameters& rtcParameters)
+{
     RTCRtpParameters::HeaderExtensionParameters parameters;
 
     parameters.uri = fromStdString(rtcParameters.uri);
@@ -75,8 +100,18 @@
     return parameters;
 }
 
-static inline RTCRtpParameters::CodecParameters fillCodecParameters(const webrtc::RtpCodecParameters& rtcParameters)
+static inline webrtc::RtpHeaderExtensionParameters fromRTCHeaderExtensionParameters(const RTCRtpParameters::HeaderExtensionParameters& parameters)
 {
+    webrtc::RtpHeaderExtensionParameters rtcParameters;
+
+    rtcParameters.uri = parameters.uri.utf8().data();
+    rtcParameters.id = parameters.id;
+
+    return rtcParameters;
+}
+
+static inline RTCRtpParameters::CodecParameters toRTCCodecParameters(const webrtc::RtpCodecParameters& rtcParameters)
+{
     RTCRtpParameters::CodecParameters parameters;
 
     parameters.payloadType = rtcParameters.payload_type;
@@ -89,17 +124,17 @@
     return parameters;
 }
 
-RTCRtpParameters fillRtpParameters(const webrtc::RtpParameters& rtcParameters)
+RTCRtpParameters toRTCRtpParameters(const webrtc::RtpParameters& rtcParameters)
 {
     RTCRtpParameters parameters;
 
     parameters.transactionId = fromStdString(rtcParameters.transaction_id);
     for (auto& rtcEncoding : rtcParameters.encodings)
-        parameters.encodings.append(fillEncodingParameters(rtcEncoding));
+        parameters.encodings.append(toRTCEncodingParameters(rtcEncoding));
     for (auto& extension : rtcParameters.header_extensions)
-        parameters.headerExtensions.append(fillHeaderExtensionParameters(extension));
+        parameters.headerExtensions.append(toRTCHeaderExtensionParameters(extension));
     for (auto& codec : rtcParameters.codecs)
-        parameters.codecs.append(fillCodecParameters(codec));
+        parameters.codecs.append(toRTCCodecParameters(codec));
 
     switch (rtcParameters.degradation_preference) {
     // FIXME: Support DegradationPreference::DISABLED.
@@ -117,6 +152,31 @@
     return parameters;
 }
 
+webrtc::RtpParameters fromRTCRtpParameters(const RTCRtpParameters& parameters)
+{
+    webrtc::RtpParameters rtcParameters;
+    rtcParameters.transaction_id = parameters.transactionId.utf8().data();
+
+    for (auto& encoding : parameters.encodings)
+        rtcParameters.encodings.push_back(fromRTCEncodingParameters(encoding));
+    for (auto& extension : parameters.headerExtensions)
+        rtcParameters.header_extensions.push_back(fromRTCHeaderExtensionParameters(extension));
+    // Codecs parameters are readonly
+
+    switch (parameters.degradationPreference) {
+    case RTCRtpParameters::DegradationPreference::MaintainFramerate:
+        rtcParameters.degradation_preference = webrtc::DegradationPreference::MAINTAIN_FRAMERATE;
+        break;
+    case RTCRtpParameters::DegradationPreference::MaintainResolution:
+        rtcParameters.degradation_preference = webrtc::DegradationPreference::MAINTAIN_RESOLUTION;
+        break;
+    case RTCRtpParameters::DegradationPreference::Balanced:
+        rtcParameters.degradation_preference = webrtc::DegradationPreference::BALANCED;
+        break;
+    }
+    return rtcParameters;
+}
+
 }; // namespace WebCore
 
 #endif // USE(LIBWEBRTC)

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


--- trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCUtils.h	2018-09-05 22:25:46 UTC (rev 235713)
+++ trunk/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCUtils.h	2018-09-05 22:30:04 UTC (rev 235714)
@@ -36,7 +36,8 @@
 
 struct RTCRtpParameters;
 
-RTCRtpParameters fillRtpParameters(const webrtc::RtpParameters&);
+RTCRtpParameters toRTCRtpParameters(const webrtc::RtpParameters&);
+webrtc::RtpParameters fromRTCRtpParameters(const RTCRtpParameters&);
 
 inline String fromStdString(const std::string& value)
 {
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to