Title: [269293] trunk/Source
Revision
269293
Author
[email protected]
Date
2020-11-03 04:33:03 -0800 (Tue, 03 Nov 2020)

Log Message

Allow low latency H264 encoder in GPUProcess
https://bugs.webkit.org/show_bug.cgi?id=218442

Reviewed by Eric Carlson.

Source/ThirdParty/libwebrtc:

Add a useLowLatency boolean in RTCVideoEncoderH264 and in encoder factory.
Encoder is set by the factory at creation time.
useLowLatency factory value is set at creation of the factory.

Clean up WebKitXX.h headers to do less include and move declarations in specific headers.

* Configurations/libwebrtc.iOS.exp:
* Configurations/libwebrtc.iOSsim.exp:
* Configurations/libwebrtc.mac.exp:
* Source/webrtc/sdk/WebKit/WebKitDecoder.h:
* Source/webrtc/sdk/WebKit/WebKitDecoder.mm:
(webrtc::videoDecoderTaskComplete):
* Source/webrtc/sdk/WebKit/WebKitEncoder.h:
* Source/webrtc/sdk/WebKit/WebKitEncoder.mm:
(-[WK_RTCLocalVideoH264H265Encoder setLowLatency:]):
(webrtc::createWebKitEncoderFactory):
(webrtc::setLocalEncoderLowLatency):
* Source/webrtc/sdk/WebKit/WebKitUtilities.h:
* Source/webrtc/sdk/WebKit/WebKitUtilities.mm:
* Source/webrtc/sdk/objc/components/video_codec/RTCDefaultVideoEncoderFactory.h:
* Source/webrtc/sdk/objc/components/video_codec/RTCDefaultVideoEncoderFactory.m:
(-[RTCDefaultVideoEncoderFactory initWithH265:vp9:lowLatencyH264:]):
(-[RTCDefaultVideoEncoderFactory createEncoder:]):
* Source/webrtc/sdk/objc/components/video_codec/RTCVideoEncoderH264.h:
* Source/webrtc/sdk/objc/components/video_codec/RTCVideoEncoderH264.mm:
(-[RTCVideoEncoderH264 initWithCodecInfo:]):
(-[RTCVideoEncoderH264 setH264LowLatencyEncoderEnabled:]):
(-[RTCVideoEncoderH264 resetCompressionSessionWithPixelFormat:]):

Source/WebCore:

Pass useLowLatency boolean when creating encoder factory.
Manually tested.

* platform/mediastream/libwebrtc/LibWebRTCProviderCocoa.cpp:
(WebCore::LibWebRTCProviderCocoa::createEncoderFactory):

Source/WebKit:

Pass useLowLatency boolean from WebProcess to GPUProcess.

* GPUProcess/webrtc/LibWebRTCCodecsProxy.h:
* GPUProcess/webrtc/LibWebRTCCodecsProxy.messages.in:
* GPUProcess/webrtc/LibWebRTCCodecsProxy.mm:
(WebKit::LibWebRTCCodecsProxy::createEncoder):
* WebProcess/GPU/webrtc/LibWebRTCCodecs.cpp:
(WebKit::LibWebRTCCodecs::completedDecoding):
(WebKit::LibWebRTCCodecs::createEncoder):

Modified Paths

Diff

Modified: trunk/Source/ThirdParty/libwebrtc/ChangeLog (269292 => 269293)


--- trunk/Source/ThirdParty/libwebrtc/ChangeLog	2020-11-03 11:50:05 UTC (rev 269292)
+++ trunk/Source/ThirdParty/libwebrtc/ChangeLog	2020-11-03 12:33:03 UTC (rev 269293)
@@ -1,5 +1,41 @@
 2020-11-03  Youenn Fablet  <[email protected]>
 
+        Allow low latency H264 encoder in GPUProcess
+        https://bugs.webkit.org/show_bug.cgi?id=218442
+
+        Reviewed by Eric Carlson.
+
+        Add a useLowLatency boolean in RTCVideoEncoderH264 and in encoder factory.
+        Encoder is set by the factory at creation time.
+        useLowLatency factory value is set at creation of the factory.
+
+        Clean up WebKitXX.h headers to do less include and move declarations in specific headers.
+
+        * Configurations/libwebrtc.iOS.exp:
+        * Configurations/libwebrtc.iOSsim.exp:
+        * Configurations/libwebrtc.mac.exp:
+        * Source/webrtc/sdk/WebKit/WebKitDecoder.h:
+        * Source/webrtc/sdk/WebKit/WebKitDecoder.mm:
+        (webrtc::videoDecoderTaskComplete):
+        * Source/webrtc/sdk/WebKit/WebKitEncoder.h:
+        * Source/webrtc/sdk/WebKit/WebKitEncoder.mm:
+        (-[WK_RTCLocalVideoH264H265Encoder setLowLatency:]):
+        (webrtc::createWebKitEncoderFactory):
+        (webrtc::setLocalEncoderLowLatency):
+        * Source/webrtc/sdk/WebKit/WebKitUtilities.h:
+        * Source/webrtc/sdk/WebKit/WebKitUtilities.mm:
+        * Source/webrtc/sdk/objc/components/video_codec/RTCDefaultVideoEncoderFactory.h:
+        * Source/webrtc/sdk/objc/components/video_codec/RTCDefaultVideoEncoderFactory.m:
+        (-[RTCDefaultVideoEncoderFactory initWithH265:vp9:lowLatencyH264:]):
+        (-[RTCDefaultVideoEncoderFactory createEncoder:]):
+        * Source/webrtc/sdk/objc/components/video_codec/RTCVideoEncoderH264.h:
+        * Source/webrtc/sdk/objc/components/video_codec/RTCVideoEncoderH264.mm:
+        (-[RTCVideoEncoderH264 initWithCodecInfo:]):
+        (-[RTCVideoEncoderH264 setH264LowLatencyEncoderEnabled:]):
+        (-[RTCVideoEncoderH264 resetCompressionSessionWithPixelFormat:]):
+
+2020-11-03  Youenn Fablet  <[email protected]>
+
         Update WebRTC libyuv to M87
         https://bugs.webkit.org/show_bug.cgi?id=218434
 

Modified: trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.iOS.exp (269292 => 269293)


--- trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.iOS.exp	2020-11-03 11:50:05 UTC (rev 269292)
+++ trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.iOS.exp	2020-11-03 12:33:03 UTC (rev 269293)
@@ -105,9 +105,8 @@
 __ZNK6webrtc21IceCandidateInterface10server_urlEv
 __ZN6webrtc20setApplicationStatusEb
 __ZN6webrtc26createWebKitDecoderFactoryENS_10WebKitH265ENS_9WebKitVP9ENS_12WebKitVP9VTBE
-__ZN6webrtc26createWebKitEncoderFactoryENS_10WebKitH265ENS_9WebKitVP9E
+__ZN6webrtc26createWebKitEncoderFactoryENS_10WebKitH265ENS_9WebKitVP9ENS_20WebKitH264LowLatencyE
 __ZN6webrtc29setH264HardwareEncoderAllowedEb
-__ZN6webrtc31setH264LowLatencyEncoderEnabledEb
 __ZN6webrtc24registerWebKitVP9DecoderEv
 __ZN6webrtc20pixelBufferFromFrameERKNS_10VideoFrameERKNSt3__18functionIFP10__CVBuffermmNS_10BufferTypeEEEE
 __ZN6webrtc18pixelBufferToFrameEP10__CVBuffer
@@ -242,7 +241,7 @@
 __ZN6webrtc22createLocalH265DecoderEU13block_pointerFvP10__CVBufferjjE
 __ZN6webrtc19releaseLocalDecoderEPv
 __ZN6webrtc11decodeFrameEPvjPKhm
-__ZN6webrtc18RemoteVideoDecoder14decodeCompleteEPvjP10__CVBufferj
+__ZN6webrtc24videoDecoderTaskCompleteEPvjP10__CVBufferj
 __ZN6webrtc24setVideoDecoderCallbacksEPFPvRKNS_14SdpVideoFormatEEPFiS0_EPFiS0_jPKhmEPFiS0_S0_E
 __ZN6webrtc18RtpCodecCapabilityC1Ev
 __ZN6webrtc24setVideoDecoderCallbacksEPFPvRKNS_14SdpVideoFormatEEPFiS0_EPFiS0_jPKhmEPFiS0_S0_E
@@ -253,6 +252,7 @@
 __ZN6webrtc22RTPFragmentationHeader6ResizeEm
 __ZN6webrtc24setVideoEncoderCallbacksEPFPvRKNS_14SdpVideoFormatEEPFiS0_EPFiS0_RKNS_10VideoCodecEEPFiS0_RKNS_10VideoFrameEbEPFiS0_S0_EPFvS0_RKNS_12VideoEncoder21RateControlParametersEE
 __ZN6webrtc20setLocalEncoderRatesEPvjj
+__ZN6webrtc25setLocalEncoderLowLatencyEPvb
 __ZN6webrtc22initializeLocalEncoderEPvttjjjj
 __ZN6webrtc14SdpVideoFormatC1ERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEERKNS1_3mapIS7_S7_NS1_4lessIS7_EENS5_INS1_4pairIS8_S7_EEEEEE
 __ZN6webrtc18createLocalEncoderERKNS_14SdpVideoFormatEU13block_pointerFvPKhmRKNS_22WebKitEncodedFrameInfoEPNS_22RTPFragmentationHeaderEE

Modified: trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.iOSsim.exp (269292 => 269293)


--- trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.iOSsim.exp	2020-11-03 11:50:05 UTC (rev 269292)
+++ trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.iOSsim.exp	2020-11-03 12:33:03 UTC (rev 269293)
@@ -105,9 +105,8 @@
 __ZNK6webrtc21IceCandidateInterface10server_urlEv
 __ZN6webrtc20setApplicationStatusEb
 __ZN6webrtc26createWebKitDecoderFactoryENS_10WebKitH265ENS_9WebKitVP9ENS_12WebKitVP9VTBE
-__ZN6webrtc26createWebKitEncoderFactoryENS_10WebKitH265ENS_9WebKitVP9E
+__ZN6webrtc26createWebKitEncoderFactoryENS_10WebKitH265ENS_9WebKitVP9ENS_20WebKitH264LowLatencyE
 __ZN6webrtc29setH264HardwareEncoderAllowedEb
-__ZN6webrtc31setH264LowLatencyEncoderEnabledEb
 __ZN6webrtc24registerWebKitVP9DecoderEv
 __ZN6webrtc20pixelBufferFromFrameERKNS_10VideoFrameERKNSt3__18functionIFP10__CVBuffermmNS_10BufferTypeEEEE
 __ZN6webrtc18pixelBufferToFrameEP10__CVBuffer
@@ -242,7 +241,7 @@
 __ZN6webrtc22createLocalH265DecoderEU13block_pointerFvP10__CVBufferjjE
 __ZN6webrtc19releaseLocalDecoderEPv
 __ZN6webrtc11decodeFrameEPvjPKhm
-__ZN6webrtc18RemoteVideoDecoder14decodeCompleteEPvjP10__CVBufferj
+__ZN6webrtc24videoDecoderTaskCompleteEPvjP10__CVBufferj
 __ZN6webrtc24setVideoDecoderCallbacksEPFPvRKNS_14SdpVideoFormatEEPFiS0_EPFiS0_jPKhmEPFiS0_S0_E
 __ZN6webrtc18RtpCodecCapabilityC1Ev
 __ZN6webrtc24setVideoDecoderCallbacksEPFPvRKNS_14SdpVideoFormatEEPFiS0_EPFiS0_jPKhmEPFiS0_S0_E
@@ -253,6 +252,7 @@
 __ZN6webrtc22RTPFragmentationHeader6ResizeEm
 __ZN6webrtc24setVideoEncoderCallbacksEPFPvRKNS_14SdpVideoFormatEEPFiS0_EPFiS0_RKNS_10VideoCodecEEPFiS0_RKNS_10VideoFrameEbEPFiS0_S0_EPFvS0_RKNS_12VideoEncoder21RateControlParametersEE
 __ZN6webrtc20setLocalEncoderRatesEPvjj
