Title: [214525] trunk/Source/WebCore
- Revision
- 214525
- Author
- [email protected]
- Date
- 2017-03-28 20:51:20 -0700 (Tue, 28 Mar 2017)
Log Message
LibWebRTCProvider should allow setting encoder and decoder factories
https://bugs.webkit.org/show_bug.cgi?id=170212
Patch by Youenn Fablet <[email protected]> on 2017-03-28
Reviewed by Eric Carlson.
No change of behavior.
Adding the ability to set encoder/decoder libwebrtc factory getters.
Setting default cocoa factory getters.
* platform/mediastream/libwebrtc/LibWebRTCProvider.cpp:
(WebCore::staticFactoryAndThreads):
(WebCore::initializePeerConnectionFactoryAndThreads):
(WebCore::LibWebRTCProvider::setDecoderFactoryGetter):
(WebCore::LibWebRTCProvider::setEncoderFactoryGetter):
(WebCore::LibWebRTCProvider::setPeerConnectionFactory):
* platform/mediastream/libwebrtc/LibWebRTCProvider.h:
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (214524 => 214525)
--- trunk/Source/WebCore/ChangeLog 2017-03-29 03:50:13 UTC (rev 214524)
+++ trunk/Source/WebCore/ChangeLog 2017-03-29 03:51:20 UTC (rev 214525)
@@ -1,3 +1,22 @@
+2017-03-28 Youenn Fablet <[email protected]>
+
+ LibWebRTCProvider should allow setting encoder and decoder factories
+ https://bugs.webkit.org/show_bug.cgi?id=170212
+
+ Reviewed by Eric Carlson.
+
+ No change of behavior.
+ Adding the ability to set encoder/decoder libwebrtc factory getters.
+ Setting default cocoa factory getters.
+
+ * platform/mediastream/libwebrtc/LibWebRTCProvider.cpp:
+ (WebCore::staticFactoryAndThreads):
+ (WebCore::initializePeerConnectionFactoryAndThreads):
+ (WebCore::LibWebRTCProvider::setDecoderFactoryGetter):
+ (WebCore::LibWebRTCProvider::setEncoderFactoryGetter):
+ (WebCore::LibWebRTCProvider::setPeerConnectionFactory):
+ * platform/mediastream/libwebrtc/LibWebRTCProvider.h:
+
2017-03-27 Brent Fulgham <[email protected]>
Only attach Attributes to a given element one time
Modified: trunk/Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCProvider.cpp (214524 => 214525)
--- trunk/Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCProvider.cpp 2017-03-29 03:50:13 UTC (rev 214524)
+++ trunk/Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCProvider.cpp 2017-03-29 03:51:20 UTC (rev 214525)
@@ -48,6 +48,9 @@
std::unique_ptr<rtc::Thread> signalingThread;
rtc::scoped_refptr<webrtc::PeerConnectionFactoryInterface> factory;
bool networkThreadWithSocketServer { false };
+ Function<std::unique_ptr<cricket::WebRtcVideoEncoderFactory>()> encoderFactoryGetter;
+ Function<std::unique_ptr<cricket::WebRtcVideoDecoderFactory>()> decoderFactoryGetter;
+
private:
void OnMessage(rtc::Message*);
};
@@ -55,6 +58,10 @@
static inline PeerConnectionFactoryAndThreads& staticFactoryAndThreads()
{
static NeverDestroyed<PeerConnectionFactoryAndThreads> factoryAndThreads;
+#if PLATFORM(COCOA)
+ factoryAndThreads.get().encoderFactoryGetter = []() -> std::unique_ptr<cricket::WebRtcVideoEncoderFactory> { return std::make_unique<webrtc::VideoToolboxVideoEncoderFactory>(); };
+ factoryAndThreads.get().decoderFactoryGetter = []() -> std::unique_ptr<cricket::WebRtcVideoDecoderFactory> { return std::make_unique<webrtc::VideoToolboxVideoDecoderFactory>(); };
+#endif
return factoryAndThreads.get();
}
@@ -112,8 +119,11 @@
factoryAndThreads.audioDeviceModule = std::make_unique<LibWebRTCAudioModule>();
- factoryAndThreads.factory = webrtc::CreatePeerConnectionFactory(factoryAndThreads.networkThread.get(), factoryAndThreads.networkThread.get(), factoryAndThreads.signalingThread.get(), factoryAndThreads.audioDeviceModule.get(), new webrtc::VideoToolboxVideoEncoderFactory(), new webrtc::VideoToolboxVideoDecoderFactory());
+ std::unique_ptr<cricket::WebRtcVideoEncoderFactory> encoderFactory = factoryAndThreads.encoderFactoryGetter ? factoryAndThreads.encoderFactoryGetter() : nullptr;
+ std::unique_ptr<cricket::WebRtcVideoDecoderFactory> decoderFactory = factoryAndThreads.decoderFactoryGetter ? factoryAndThreads.decoderFactoryGetter() : nullptr;
+ factoryAndThreads.factory = webrtc::CreatePeerConnectionFactory(factoryAndThreads.networkThread.get(), factoryAndThreads.networkThread.get(), factoryAndThreads.signalingThread.get(), factoryAndThreads.audioDeviceModule.get(), encoderFactory.release(), decoderFactory.release());
+
ASSERT(factoryAndThreads.factory);
}
@@ -126,6 +136,22 @@
return staticFactoryAndThreads().factory;
}
+void LibWebRTCProvider::setDecoderFactoryGetter(Function<std::unique_ptr<cricket::WebRtcVideoDecoderFactory>()>&& getter)
+{
+ if (!staticFactoryAndThreads().factory)
+ initializePeerConnectionFactoryAndThreads();
+
+ staticFactoryAndThreads().decoderFactoryGetter = WTFMove(getter);
+}
+
+void LibWebRTCProvider::setEncoderFactoryGetter(Function<std::unique_ptr<cricket::WebRtcVideoEncoderFactory>()>&& getter)
+{
+ if (!staticFactoryAndThreads().factory)
+ initializePeerConnectionFactoryAndThreads();
+
+ staticFactoryAndThreads().encoderFactoryGetter = WTFMove(getter);
+}
+
void LibWebRTCProvider::setPeerConnectionFactory(rtc::scoped_refptr<webrtc::PeerConnectionFactoryInterface>&& factory)
{
if (!staticFactoryAndThreads().factory)
Modified: trunk/Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCProvider.h (214524 => 214525)
--- trunk/Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCProvider.h 2017-03-29 03:50:13 UTC (rev 214524)
+++ trunk/Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCProvider.h 2017-03-29 03:51:20 UTC (rev 214525)
@@ -58,6 +58,9 @@
static WEBCORE_EXPORT void callOnWebRTCNetworkThread(Function<void()>&&);
static WEBCORE_EXPORT void callOnWebRTCSignalingThread(Function<void()>&&);
static WEBCORE_EXPORT webrtc::PeerConnectionFactoryInterface* factory();
+ static WEBCORE_EXPORT void setDecoderFactoryGetter(Function<std::unique_ptr<cricket::WebRtcVideoDecoderFactory>()>&&);
+ static WEBCORE_EXPORT void setEncoderFactoryGetter(Function<std::unique_ptr<cricket::WebRtcVideoEncoderFactory>()>&&);
+
// Used for mock testing
static void setPeerConnectionFactory(rtc::scoped_refptr<webrtc::PeerConnectionFactoryInterface>&&);
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes