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

Reply via email to