+__ZN6webrtc25setLocalEncoderLowLatencyEPvb
 __ZN6webrtc22initializeLocalEncoderEPvttjjjj
 __ZN6webrtc14SdpVideoFormatC1ERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEERKNS1_3mapIS7_S7_NS1_4lessIS7_EENS5_INS1_4pairIS8_S7_EEEEEE
 __ZN6webrtc18createLocalEncoderERKNS_14SdpVideoFormatEU13block_pointerFvPKhmRKNS_22WebKitEncodedFrameInfoEPNS_22RTPFragmentationHeaderEE

Modified: trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.mac.exp (269292 => 269293)


--- trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.mac.exp	2020-11-03 11:50:05 UTC (rev 269292)
+++ trunk/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.mac.exp	2020-11-03 12:33:03 UTC (rev 269293)
@@ -105,9 +105,8 @@
 __ZNK6webrtc21IceCandidateInterface10server_urlEv
 __ZN6webrtc20setApplicationStatusEb
 __ZN6webrtc26createWebKitDecoderFactoryENS_10WebKitH265ENS_9WebKitVP9ENS_12WebKitVP9VTBE
-__ZN6webrtc26createWebKitEncoderFactoryENS_10WebKitH265ENS_9WebKitVP9E
+__ZN6webrtc26createWebKitEncoderFactoryENS_10WebKitH265ENS_9WebKitVP9ENS_20WebKitH264LowLatencyE
 __ZN6webrtc29setH264HardwareEncoderAllowedEb
-__ZN6webrtc31setH264LowLatencyEncoderEnabledEb
 __ZN6webrtc24registerWebKitVP9DecoderEv
 __ZN6webrtc20pixelBufferFromFrameERKNS_10VideoFrameERKNSt3__18functionIFP10__CVBuffermmNS_10BufferTypeEEEE
 __ZN6webrtc18pixelBufferToFrameEP10__CVBuffer
@@ -242,7 +241,7 @@
 __ZN6webrtc22createLocalH265DecoderEU13block_pointerFvP10__CVBufferjjE
 __ZN6webrtc19releaseLocalDecoderEPv
 __ZN6webrtc11decodeFrameEPvjPKhm
-__ZN6webrtc18RemoteVideoDecoder14decodeCompleteEPvjP10__CVBufferj
+__ZN6webrtc24videoDecoderTaskCompleteEPvjP10__CVBufferj
 __ZN6webrtc24setVideoDecoderCallbacksEPFPvRKNS_14SdpVideoFormatEEPFiS0_EPFiS0_jPKhmEPFiS0_S0_E
 __ZN6webrtc18RtpCodecCapabilityC1Ev
 __ZN6webrtc22RTPFragmentationHeaderD1Ev
@@ -251,6 +250,7 @@
 __ZN6webrtc22RTPFragmentationHeader6ResizeEm
 __ZN6webrtc24setVideoEncoderCallbacksEPFPvRKNS_14SdpVideoFormatEEPFiS0_EPFiS0_RKNS_10VideoCodecEEPFiS0_RKNS_10VideoFrameEbEPFiS0_S0_EPFvS0_RKNS_12VideoEncoder21RateControlParametersEE
 __ZN6webrtc20setLocalEncoderRatesEPvjj
+__ZN6webrtc25setLocalEncoderLowLatencyEPvb
 __ZN6webrtc22initializeLocalEncoderEPvttjjjj
 __ZN6webrtc14SdpVideoFormatC1ERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEERKNS1_3mapIS7_S7_NS1_4lessIS7_EENS5_INS1_4pairIS8_S7_EEEEEE
 __ZN6webrtc18createLocalEncoderERKNS_14SdpVideoFormatEU13block_pointerFvPKhmRKNS_22WebKitEncodedFrameInfoEPNS_22RTPFragmentationHeaderEE

Modified: trunk/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/WebKitDecoder.h (269292 => 269293)


--- trunk/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/WebKitDecoder.h	2020-11-03 11:50:05 UTC (rev 269292)
+++ trunk/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/WebKitDecoder.h	2020-11-03 12:33:03 UTC (rev 269293)
@@ -25,7 +25,7 @@
 
 #pragma once
 
-#include "api/video_codecs/video_decoder.h"
+#include "WebKitUtilities.h"
 #include "api/video_codecs/video_decoder_factory.h"
 
 typedef struct __CVBuffer* CVPixelBufferRef;
