WebKit Bugzilla
Attachment 348946 Details for
Bug 189307
: Expose RTCRtpSender.setParameters
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-189307-20180905111233.patch (text/plain), 24.54 KB, created by
youenn fablet
on 2018-09-05 11:12:34 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
youenn fablet
Created:
2018-09-05 11:12:34 PDT
Size:
24.54 KB
patch
obsolete
>Subversion Revision: 235669 >diff --git a/Source/ThirdParty/libwebrtc/ChangeLog b/Source/ThirdParty/libwebrtc/ChangeLog >index 1865dfaf0ac140ac2f0f6c401188f22d58938e96..3ab6f40ed11ee64ef877e08d83de4e5b04455876 100644 >--- a/Source/ThirdParty/libwebrtc/ChangeLog >+++ b/Source/ThirdParty/libwebrtc/ChangeLog >@@ -1,3 +1,14 @@ >+2018-09-05 Youenn Fablet <youenn@apple.com> >+ >+ Expose RTCRtpSender.setParameters >+ https://bugs.webkit.org/show_bug.cgi?id=189307 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * Configurations/libwebrtc.iOS.exp: >+ * Configurations/libwebrtc.iOSsim.exp: >+ * Configurations/libwebrtc.mac.exp: >+ > 2018-08-29 David Kilzer <ddkilzer@apple.com> > > Remove empty directories from from svn.webkit.org repository >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index 476db707225808f0732d9ac2ecbf829f38096907..2b7fb699b4cfb5e8ccacda5b9f001438d167859c 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,41 @@ >+2018-09-05 Youenn Fablet <youenn@apple.com> >+ >+ Expose RTCRtpSender.setParameters >+ https://bugs.webkit.org/show_bug.cgi?id=189307 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ 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 Youenn Fablet <youenn@apple.com> > > Move replaceTrack logic to LibWebRTCPeerConnectionBackend >diff --git a/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.iOS.exp b/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.iOS.exp >index 8478b2841526d4cce6169a76de2a04565d150287..d64cdf08b41b39a57afdb13fb8a78716a650a52d 100644 >--- a/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.iOS.exp >+++ b/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.iOS.exp >@@ -206,3 +206,9 @@ __ZN3rtc13PacketOptionsD1Ev > __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 >diff --git a/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.iOSsim.exp b/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.iOSsim.exp >index 8478b2841526d4cce6169a76de2a04565d150287..4fc1c4abd7a524b70ce8d50a333c180c63f6d4ff 100644 >--- a/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.iOSsim.exp >+++ b/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.iOSsim.exp >@@ -206,3 +206,10 @@ __ZN3rtc13PacketOptionsD1Ev > __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 >diff --git a/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.mac.exp b/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.mac.exp >index 8478b2841526d4cce6169a76de2a04565d150287..4fc1c4abd7a524b70ce8d50a333c180c63f6d4ff 100644 >--- a/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.mac.exp >+++ b/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.mac.exp >@@ -206,3 +206,10 @@ __ZN3rtc13PacketOptionsD1Ev > __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 >diff --git a/Source/WebCore/Modules/mediastream/RTCRtpParameters.h b/Source/WebCore/Modules/mediastream/RTCRtpParameters.h >index f0fc8eeee80766b85bcb2377b2fbca23af65a75d..20171b5e8a2f768c7551bfed767b64186589080c 100644 >--- a/Source/WebCore/Modules/mediastream/RTCRtpParameters.h >+++ b/Source/WebCore/Modules/mediastream/RTCRtpParameters.h >@@ -57,7 +57,7 @@ struct RTCRtpParameters { > 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 }; >diff --git a/Source/WebCore/Modules/mediastream/RTCRtpSender.cpp b/Source/WebCore/Modules/mediastream/RTCRtpSender.cpp >index 5acdd466f4934049c3b497f03fccd7966647bfe1..2b5b3c605926f73a7fc26e2a17b00672f23fbd3a 100644 >--- a/Source/WebCore/Modules/mediastream/RTCRtpSender.cpp >+++ b/Source/WebCore/Modules/mediastream/RTCRtpSender.cpp >@@ -99,6 +99,15 @@ RTCRtpParameters RTCRtpSender::getParameters() > 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) >diff --git a/Source/WebCore/Modules/mediastream/RTCRtpSender.h b/Source/WebCore/Modules/mediastream/RTCRtpSender.h >index a5d30924e3a03ba741eef8985e0e7503bbbd9a91..45b89014461b10be3b0b2183239eca7a9aa041ee 100644 >--- a/Source/WebCore/Modules/mediastream/RTCRtpSender.h >+++ b/Source/WebCore/Modules/mediastream/RTCRtpSender.h >@@ -57,6 +57,8 @@ public: > void replaceTrack(RefPtr<MediaStreamTrack>&&, DOMPromiseDeferred<void>&&); > > RTCRtpParameters getParameters(); >+ void setParameters(const RTCRtpParameters&, DOMPromiseDeferred<void>&&); >+ > RTCRtpSenderBackend* backend() { return m_backend.get(); } > > private: >diff --git a/Source/WebCore/Modules/mediastream/RTCRtpSender.idl b/Source/WebCore/Modules/mediastream/RTCRtpSender.idl >index 3f3fe419a66d558ed1b4d851a63d0e3a49e54e72..c8dcd97ed2708b180493793036b6d48a3bd285e3 100644 >--- a/Source/WebCore/Modules/mediastream/RTCRtpSender.idl >+++ b/Source/WebCore/Modules/mediastream/RTCRtpSender.idl >@@ -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); > }; >diff --git a/Source/WebCore/Modules/mediastream/RTCRtpSenderBackend.h b/Source/WebCore/Modules/mediastream/RTCRtpSenderBackend.h >index 476543c98c6fa6ca465015c1bc58fcee7a97a431..4ad09ecaf43b04132599ffb1ff82bd16324206df 100644 >--- a/Source/WebCore/Modules/mediastream/RTCRtpSenderBackend.h >+++ b/Source/WebCore/Modules/mediastream/RTCRtpSenderBackend.h >@@ -38,6 +38,7 @@ class RTCRtpSenderBackend { > 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; > }; > >diff --git a/Source/WebCore/Modules/mediastream/RTCRtpTransceiver.cpp b/Source/WebCore/Modules/mediastream/RTCRtpTransceiver.cpp >index 848c3df5d0e811cfb50742818800835290e07b19..ad4c171667eacb0318de44377223fa08a5a4a4f2 100644 >--- a/Source/WebCore/Modules/mediastream/RTCRtpTransceiver.cpp >+++ b/Source/WebCore/Modules/mediastream/RTCRtpTransceiver.cpp >@@ -102,6 +102,13 @@ void RTCRtpTransceiver::disableSendingDirection() > 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()); >diff --git a/Source/WebCore/Modules/mediastream/RTCRtpTransceiver.h b/Source/WebCore/Modules/mediastream/RTCRtpTransceiver.h >index 1a1cac92aa848a5431d5a98286cc46fb0732e607..3e71be7933e44b0624c2a161cc5eb65e56f631d2 100644 >--- a/Source/WebCore/Modules/mediastream/RTCRtpTransceiver.h >+++ b/Source/WebCore/Modules/mediastream/RTCRtpTransceiver.h >@@ -68,7 +68,7 @@ public: > 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 >diff --git a/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCRtpReceiverBackend.cpp b/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCRtpReceiverBackend.cpp >index 4df4e7ccafe63133b835b01db2d0f7baeaa09405..5406d864fda0493c860884aa7fb315c29ddc6667 100644 >--- a/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCRtpReceiverBackend.cpp >+++ b/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCRtpReceiverBackend.cpp >@@ -33,7 +33,7 @@ namespace WebCore { > > RTCRtpParameters LibWebRTCRtpReceiverBackend::getParameters() > { >- return fillRtpParameters(m_rtcReceiver->GetParameters()); >+ return toRTCRtpParameters(m_rtcReceiver->GetParameters()); > } > > } // namespace WebCore >diff --git a/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.cpp b/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.cpp >index 51a78ae31dbaff5bb5f9ec5b1125b7af9d012c37..9371820034757a6793df3a66a6bf3540d2d8b257 100644 >--- a/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.cpp >+++ b/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.cpp >@@ -49,7 +49,21 @@ RTCRtpParameters LibWebRTCRtpSenderBackend::getParameters() const > 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 >diff --git a/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.h b/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.h >index 686fa88f3ed516b0523b2319f01a6f9d85cccd68..66927f96451d51e1640160768f6a7fdb3af2ab0f 100644 >--- a/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.h >+++ b/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCRtpSenderBackend.h >@@ -94,6 +94,7 @@ public: > 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; >diff --git a/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCUtils.cpp b/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCUtils.cpp >index 4e8541158952a869223ddc7525326147181978e3..2f3c10ce05985f71355f614556116552d6f29939 100644 >--- a/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCUtils.cpp >+++ b/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCUtils.cpp >@@ -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,7 +65,32 @@ static inline RTCRtpParameters::EncodingParameters fillEncodingParameters(const > 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; > >@@ -75,7 +100,17 @@ static inline RTCRtpParameters::HeaderExtensionParameters fillHeaderExtensionPar > 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; > >@@ -89,17 +124,17 @@ static inline RTCRtpParameters::CodecParameters fillCodecParameters(const webrtc > 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 @@ RTCRtpParameters fillRtpParameters(const webrtc::RtpParameters& rtcParameters) > 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) >diff --git a/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCUtils.h b/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCUtils.h >index f26c3cf35e95dc38a1d78aa8cc626cb4c92ee012..ba63751f1a24deeb1569c323cadcb9bc42e9dfae 100644 >--- a/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCUtils.h >+++ b/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCUtils.h >@@ -36,7 +36,8 @@ namespace WebCore { > > struct RTCRtpParameters; > >-RTCRtpParameters fillRtpParameters(const webrtc::RtpParameters&); >+RTCRtpParameters toRTCRtpParameters(const webrtc::RtpParameters&); >+webrtc::RtpParameters fromRTCRtpParameters(const RTCRtpParameters&); > > inline String fromStdString(const std::string& value) > { >diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog >index 3879ee7cb12346e495da0131fdcac40fc100256f..b9a5c045741bc089ffc546919fbe62833f82efef 100644 >--- a/LayoutTests/ChangeLog >+++ b/LayoutTests/ChangeLog >@@ -1,3 +1,12 @@ >+2018-09-05 Youenn Fablet <youenn@apple.com> >+ >+ Expose RTCRtpSender.setParameters >+ https://bugs.webkit.org/show_bug.cgi?id=189307 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * webrtc/video-getParameters.html: >+ > 2018-09-05 Ms2ger <Ms2ger@igalia.com> > > GTK-focused gardening >diff --git a/LayoutTests/imported/w3c/ChangeLog b/LayoutTests/imported/w3c/ChangeLog >index cf7b31b0ff0b0823f5dc2948d8d5e026eb1b9ac9..2a84347bd0834b9277dbdcfd354e6d2d79b6429a 100644 >--- a/LayoutTests/imported/w3c/ChangeLog >+++ b/LayoutTests/imported/w3c/ChangeLog >@@ -1,3 +1,13 @@ >+2018-09-05 Youenn Fablet <youenn@apple.com> >+ >+ Expose RTCRtpSender.setParameters >+ https://bugs.webkit.org/show_bug.cgi?id=189307 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * web-platform-tests/webrtc/RTCRtpSender-replaceTrack-expected.txt: >+ * web-platform-tests/webrtc/RTCRtpSender-setParameters-expected.txt: >+ > 2018-09-04 Frederic Wang <fwang@igalia.com> > > Add basic support for ScrollIntoViewOptions >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCRtpSender-replaceTrack-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCRtpSender-replaceTrack-expected.txt >index 71f717fe1fe6af4689b36d7b1bf7f5ca23c0a6c9..fc64b50113502989e5f2b5c3e52f6c8efdd5f3ec 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCRtpSender-replaceTrack-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCRtpSender-replaceTrack-expected.txt >@@ -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 >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCRtpSender-setParameters-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCRtpSender-setParameters-expected.txt >index 156bd67afa343983641d4c7454ce743c5c30a88d..78a6005a9d7e0963d6ee786f0ad9fb8b8af013bc 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCRtpSender-setParameters-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCRtpSender-setParameters-expected.txt >@@ -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 > >diff --git a/LayoutTests/webrtc/video-getParameters.html b/LayoutTests/webrtc/video-getParameters.html >index 3b269080b3dcf4d96f2510942a0e5e708adf1b94..e3a2931a296a68007f55f06e745a3c524856adb7 100644 >--- a/LayoutTests/webrtc/video-getParameters.html >+++ b/LayoutTests/webrtc/video-getParameters.html >@@ -51,7 +51,7 @@ promise_test((test) => { > 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>
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 189307
: 348946