@@ -33,6 +33,7 @@
 namespace webrtc {
 
 struct SdpVideoFormat;
+class VideoDecoderFactory;
 
 using WebKitVideoDecoder = void*;
 using VideoDecoderCreateCallback = WebKitVideoDecoder(*)(const SdpVideoFormat& format);
@@ -42,35 +43,10 @@
 
 void setVideoDecoderCallbacks(VideoDecoderCreateCallback, VideoDecoderReleaseCallback, VideoDecoderDecodeCallback, VideoDecoderRegisterDecodeCompleteCallback);
 
-class RemoteVideoDecoderFactory final : public VideoDecoderFactory {
-public:
-    explicit RemoteVideoDecoderFactory(std::unique_ptr<VideoDecoderFactory>&&);
-    ~RemoteVideoDecoderFactory() = default;
+std::unique_ptr<webrtc::VideoDecoderFactory> createWebKitDecoderFactory(WebKitH265, WebKitVP9, WebKitVP9VTB);
+void videoDecoderTaskComplete(void* callback, uint32_t timeStamp, CVPixelBufferRef, uint32_t timeStampRTP);
 
-private:
-    std::vector<SdpVideoFormat> GetSupportedFormats() const final;
-    std::unique_ptr<VideoDecoder> CreateVideoDecoder(const SdpVideoFormat& format) final;
 
-    std::unique_ptr<VideoDecoderFactory> m_internalFactory;
-};
-
-class RemoteVideoDecoder final : public webrtc::VideoDecoder {
-public:
-    explicit RemoteVideoDecoder(WebKitVideoDecoder);
-    ~RemoteVideoDecoder() = default;
-
-    static void decodeComplete(void* callback, uint32_t timeStamp, CVPixelBufferRef, uint32_t timeStampRTP);
-
-private:
-    int32_t InitDecode(const VideoCodec*, int32_t number_of_cores) final;
-    int32_t Decode(const EncodedImage&, bool missing_frames, int64_t render_time_ms) final;
-    int32_t RegisterDecodeCompleteCallback(DecodedImageCallback*) final;
-    int32_t Release() final;
-    const char* ImplementationName() const final { return "RemoteVideoToolBox"; }
-
-    WebKitVideoDecoder m_internalDecoder;
-};
-
 using LocalDecoder = void*;
 using LocalDecoderCallback = void (^)(CVPixelBufferRef, uint32_t timeStamp, uint32_t timeStampNs);
 void* createLocalH264Decoder(LocalDecoderCallback);

Modified: trunk/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/WebKitDecoder.mm (269292 => 269293)


--- trunk/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/WebKitDecoder.mm	2020-11-03 11:50:05 UTC (rev 269292)
+++ trunk/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/WebKitDecoder.mm	2020-11-03 12:33:03 UTC (rev 269293)
@@ -29,6 +29,10 @@
 #import "Framework/Headers/WebRTC/RTCVideoFrameBuffer.h"
 #import "Framework/Native/api/video_decoder_factory.h"
 #import "WebKitUtilities.h"
+#import "api/video_codecs/video_decoder.h"
+#import "api/video_codecs/video_decoder_factory.h"
+#import "modules/video_coding/codecs/h264/include/h264.h"
+#import "modules/video_coding/include/video_error_codes.h"
 #import "sdk/objc/components/video_codec/RTCVideoDecoderH264.h"
 #import "sdk/objc/components/video_codec/RTCVideoDecoderH265.h"
 
@@ -83,6 +87,33 @@
 
 namespace webrtc {
 
+class RemoteVideoDecoderFactory final : public VideoDecoderFactory {
+public:
+    explicit RemoteVideoDecoderFactory(std::unique_ptr<VideoDecoderFactory>&&);
+    ~RemoteVideoDecoderFactory() = default;
+
+private:
+    std::vector<SdpVideoFormat> GetSupportedFormats() const final;
+    std::unique_ptr<VideoDecoder> CreateVideoDecoder(const SdpVideoFormat& format) final;
+
+    std::unique_ptr<VideoDecoderFactory> m_internalFactory;
+};
+
+class RemoteVideoDecoder final : public webrtc::VideoDecoder {
+public:
+    explicit RemoteVideoDecoder(WebKitVideoDecoder);
+    ~RemoteVideoDecoder() = default;
+
+private:
+    int32_t InitDecode(const VideoCodec*, int32_t number_of_cores) final;
+    int32_t Decode(const EncodedImage&, bool missing_frames, int64_t render_time_ms) final;
+    int32_t RegisterDecodeCompleteCallback(DecodedImageCallback*) final;
+    int32_t Release() final;
+    const char* ImplementationName() const final { return "RemoteVideoToolBox"; }
+
+    WebKitVideoDecoder m_internalDecoder;
+};
+
 struct VideoDecoderCallbacks {
     VideoDecoderCreateCallback createCallback;
     VideoDecoderReleaseCallback releaseCallback;
@@ -109,7 +140,7 @@
 {
 }
 
-void RemoteVideoDecoder::decodeComplete(void* callback, uint32_t timeStamp, CVPixelBufferRef pixelBuffer, uint32_t timeStampRTP)
+void videoDecoderTaskComplete(void* callback, uint32_t timeStamp, CVPixelBufferRef pixelBuffer, uint32_t timeStampRTP)
 {
     auto videoFrame = VideoFrame::Builder().set_video_frame_buffer(pixelBufferToFrame(pixelBuffer))
         .set_timestamp_rtp(timeStampRTP)

Modified: trunk/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/WebKitEncoder.h (269292 => 269293)


--- trunk/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/WebKitEncoder.h	2020-11-03 11:50:05 UTC (rev 269292)
+++ trunk/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/WebKitEncoder.h	2020-11-03 12:33:03 UTC (rev 269293)
@@ -25,10 +25,12 @@
 
 #pragma once
 
+#include "WebKitUtilities.h"
 #include "api/video_codecs/video_encoder.h"
 #include "api/video_codecs/video_encoder_factory.h"
 #include "api/video/encoded_image.h"
 #include "modules/include/module_common_types.h"
+#include "modules/video_coding/include/video_error_codes.h"
 
 using CVPixelBufferRef = struct __CVBuffer*;
 
@@ -40,23 +42,8 @@
 struct SdpVideoFormat;
 class Settings;
 
-class VideoEncoderFactoryWithSimulcast final : public VideoEncoderFactory {
-public:
-    explicit VideoEncoderFactoryWithSimulcast(std::unique_ptr<VideoEncoderFactory>&& factory)
-        : m_internalEncoderFactory(std::move(factory))
-    {
-    }
+std::unique_ptr<webrtc::VideoEncoderFactory> createWebKitEncoderFactory(WebKitH265, WebKitVP9, WebKitH264LowLatency);
 
-    VideoEncoderFactory::CodecInfo QueryVideoEncoder(const SdpVideoFormat& format) const final { return m_internalEncoderFactory->QueryVideoEncoder(format); }
-
-    std::unique_ptr<VideoEncoder> CreateVideoEncoder(const SdpVideoFormat& format) final;
- 
-    std::vector<SdpVideoFormat> GetSupportedFormats() const final { return m_internalEncoderFactory->GetSupportedFormats(); }
-
-private:
-    const std::unique_ptr<VideoEncoderFactory> m_internalEncoderFactory;
-};
-
 using WebKitVideoEncoder = void*;
 using VideoEncoderCreateCallback = WebKitVideoEncoder(*)(const SdpVideoFormat& format);
 using VideoEncoderReleaseCallback = int32_t(*)(WebKitVideoEncoder);
@@ -124,6 +111,7 @@
 void initializeLocalEncoder(LocalEncoder, uint16_t width, uint16_t height, unsigned int startBitrate, unsigned int maxBitrate, unsigned int minBitrate, uint32_t maxFramerate);
 void encodeLocalEncoderFrame(LocalEncoder, CVPixelBufferRef, int64_t timeStamp, webrtc::VideoRotation, bool isKeyframeRequired);
 void setLocalEncoderRates(LocalEncoder, uint32_t bitRate, uint32_t frameRate);
+void setLocalEncoderLowLatency(LocalEncoder, bool isLowLatencyEnabled);
 
 template<class Decoder>
 bool WebKitEncodedFrameInfo::decode(Decoder& decoder, WebKitEncodedFrameInfo& info)

Modified: trunk/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/WebKitEncoder.mm (269292 => 269293)


--- trunk/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/WebKitEncoder.mm	2020-11-03 11:50:05 UTC (rev 269292)
+++ trunk/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/WebKitEncoder.mm	2020-11-03 12:33:03 UTC (rev 269293)
@@ -28,6 +28,7 @@
 #include "WebKitUtilities.h"
 #include "api/video/video_frame.h"
 #include "components/video_codec/RTCCodecSpecificInfoH264+Private.h"
+#include "media/engine/encoder_simulcast_proxy.h"
 #include "modules/video_coding/utility/simulcast_utility.h"
 #include "sdk/objc/api/peerconnection/RTCEncodedImage+Private.h"
 #include "sdk/objc/api/peerconnection/RTCRtpFragmentationHeader+Private.h"
@@ -46,6 +47,7 @@
 - (NSInteger)startEncodeWithSettings:(RTCVideoEncoderSettings *)settings numberOfCores:(int)numberOfCores;
 - (NSInteger)encode:(RTCVideoFrame *)frame codecSpecificInfo:(nullable id<RTCCodecSpecificInfo>)info frameTypes:(NSArray<NSNumber *> *)frameTypes;
 - (int)setBitrate:(uint32_t)bitrateKbit framerate:(uint32_t)framerate;
+- (void)setLowLatency:(bool)lowLatencyEnabled;
 @end
 
 @implementation WK_RTCLocalVideoH264H265Encoder {
@@ -92,10 +94,30 @@
         return [m_h264Encoder setBitrate:bitrateKbit framerate:framerate];
     return [m_h265Encoder setBitrate:bitrateKbit framerate:framerate];
 }
+- (void)setLowLatency:(bool)lowLatencyEnabled {
+    if (m_h264Encoder)
+        [m_h264Encoder setH264LowLatencyEncoderEnabled:lowLatencyEnabled];
+}
 @end
+
 namespace webrtc {
 
-std::unique_ptr<webrtc::VideoEncoderFactory> createWebKitEncoderFactory(WebKitH265 supportsH265, WebKitVP9 supportsVP9)
+class VideoEncoderFactoryWithSimulcast final : public VideoEncoderFactory {
+public:
+    explicit VideoEncoderFactoryWithSimulcast(std::unique_ptr<VideoEncoderFactory>&& factory)
+        : m_internalEncoderFactory(std::move(factory))
+    {
+    }
+
+    VideoEncoderFactory::CodecInfo QueryVideoEncoder(const SdpVideoFormat& format) const final { return m_internalEncoderFactory->QueryVideoEncoder(format); }
+    std::unique_ptr<VideoEncoder> CreateVideoEncoder(const SdpVideoFormat& format) final;
+    std::vector<SdpVideoFormat> GetSupportedFormats() const final { return m_internalEncoderFactory->GetSupportedFormats(); }
+
+private:
+    const std::unique_ptr<VideoEncoderFactory> m_internalEncoderFactory;
+};
+
+std::unique_ptr<webrtc::VideoEncoderFactory> createWebKitEncoderFactory(WebKitH265 supportsH265, WebKitVP9 supportsVP9, WebKitH264LowLatency useH264LowLatency)
 {
 #if ENABLE_VCP_ENCODER || ENABLE_VCP_VTB_ENCODER
     static std::once_flag onceFlag;
@@ -104,7 +126,7 @@
     });
 #endif
 
-    auto internalFactory = ObjCToNativeVideoEncoderFactory([[RTCDefaultVideoEncoderFactory alloc] initWithH265: supportsH265 == WebKitH265::On vp9:supportsVP9 == WebKitVP9::On]);
+    auto internalFactory = ObjCToNativeVideoEncoderFactory([[RTCDefaultVideoEncoderFactory alloc] initWithH265: supportsH265 == WebKitH265::On vp9:supportsVP9 == WebKitVP9::On lowLatencyH264:useH264LowLatency == WebKitH264LowLatency::On]);
     return std::make_unique<VideoEncoderFactoryWithSimulcast>(std::move(internalFactory));
 }
 
@@ -119,17 +141,6 @@
     return h264HardwareEncoderAllowed;
 }
 
-static bool h264LowLatencyEncoderEnabled = false;
-void setH264LowLatencyEncoderEnabled(bool enabled)
-{
-    h264LowLatencyEncoderEnabled = enabled;
-}
-
-bool isH264LowLatencyEncoderEnabled()
-{
-    return h264LowLatencyEncoderEnabled;
-}
-
 std::unique_ptr<VideoEncoder> VideoEncoderFactoryWithSimulcast::CreateVideoEncoder(const SdpVideoFormat& format)
 {
     return std::make_unique<EncoderSimulcastProxy>(m_internalEncoderFactory.get(), format);
@@ -305,4 +316,10 @@
     [encoder setBitrate:bitRate framerate:frameRate];
 }
 
+void setLocalEncoderLowLatency(LocalEncoder localEncoder, bool isLowLatencyEnabled)
+{
+    auto *encoder = (__bridge WK_RTCLocalVideoH264H265Encoder *)(localEncoder);
+    [encoder setLowLatency:isLowLatencyEnabled];
 }
+
+}

Modified: trunk/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/WebKitUtilities.h (269292 => 269293)


--- trunk/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/WebKitUtilities.h	2020-11-03 11:50:05 UTC (rev 269292)
+++ trunk/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/WebKitUtilities.h	2020-11-03 12:33:03 UTC (rev 269293)
@@ -27,34 +27,24 @@
 
 #include "api/video/video_frame_buffer.h"
 #include "api/scoped_refptr.h"
-#include "api/video_codecs/video_decoder_factory.h"
-#include "api/video_codecs/video_encoder_factory.h"
-#include "media/engine/encoder_simulcast_proxy.h"
+#include <functional>
 
 using CVPixelBufferRef = struct __CVBuffer*;
-using CVPixelBufferPoolRef = struct __CVPixelBufferPool*;
 
 namespace webrtc {
 
-class VideoDecoderFactory;
-class VideoEncoderFactory;
 class VideoFrame;
 
 enum class WebKitH265 { Off, On };
 enum class WebKitVP9 { Off, On };
 enum class WebKitVP9VTB { Off, On };
+enum class WebKitH264LowLatency { Off, On };
 
-std::unique_ptr<webrtc::VideoEncoderFactory> createWebKitEncoderFactory(WebKitH265, WebKitVP9);
-std::unique_ptr<webrtc::VideoDecoderFactory> createWebKitDecoderFactory(WebKitH265, WebKitVP9, WebKitVP9VTB);
-
 void setApplicationStatus(bool isActive);
 
 void setH264HardwareEncoderAllowed(bool);
 bool isH264HardwareEncoderAllowed();
 
-void setH264LowLatencyEncoderEnabled(bool);
-bool isH264LowLatencyEncoderEnabled();
-
 enum class BufferType { I420, I010 };
 CVPixelBufferRef pixelBufferFromFrame(const VideoFrame&, const std::function<CVPixelBufferRef(size_t, size_t, BufferType)>&);
 rtc::scoped_refptr<webrtc::VideoFrameBuffer> pixelBufferToFrame(CVPixelBufferRef);

Modified: trunk/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/WebKitUtilities.mm (269292 => 269293)


--- trunk/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/WebKitUtilities.mm	2020-11-03 11:50:05 UTC (rev 269292)
+++ trunk/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/WebKitUtilities.mm	2020-11-03 12:33:03 UTC (rev 269293)
@@ -25,6 +25,7 @@
 
 #include "WebKitUtilities.h"
 
+#include "api/video/video_frame.h"
 #include "native/src/objc_frame_buffer.h"
 #include "rtc_base/logging.h"
 #include "third_party/libyuv/include/libyuv/convert_from.h"

Modified: trunk/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/components/video_codec/RTCDefaultVideoEncoderFactory.h (269292 => 269293)


--- trunk/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/components/video_codec/RTCDefaultVideoEncoderFactory.h	2020-11-03 11:50:05 UTC (rev 269292)
+++ trunk/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/components/video_codec/RTCDefaultVideoEncoderFactory.h	2020-11-03 12:33:03 UTC (rev 269293)
@@ -22,7 +22,7 @@
 __attribute__((objc_runtime_name("WK_RTCDefaultVideoEncoderFactory")))
 @interface RTCDefaultVideoEncoderFactory : NSObject <RTCVideoEncoderFactory>
 
-- (id)initWithH265:(bool)supportH265 vp9:(bool)supportsVP9;
+- (id)initWithH265:(bool)supportH265 vp9:(bool)supportsVP9 lowLatencyH264:(bool)useLowLatencyH264;
 + (NSArray<RTCVideoCodecInfo *> *)supportedCodecs;
 + (NSArray<RTCVideoCodecInfo *> *)supportedCodecsWithH265:(bool)supportsH265 vp9:(bool)supportsVP9;
 

Modified: trunk/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/components/video_codec/RTCDefaultVideoEncoderFactory.m (269292 => 269293)


--- trunk/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/components/video_codec/RTCDefaultVideoEncoderFactory.m	2020-11-03 11:50:05 UTC (rev 269292)
+++ trunk/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/components/video_codec/RTCDefaultVideoEncoderFactory.m	2020-11-03 12:33:03 UTC (rev 269293)
@@ -26,14 +26,16 @@
 @implementation RTCDefaultVideoEncoderFactory {
   bool _supportsH265;
   bool _supportsVP9;
+  bool _useLowLatencyH264;
 }
 
-- (id)initWithH265:(bool)supportsH265 vp9:(bool)supportsVP9
+- (id)initWithH265:(bool)supportsH265 vp9:(bool)supportsVP9 lowLatencyH264:(bool)useLowLatencyH264
 {
   self = [super init];
   if (self) {
       _supportsH265 = supportsH265;
       _supportsVP9 = supportsVP9;
+      _useLowLatencyH264 = useLowLatencyH264;
   }
   return self;
 }
@@ -92,7 +94,9 @@
 
 - (id<RTCVideoEncoder>)createEncoder:(RTCVideoCodecInfo *)info {
   if ([info.name isEqualToString:kRTCVideoCodecH264Name]) {
-    return [[RTCVideoEncoderH264 alloc] initWithCodecInfo:info];
+    RTCVideoEncoderH264* encoder = [[RTCVideoEncoderH264 alloc] initWithCodecInfo:info];
+    [encoder setH264LowLatencyEncoderEnabled:_useLowLatencyH264];
+    return encoder;
   } else if ([info.name isEqualToString:kRTCVideoCodecVp8Name]) {
     return [RTCVideoEncoderVP8 vp8Encoder];
 #if defined(RTC_ENABLE_VP9)

Modified: trunk/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/components/video_codec/RTCVideoEncoderH264.h (269292 => 269293)


--- trunk/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/components/video_codec/RTCVideoEncoderH264.h	2020-11-03 11:50:05 UTC (rev 269292)
+++ trunk/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/components/video_codec/RTCVideoEncoderH264.h	2020-11-03 12:33:03 UTC (rev 269293)
@@ -19,5 +19,5 @@
 @interface RTCVideoEncoderH264 : NSObject <RTCVideoEncoder>
 
 - (instancetype)initWithCodecInfo:(RTCVideoCodecInfo *)codecInfo;
-
+- (void)setH264LowLatencyEncoderEnabled:(bool)enabled;
 @end

Modified: trunk/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/components/video_codec/RTCVideoEncoderH264.mm (269292 => 269293)


--- trunk/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/components/video_codec/RTCVideoEncoderH264.mm	2020-11-03 11:50:05 UTC (rev 269292)
+++ trunk/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/components/video_codec/RTCVideoEncoderH264.mm	2020-11-03 12:33:03 UTC (rev 269293)
@@ -348,6 +348,7 @@
   std::vector<uint8_t> _frameScaleBuffer;
   bool _disableEncoding;
   bool _isKeyFrameRequired;
+  bool _isH264LowLatencyEncoderEnabled;
 }
 
 // .5 is set as a mininum to prevent overcompensating for large temporary
@@ -375,10 +376,16 @@
     RTC_CHECK([codecInfo.name isEqualToString:kRTCVideoCodecH264Name]);
   }
   _isKeyFrameRequired = false;
+  _isH264LowLatencyEncoderEnabled = true;
 
   return self;
 }
 
+- (void)setH264LowLatencyEncoderEnabled:(bool)enabled
+{
+    _isH264LowLatencyEncoderEnabled = enabled;
+}
+
 - (void)dealloc {
   [self destroyCompressionSession];
 }
@@ -696,7 +703,7 @@
 #endif
   }
 #elif HAVE_VTB_REQUIREDLOWLATENCY
-  if (webrtc::isH264LowLatencyEncoderEnabled() && _useVCP)
+  if (_isH264LowLatencyEncoderEnabled && _useVCP)
     CFDictionarySetValue(encoderSpecs, kVTVideoEncoderSpecification_RequiredLowLatency, kCFBooleanTrue);
 #endif
 

Modified: trunk/Source/WebCore/ChangeLog (269292 => 269293)


--- trunk/Source/WebCore/ChangeLog	2020-11-03 11:50:05 UTC (rev 269292)
+++ trunk/Source/WebCore/ChangeLog	2020-11-03 12:33:03 UTC (rev 269293)
@@ -1,3 +1,16 @@
+2020-11-03  Youenn Fablet  <[email protected]>
+
+        Allow low latency H264 encoder in GPUProcess
+        https://bugs.webkit.org/show_bug.cgi?id=218442
+
+        Reviewed by Eric Carlson.
+
+        Pass useLowLatency boolean when creating encoder factory.
+        Manually tested.
+
+        * platform/mediastream/libwebrtc/LibWebRTCProviderCocoa.cpp:
+        (WebCore::LibWebRTCProviderCocoa::createEncoderFactory):
+
 2020-11-02  Xabier Rodriguez Calvar  <[email protected]>
 
         [GStreamer] Fix GStreamerCommon.cpp debug category

Modified: trunk/Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCProviderCocoa.cpp (269292 => 269293)


--- trunk/Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCProviderCocoa.cpp	2020-11-03 11:50:05 UTC (rev 269292)
+++ trunk/Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCProviderCocoa.cpp	2020-11-03 12:33:03 UTC (rev 269293)
@@ -31,7 +31,8 @@
 #include "RuntimeEnabledFeatures.h"
 
 ALLOW_UNUSED_PARAMETERS_BEGIN
-#include <webrtc/sdk/WebKit/WebKitUtilities.h>
+#include <webrtc/sdk/WebKit/WebKitDecoder.h>
+#include <webrtc/sdk/WebKit/WebKitEncoder.h>
 ALLOW_UNUSED_PARAMETERS_END
 #include <webrtc/sdk/WebKit/WebKitVP9Decoder.h>
 #include <wtf/MainThread.h>
@@ -73,8 +74,7 @@
     if (!webRTCAvailable())
         return nullptr;
 
-    webrtc::setH264LowLatencyEncoderEnabled(RuntimeEnabledFeatures::sharedFeatures().webRTCH264LowLatencyEncoderEnabled());
-    return webrtc::createWebKitEncoderFactory(isSupportingH265() ? webrtc::WebKitH265::On : webrtc::WebKitH265::Off, isSupportingVP9() ? webrtc::WebKitVP9::On : webrtc::WebKitVP9::Off);
+    return webrtc::createWebKitEncoderFactory(isSupportingH265() ? webrtc::WebKitH265::On : webrtc::WebKitH265::Off, isSupportingVP9() ? webrtc::WebKitVP9::On : webrtc::WebKitVP9::Off, RuntimeEnabledFeatures::sharedFeatures().webRTCH264LowLatencyEncoderEnabled() ? webrtc::WebKitH264LowLatency::On : webrtc::WebKitH264LowLatency::Off);
 }
 
 void LibWebRTCProviderCocoa::setActive(bool value)

Modified: trunk/Source/WebKit/ChangeLog (269292 => 269293)


--- trunk/Source/WebKit/ChangeLog	2020-11-03 11:50:05 UTC (rev 269292)
+++ trunk/Source/WebKit/ChangeLog	2020-11-03 12:33:03 UTC (rev 269293)
@@ -1,3 +1,20 @@
+2020-11-03  Youenn Fablet  <[email protected]>
+
+        Allow low latency H264 encoder in GPUProcess
+        https://bugs.webkit.org/show_bug.cgi?id=218442
+
+        Reviewed by Eric Carlson.
+
+        Pass useLowLatency boolean from WebProcess to GPUProcess.
+
+        * GPUProcess/webrtc/LibWebRTCCodecsProxy.h:
+        * GPUProcess/webrtc/LibWebRTCCodecsProxy.messages.in:
+        * GPUProcess/webrtc/LibWebRTCCodecsProxy.mm:
+        (WebKit::LibWebRTCCodecsProxy::createEncoder):
+        * WebProcess/GPU/webrtc/LibWebRTCCodecs.cpp:
+        (WebKit::LibWebRTCCodecs::completedDecoding):
+        (WebKit::LibWebRTCCodecs::createEncoder):
+
 2020-11-03  Chris Lord  <[email protected]>
 
         [GTK] Zooming causes page to scroll to top

Modified: trunk/Source/WebKit/GPUProcess/webrtc/LibWebRTCCodecsProxy.h (269292 => 269293)


--- trunk/Source/WebKit/GPUProcess/webrtc/LibWebRTCCodecsProxy.h	2020-11-03 11:50:05 UTC (rev 269292)
+++ trunk/Source/WebKit/GPUProcess/webrtc/LibWebRTCCodecsProxy.h	2020-11-03 12:33:03 UTC (rev 269293)
@@ -72,7 +72,7 @@
     void releaseDecoder(RTCDecoderIdentifier);
     void decodeFrame(RTCDecoderIdentifier, uint32_t timeStamp, const IPC::DataReference&);
 
-    void createEncoder(RTCEncoderIdentifier, const String&, const Vector<std::pair<String, String>>&);
+    void createEncoder(RTCEncoderIdentifier, const String&, const Vector<std::pair<String, String>>&, bool useLowLatency);
     void releaseEncoder(RTCEncoderIdentifier);
     void initializeEncoder(RTCEncoderIdentifier, uint16_t width, uint16_t height, unsigned startBitrate, unsigned maxBitrate, unsigned minBitrate, uint32_t maxFramerate);
     void encodeFrame(RTCEncoderIdentifier, WebCore::RemoteVideoSample&&, bool shouldEncodeAsKeyFrame);

Modified: trunk/Source/WebKit/GPUProcess/webrtc/LibWebRTCCodecsProxy.messages.in (269292 => 269293)


--- trunk/Source/WebKit/GPUProcess/webrtc/LibWebRTCCodecsProxy.messages.in	2020-11-03 11:50:05 UTC (rev 269292)
+++ trunk/Source/WebKit/GPUProcess/webrtc/LibWebRTCCodecsProxy.messages.in	2020-11-03 12:33:03 UTC (rev 269293)
@@ -29,7 +29,7 @@
     ReleaseDecoder(WebKit::RTCDecoderIdentifier id)
     DecodeFrame(WebKit::RTCDecoderIdentifier id, uint32_t timeStamp, IPC::DataReference data)
 
-    CreateEncoder(WebKit::RTCEncoderIdentifier id, String formatName, Vector<std::pair<String, String>> parameters);
+    CreateEncoder(WebKit::RTCEncoderIdentifier id, String formatName, Vector<std::pair<String, String>> parameters, bool useLowLatency);
     ReleaseEncoder(WebKit::RTCEncoderIdentifier id)
     InitializeEncoder(WebKit::RTCEncoderIdentifier id, uint16_t width, uint16_t height, unsigned startBitrate, unsigned maxBitrate, unsigned minBitrate, uint32_t maxFramerate)
     EncodeFrame(WebKit::RTCEncoderIdentifier id, WebCore::RemoteVideoSample sample, bool shouldEncodeAsKeyFrame)

Modified: trunk/Source/WebKit/GPUProcess/webrtc/LibWebRTCCodecsProxy.mm (269292 => 269293)


--- trunk/Source/WebKit/GPUProcess/webrtc/LibWebRTCCodecsProxy.mm	2020-11-03 11:50:05 UTC (rev 269292)
+++ trunk/Source/WebKit/GPUProcess/webrtc/LibWebRTCCodecsProxy.mm	2020-11-03 12:33:03 UTC (rev 269293)
@@ -106,7 +106,7 @@
         m_gpuConnectionToWebProcess.connection().send(Messages::LibWebRTCCodecs::FailedDecoding { identifier }, 0);
 }
 
-void LibWebRTCCodecsProxy::createEncoder(RTCEncoderIdentifier identifier, const String& formatName, const Vector<std::pair<String, String>>& parameters)
+void LibWebRTCCodecsProxy::createEncoder(RTCEncoderIdentifier identifier, const String& formatName, const Vector<std::pair<String, String>>& parameters, bool useLowLatency)
 {
     ASSERT(!m_encoders.contains(identifier));
 
@@ -113,11 +113,13 @@
     std::map<std::string, std::string> rtcParameters;
     for (auto& parameter : parameters)
         rtcParameters.emplace(parameter.first.utf8().data(), parameter.second.utf8().data());
-    
-    m_encoders.add(identifier, webrtc::createLocalEncoder(webrtc::SdpVideoFormat { formatName.utf8().data(), rtcParameters }, ^(const uint8_t* buffer, size_t size, const webrtc::WebKitEncodedFrameInfo& info, webrtc::RTPFragmentationHeader* header) {
+
+    auto* encoder = webrtc::createLocalEncoder(webrtc::SdpVideoFormat { formatName.utf8().data(), rtcParameters }, ^(const uint8_t* buffer, size_t size, const webrtc::WebKitEncodedFrameInfo& info, webrtc::RTPFragmentationHeader* header) {
         
         m_gpuConnectionToWebProcess.connection().send(Messages::LibWebRTCCodecs::CompletedEncoding { identifier, IPC::DataReference { buffer, size }, info, webrtc::WebKitRTPFragmentationHeader { header } }, 0);
-    }));
+    });
+    webrtc::setLocalEncoderLowLatency(encoder, useLowLatency);
+    m_encoders.add(identifier, encoder);
 }
 
 void LibWebRTCCodecsProxy::releaseEncoder(RTCEncoderIdentifier identifier)

Modified: trunk/Source/WebKit/WebProcess/GPU/webrtc/LibWebRTCCodecs.cpp (269292 => 269293)


--- trunk/Source/WebKit/WebProcess/GPU/webrtc/LibWebRTCCodecs.cpp	2020-11-03 11:50:05 UTC (rev 269292)
+++ trunk/Source/WebKit/WebProcess/GPU/webrtc/LibWebRTCCodecs.cpp	2020-11-03 12:33:03 UTC (rev 269293)
@@ -36,9 +36,9 @@
 #include <WebCore/LibWebRTCMacros.h>
 #include <WebCore/RealtimeVideoUtilities.h>
 #include <WebCore/RemoteVideoSample.h>
+#include <WebCore/RuntimeEnabledFeatures.h>
 #include <webrtc/sdk/WebKit/WebKitDecoder.h>
 #include <webrtc/sdk/WebKit/WebKitEncoder.h>
-#include <webrtc/sdk/WebKit/WebKitUtilities.h>
 #include <wtf/MainThread.h>
 
 #include <pal/cf/CoreMediaSoftLink.h>
@@ -259,7 +259,7 @@
         return;
     }
 
-    webrtc::RemoteVideoDecoder::decodeComplete(decoder->decodedImageCallback, timeStamp, pixelBuffer.get(), remoteSample.time().toDouble());
+    webrtc::videoDecoderTaskComplete(decoder->decodedImageCallback, timeStamp, pixelBuffer.get(), remoteSample.time().toDouble());
 }
 
 static inline String formatNameFromCodecType(LibWebRTCCodecs::Type type)
@@ -286,7 +286,7 @@
         auto encoderIdentifier = encoder->identifier;
         ASSERT(!m_encoders.contains(encoderIdentifier));
 
-        WebProcess::singleton().ensureGPUProcessConnection().connection().send(Messages::LibWebRTCCodecsProxy::CreateEncoder { encoderIdentifier, formatNameFromCodecType(type), parameters }, 0);
+        WebProcess::singleton().ensureGPUProcessConnection().connection().send(Messages::LibWebRTCCodecsProxy::CreateEncoder { encoderIdentifier, formatNameFromCodecType(type), parameters, RuntimeEnabledFeatures::sharedFeatures().webRTCH264LowLatencyEncoderEnabled() }, 0);
         m_encoders.add(encoderIdentifier, WTFMove(encoder));
     });
     return result;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to