Diff
Modified: trunk/Source/WebCore/ChangeLog (291094 => 291095)
--- trunk/Source/WebCore/ChangeLog 2022-03-10 09:00:23 UTC (rev 291094)
+++ trunk/Source/WebCore/ChangeLog 2022-03-10 09:08:01 UTC (rev 291095)
@@ -1,3 +1,18 @@
+2022-03-10 Youenn Fablet <[email protected]>
+
+ Remove RemoteVideoSample
+ https://bugs.webkit.org/show_bug.cgi?id=237592
+
+ Reviewed by Eric Carlson.
+
+ No change of behavior.
+
+ * Headers.cmake:
+ * Sources.txt:
+ * WebCore.xcodeproj/project.pbxproj:
+ * platform/graphics/RemoteVideoSample.cpp: Removed.
+ * platform/graphics/RemoteVideoSample.h: Removed.
+
2022-03-10 Carlos Garcia Campos <[email protected]>
[GTK][WPE] Add initial support for PDF documents using PDF.js
Modified: trunk/Source/WebCore/Headers.cmake (291094 => 291095)
--- trunk/Source/WebCore/Headers.cmake 2022-03-10 09:00:23 UTC (rev 291094)
+++ trunk/Source/WebCore/Headers.cmake 2022-03-10 09:08:01 UTC (rev 291095)
@@ -1564,7 +1564,6 @@
platform/graphics/PlatformVideoTrackConfiguration.h
platform/graphics/PlatformVideoTransferCharacteristics.h
platform/graphics/Region.h
- platform/graphics/RemoteVideoSample.h
platform/graphics/RenderingResourceIdentifier.h
platform/graphics/RenderingMode.h
platform/graphics/RoundedRect.h
Modified: trunk/Source/WebCore/Sources.txt (291094 => 291095)
--- trunk/Source/WebCore/Sources.txt 2022-03-10 09:00:23 UTC (rev 291094)
+++ trunk/Source/WebCore/Sources.txt 2022-03-10 09:08:01 UTC (rev 291095)
@@ -2081,7 +2081,6 @@
platform/graphics/PixelFormat.cpp
platform/graphics/PlatformTimeRanges.cpp
platform/graphics/Region.cpp
-platform/graphics/RemoteVideoSample.cpp
platform/graphics/RoundedRect.cpp
platform/graphics/ShadowBlur.cpp
platform/graphics/SourceBufferPrivate.cpp
Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (291094 => 291095)
--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj 2022-03-10 09:00:23 UTC (rev 291094)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj 2022-03-10 09:08:01 UTC (rev 291095)
@@ -120,7 +120,6 @@
073794FE19F5864E00E5A045 /* RTCNotifiersMock.h in Headers */ = {isa = PBXBuildFile; fileRef = 073794F819F5864E00E5A045 /* RTCNotifiersMock.h */; };
0738E5EC2499839000DA101C /* AVOutputDeviceMenuControllerTargetPicker.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0738E5EA249968AD00DA101C /* AVOutputDeviceMenuControllerTargetPicker.mm */; };
073955BB27AB277F009A08D2 /* ScreenCaptureKitSharingSessionManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 07035D3227A9B60B00FB03E4 /* ScreenCaptureKitSharingSessionManager.h */; settings = {ATTRIBUTES = (Private, ); }; };
- 073A15542177A42600EA08F2 /* RemoteVideoSample.h in Headers */ = {isa = PBXBuildFile; fileRef = 073A15532177A39A00EA08F2 /* RemoteVideoSample.h */; settings = {ATTRIBUTES = (Private, ); }; };
073B87671E4385AC0071C0EC /* AudioSampleBufferList.h in Headers */ = {isa = PBXBuildFile; fileRef = 073B87631E43859D0071C0EC /* AudioSampleBufferList.h */; settings = {ATTRIBUTES = (Private, ); }; };
073B87691E4385AC0071C0EC /* AudioSampleDataSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 073B87651E43859D0071C0EC /* AudioSampleDataSource.h */; settings = {ATTRIBUTES = (Private, ); }; };
0740B14425DE31F800E38DBA /* MockMediaSessionCoordinator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0740B14325DE31A900E38DBA /* MockMediaSessionCoordinator.cpp */; };
@@ -6085,8 +6084,6 @@
0738E5E8249968AC00DA101C /* AVOutputDeviceMenuControllerTargetPicker.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AVOutputDeviceMenuControllerTargetPicker.h; sourceTree = "<group>"; };
0738E5EA249968AD00DA101C /* AVOutputDeviceMenuControllerTargetPicker.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = AVOutputDeviceMenuControllerTargetPicker.mm; sourceTree = "<group>"; };
0738E5EB2499690900DA101C /* AVPlaybackTargetPicker.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AVPlaybackTargetPicker.h; sourceTree = "<group>"; };
- 073A15512177A39800EA08F2 /* RemoteVideoSample.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = RemoteVideoSample.cpp; sourceTree = "<group>"; };
- 073A15532177A39A00EA08F2 /* RemoteVideoSample.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RemoteVideoSample.h; sourceTree = "<group>"; };
073B87561E40DCE50071C0EC /* AudioStreamDescription.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AudioStreamDescription.h; sourceTree = "<group>"; };
073B87571E40DCFD0071C0EC /* CAAudioStreamDescription.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CAAudioStreamDescription.cpp; sourceTree = "<group>"; };
073B87581E40DCFD0071C0EC /* CAAudioStreamDescription.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CAAudioStreamDescription.h; sourceTree = "<group>"; };
@@ -29163,8 +29160,6 @@
CD1F9AFC26FD38CA00617EB6 /* PlatformVideoTransferCharacteristics.h */,
BCAB417F13E356E800D8AAF3 /* Region.cpp */,
BCAB418013E356E800D8AAF3 /* Region.h */,
- 073A15512177A39800EA08F2 /* RemoteVideoSample.cpp */,
- 073A15532177A39A00EA08F2 /* RemoteVideoSample.h */,
7299BC6623D686C600CC6883 /* RenderingMode.h */,
729D052E25313E2600422098 /* RenderingResourceIdentifier.h */,
A73F95FC12C97BFE0031AAF9 /* RoundedRect.cpp */,
@@ -36888,7 +36883,6 @@
46B9519A207D635400A7D2DD /* RemoteFrame.h in Headers */,
CDC312E922FCD7C0001204EC /* RemotePlayback.h in Headers */,
CDC312EB22FCD7C9001204EC /* RemotePlaybackAvailabilityCallback.h in Headers */,
- 073A15542177A42600EA08F2 /* RemoteVideoSample.h in Headers */,
D06C0D8F0CFD11460065F43F /* RemoveFormatCommand.h in Headers */,
93309E05099E64920056E581 /* RemoveNodeCommand.h in Headers */,
93309E07099E64920056E581 /* RemoveNodePreservingChildrenCommand.h in Headers */,
Deleted: trunk/Source/WebCore/platform/graphics/RemoteVideoSample.cpp (291094 => 291095)
--- trunk/Source/WebCore/platform/graphics/RemoteVideoSample.cpp 2022-03-10 09:00:23 UTC (rev 291094)
+++ trunk/Source/WebCore/platform/graphics/RemoteVideoSample.cpp 2022-03-10 09:08:01 UTC (rev 291095)
@@ -1,156 +0,0 @@
-/*
- * Copyright (C) 2018 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "RemoteVideoSample.h"
-
-#if ENABLE(MEDIA_STREAM) && PLATFORM(COCOA)
-
-#include "GraphicsContextCG.h"
-#include "IOSurface.h"
-#include "Logging.h"
-#include "MediaSampleAVFObjC.h"
-#include "VideoFrameCV.h"
-
-#if USE(ACCELERATE)
-#include <Accelerate/Accelerate.h>
-#endif
-
-#include <pal/cf/CoreMediaSoftLink.h>
-#include "CoreVideoSoftLink.h"
-
-namespace WebCore {
-
-static inline std::unique_ptr<IOSurface> transferBGRAPixelBufferToIOSurface(CVPixelBufferRef pixelBuffer)
-{
-#if USE(ACCELERATE)
- ASSERT(CVPixelBufferGetPixelFormatType(pixelBuffer) == kCVPixelFormatType_32BGRA);
-
- auto result = CVPixelBufferLockBaseAddress(pixelBuffer, kCVPixelBufferLock_ReadOnly);
- ASSERT(result == kCVReturnSuccess);
- if (result != kCVReturnSuccess) {
- RELEASE_LOG_ERROR(Media, "transferBGRAPixelBufferToIOSurface CVPixelBufferLockBaseAddress() returned error code %d", result);
- return nullptr;
- }
-
- IntSize size { static_cast<int>(CVPixelBufferGetWidth(pixelBuffer)), static_cast<int>(CVPixelBufferGetHeight(pixelBuffer)) };
- auto ioSurface = IOSurface::create(size, DestinationColorSpace::SRGB(), IOSurface::Format::BGRA);
-
- IOSurface::Locker lock(*ioSurface);
- vImage_Buffer src;
- src.width = size.width();
- src.height = size.height();
- src.rowBytes = CVPixelBufferGetBytesPerRow(pixelBuffer);
- src.data = ""
-
- vImage_Buffer dest;
- dest.width = size.width();
- dest.height = size.height();
- dest.rowBytes = ioSurface->bytesPerRow();
- dest.data = ""
-
- vImageUnpremultiplyData_BGRA8888(&src, &dest, kvImageNoFlags);
-
- result = CVPixelBufferUnlockBaseAddress(pixelBuffer, kCVPixelBufferLock_ReadOnly);
- ASSERT(result == kCVReturnSuccess);
- if (result != kCVReturnSuccess) {
- RELEASE_LOG_ERROR(Media, "transferBGRAPixelBufferToIOSurface CVPixelBufferUnlockBaseAddress() returned error code %d", result);
- return nullptr;
- }
- return ioSurface;
-#else
- RELEASE_LOG_ERROR(Media, "transferBGRAPixelBufferToIOSurface cannot convert to IOSurface");
- return nullptr;
-#endif
-}
-
-std::unique_ptr<RemoteVideoSample> RemoteVideoSample::create(MediaSample& sample, ShouldCheckForIOSurface shouldCheckForIOSurface)
-{
- RetainPtr<CVPixelBufferRef> imageBuffer;
- if (is<MediaSampleAVFObjC>(sample))
- imageBuffer = downcast<MediaSampleAVFObjC>(sample).pixelBuffer();
- else if (is<VideoFrameCV>(sample))
- imageBuffer = downcast<VideoFrameCV>(sample).pixelBuffer();
- else {
- RELEASE_LOG_ERROR(Media, "RemoteVideoSample::create: cannot obtain CVPixelBuffer from sample. Unknown sample type.");
- return nullptr;
- }
- if (!imageBuffer) {
- RELEASE_LOG_ERROR(Media, "RemoteVideoSample::create: cannot obtain CVPixelBuffer from sample. No buffer.");
- return nullptr;
- }
- std::unique_ptr<IOSurface> ioSurface;
- auto surface = CVPixelBufferGetIOSurface(imageBuffer.get());
- if (!surface && shouldCheckForIOSurface == ShouldCheckForIOSurface::Yes) {
- // Special case for canvas data that is RGBA, not IOSurface backed.
- auto pixelFormatType = CVPixelBufferGetPixelFormatType(imageBuffer.get());
- if (pixelFormatType != kCVPixelFormatType_32BGRA) {
- RELEASE_LOG_ERROR(Media, "RemoteVideoSample::create does not support non IOSurface backed samples that are not BGRA");
- return nullptr;
- }
-
- ioSurface = transferBGRAPixelBufferToIOSurface(imageBuffer.get());
- if (!ioSurface)
- return nullptr;
-
- surface = ioSurface->surface();
- }
-
- return std::unique_ptr<RemoteVideoSample>(new RemoteVideoSample(surface, WTFMove(imageBuffer), DestinationColorSpace::SRGB(), sample.presentationTime(), sample.videoRotation(), sample.videoMirrored()));
-}
-
-std::unique_ptr<RemoteVideoSample> RemoteVideoSample::create(RetainPtr<CVPixelBufferRef>&& imageBuffer, MediaTime&& presentationTime, MediaSample::VideoRotation rotation, ShouldCheckForIOSurface shouldCheckForIOSurface)
-{
- auto surface = CVPixelBufferGetIOSurface(imageBuffer.get());
- if (!surface && shouldCheckForIOSurface == ShouldCheckForIOSurface::Yes) {
- RELEASE_LOG_ERROR(Media, "RemoteVideoSample::create: CVPixelBufferGetIOSurface returned nullptr");
- return nullptr;
- }
-
- return std::unique_ptr<RemoteVideoSample>(new RemoteVideoSample(surface, WTFMove(imageBuffer), DestinationColorSpace::SRGB(), WTFMove(presentationTime), rotation, false));
-}
-
-RemoteVideoSample::RemoteVideoSample(IOSurfaceRef surface, RetainPtr<CVPixelBufferRef>&& imageBuffer, const DestinationColorSpace& colorSpace, MediaTime&& time, MediaSample::VideoRotation rotation, bool mirrored)
- : m_ioSurface(WebCore::IOSurface::createFromSurface(surface, colorSpace))
- , m_imageBuffer(WTFMove(imageBuffer))
- , m_rotation(rotation)
- , m_time(WTFMove(time))
- , m_videoFormat(IOSurfaceGetPixelFormat(surface))
- , m_size(IntSize(IOSurfaceGetWidth(surface), IOSurfaceGetHeight(surface)))
- , m_mirrored(mirrored)
-{
-}
-
-IOSurfaceRef RemoteVideoSample::surface() const
-{
- if (!m_ioSurface && m_sendRight)
- const_cast<RemoteVideoSample*>(this)->m_ioSurface = WebCore::IOSurface::createFromSendRight(WTFMove(const_cast<RemoteVideoSample*>(this)->m_sendRight), DestinationColorSpace::SRGB());
-
- return m_ioSurface ? m_ioSurface->surface() : nullptr;
-}
-
-}
-
-#endif // ENABLE(MEDIA_STREAM) && PLATFORM(COCOA)
Deleted: trunk/Source/WebCore/platform/graphics/RemoteVideoSample.h (291094 => 291095)
--- trunk/Source/WebCore/platform/graphics/RemoteVideoSample.h 2022-03-10 09:00:23 UTC (rev 291094)
+++ trunk/Source/WebCore/platform/graphics/RemoteVideoSample.h 2022-03-10 09:08:01 UTC (rev 291095)
@@ -1,134 +0,0 @@
-/*
- * Copyright (C) 2018 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#pragma once
-
-#if ENABLE(MEDIA_STREAM) && PLATFORM(COCOA)
-
-#include "IOSurface.h"
-#include "MediaSample.h"
-#include "RemoteVideoSample.h"
-#include <wtf/MachSendRight.h>
-#include <wtf/MediaTime.h>
-
-typedef struct __CVBuffer* CVPixelBufferRef;
-
-namespace WebCore {
-
-class ProcessIdentity;
-
-class RemoteVideoSample {
-public:
- RemoteVideoSample() = default;
- RemoteVideoSample(RemoteVideoSample&&) = default;
- RemoteVideoSample& operator=(RemoteVideoSample&&) = default;
- ~RemoteVideoSample() = default;
-
- enum class ShouldCheckForIOSurface { No, Yes };
- WEBCORE_EXPORT static std::unique_ptr<RemoteVideoSample> create(MediaSample&, ShouldCheckForIOSurface = ShouldCheckForIOSurface::Yes);
- WEBCORE_EXPORT static std::unique_ptr<RemoteVideoSample> create(RetainPtr<CVPixelBufferRef>&&, MediaTime&& presentationTime, MediaSample::VideoRotation = MediaSample::VideoRotation::None, ShouldCheckForIOSurface = ShouldCheckForIOSurface::Yes);
-
- WEBCORE_EXPORT IOSurfaceRef surface() const;
- CVPixelBufferRef imageBuffer() const { return m_imageBuffer.get(); }
-
- void setOwnershipIdentity(const ProcessIdentity&);
- void clearIOSurface() { m_ioSurface = nullptr; }
-
- const MediaTime& time() const { return m_time; }
- uint32_t videoFormat() const { return m_videoFormat; }
- IntSize size() const { return m_size; }
- MediaSample::VideoRotation rotation() const { return m_rotation; }
- bool mirrored() const { return m_mirrored; }
-
- template<class Encoder> void encode(Encoder& encoder) const
- {
- if (m_ioSurface)
- encoder << m_ioSurface->createSendRight();
- else
- encoder << MachSendRight();
- encoder << m_rotation;
- encoder << m_time;
- encoder << m_videoFormat;
- encoder << m_size;
- encoder << m_mirrored;
- }
-
- template<class Decoder> static WARN_UNUSED_RETURN bool decode(Decoder& decoder, RemoteVideoSample& sample)
- {
- MachSendRight sendRight;
- if (!decoder.decode(sendRight))
- return false;
- sample.m_sendRight = WTFMove(sendRight);
-
- MediaSample::VideoRotation rotation;
- if (!decoder.decode(rotation))
- return false;
- sample.m_rotation = rotation;
-
- MediaTime time;
- if (!decoder.decode(time))
- return false;
- sample.m_time = WTFMove(time);
-
- uint32_t format;
- if (!decoder.decode(format))
- return false;
- sample.m_videoFormat = format;
-
- IntSize size;
- if (!decoder.decode(size))
- return false;
- sample.m_size = WTFMove(size);
-
- bool mirrored;
- if (!decoder.decode(mirrored))
- return false;
- sample.m_mirrored = mirrored;
-
- return true;
- }
-
-private:
- RemoteVideoSample(IOSurfaceRef, RetainPtr<CVPixelBufferRef>&&, const DestinationColorSpace&, MediaTime&&, MediaSample::VideoRotation, bool);
-
- std::unique_ptr<WebCore::IOSurface> m_ioSurface;
- RetainPtr<CVPixelBufferRef> m_imageBuffer;
- MachSendRight m_sendRight;
- MediaSample::VideoRotation m_rotation { MediaSample::VideoRotation::None };
- MediaTime m_time;
- uint32_t m_videoFormat { 0 };
- IntSize m_size;
- bool m_mirrored { false };
-};
-
-inline void RemoteVideoSample::setOwnershipIdentity(const ProcessIdentity& resourceOwner)
-{
- if (m_ioSurface)
- m_ioSurface->setOwnershipIdentity(resourceOwner);
-}
-
-}
-
-#endif // ENABLE(MEDIA_STREAM)
Modified: trunk/Source/WebKit/ChangeLog (291094 => 291095)
--- trunk/Source/WebKit/ChangeLog 2022-03-10 09:00:23 UTC (rev 291094)
+++ trunk/Source/WebKit/ChangeLog 2022-03-10 09:08:01 UTC (rev 291095)
@@ -1,3 +1,31 @@
+2022-03-10 Youenn Fablet <[email protected]>
+
+ Remove RemoteVideoSample
+ https://bugs.webkit.org/show_bug.cgi?id=237592
+
+ Reviewed by Eric Carlson.
+
+ Send RemoteVideoSample data directly as IPC message parameters instead of inside RemoteVideoSample.
+ Fix timeStampNs by sending them back to WebProcess and divide them by 1000 to put them as milliseconds, as expected by libwebrtc backend.
+
+ * GPUProcess/webrtc/LibWebRTCCodecsProxy.h:
+ * GPUProcess/webrtc/LibWebRTCCodecsProxy.mm:
+ (WebKit::LibWebRTCCodecsProxy::createDecoderCallback):
+ * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp:
+ * WebProcess/GPU/webrtc/LibWebRTCCodecs.cpp:
+ (WebKit::LibWebRTCCodecs::completedDecodingCV):
+ * WebProcess/GPU/webrtc/LibWebRTCCodecs.h:
+ * WebProcess/GPU/webrtc/LibWebRTCCodecs.messages.in:
+ * WebProcess/cocoa/RemoteCaptureSampleManager.cpp:
+ (WebKit::RemoteCaptureSampleManager::videoFrameAvailable):
+ (WebKit::RemoteCaptureSampleManager::videoFrameAvailableCV):
+ (WebKit::RemoteCaptureSampleManager::videoSampleAvailable): Deleted.
+ (WebKit::RemoteCaptureSampleManager::videoSampleAvailableCV): Deleted.
+ (WebKit::RemoteCaptureSampleManager::RemoteVideo::videoSampleAvailable): Deleted.
+ * WebProcess/cocoa/RemoteCaptureSampleManager.h:
+ * WebProcess/cocoa/RemoteCaptureSampleManager.messages.in:
+ * WebProcess/cocoa/RemoteRealtimeVideoSource.cpp:
+
2022-03-10 Carlos Garcia Campos <[email protected]>
[GTK][WPE] Add initial support for PDF documents using PDF.js
Modified: trunk/Source/WebKit/GPUProcess/webrtc/LibWebRTCCodecsProxy.h (291094 => 291095)
--- trunk/Source/WebKit/GPUProcess/webrtc/LibWebRTCCodecsProxy.h 2022-03-10 09:00:23 UTC (rev 291094)
+++ trunk/Source/WebKit/GPUProcess/webrtc/LibWebRTCCodecsProxy.h 2022-03-10 09:08:01 UTC (rev 291095)
@@ -44,10 +44,6 @@
class Semaphore;
}
-namespace WebCore {
-class RemoteVideoSample;
-}
-
namespace webrtc {
using LocalDecoder = void*;
using LocalEncoder = void*;
Modified: trunk/Source/WebKit/GPUProcess/webrtc/LibWebRTCCodecsProxy.mm (291094 => 291095)
--- trunk/Source/WebKit/GPUProcess/webrtc/LibWebRTCCodecsProxy.mm 2022-03-10 09:00:23 UTC (rev 291094)
+++ trunk/Source/WebKit/GPUProcess/webrtc/LibWebRTCCodecsProxy.mm 2022-03-10 09:08:01 UTC (rev 291095)
@@ -40,7 +40,6 @@
#import <WebCore/CVUtilities.h>
#import <WebCore/LibWebRTCProvider.h>
#import <WebCore/MediaSampleAVFObjC.h>
-#import <WebCore/RemoteVideoSample.h>
#import <webrtc/sdk/WebKit/WebKitDecoder.h>
#import <webrtc/sdk/WebKit/WebKitEncoder.h>
#import <wtf/BlockPtr.h>
@@ -105,13 +104,10 @@
sample->setOwnershipIdentity(resourceOwner);
if (videoFrameObjectHeap) {
auto properties = videoFrameObjectHeap->add(sample.releaseNonNull());
- connection->send(Messages::LibWebRTCCodecs::CompletedDecoding { identifier, timeStamp, WTFMove(properties) }, 0);
+ connection->send(Messages::LibWebRTCCodecs::CompletedDecoding { identifier, timeStamp, timeStampNs, WTFMove(properties) }, 0);
return;
}
- auto remoteSample = WebCore::RemoteVideoSample::create(*sample);
- if (!remoteSample)
- return;
- connection->send(Messages::LibWebRTCCodecs::CompletedDecodingCV { identifier, timeStamp, *remoteSample }, 0);
+ connection->send(Messages::LibWebRTCCodecs::CompletedDecodingCV { identifier, timeStamp, timeStampNs, pixelBuffer }, 0);
};
}
Modified: trunk/Source/WebKit/UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp (291094 => 291095)
--- trunk/Source/WebKit/UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp 2022-03-10 09:00:23 UTC (rev 291094)
+++ trunk/Source/WebKit/UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp 2022-03-10 09:08:01 UTC (rev 291095)
@@ -44,7 +44,6 @@
#include <WebCore/MediaSampleAVFObjC.h>
#include <WebCore/RealtimeMediaSourceCenter.h>
#include <WebCore/RealtimeVideoSource.h>
-#include <WebCore/RemoteVideoSample.h>
#include <WebCore/WebAudioBufferList.h>
#include <wtf/UniqueRef.h>
@@ -191,22 +190,19 @@
return &sample;
}
- void videoSampleAvailable(MediaSample& sample, VideoSampleMetadata metadata) final
+ void videoSampleAvailable(MediaSample& frame, VideoSampleMetadata metadata) final
{
- auto videoSample = rotateVideoFrameIfNeeded(sample);
- if (!videoSample)
+ auto videoFrame = rotateVideoFrameIfNeeded(frame);
+ if (!videoFrame)
return;
if (m_resourceOwner)
- videoSample->setOwnershipIdentity(m_resourceOwner);
- if (m_videoFrameObjectHeap) {
- auto properties = m_videoFrameObjectHeap->add(sample);
- m_connection->send(Messages::RemoteCaptureSampleManager::VideoSampleAvailable(m_id, properties, metadata), 0);
+ videoFrame->setOwnershipIdentity(m_resourceOwner);
+ if (!m_videoFrameObjectHeap) {
+ m_connection->send(Messages::RemoteCaptureSampleManager::VideoFrameAvailableCV(m_id, videoFrame->pixelBuffer(), videoFrame->videoRotation(), videoFrame->videoMirrored(), videoFrame->presentationTime(), metadata), 0);
return;
}
- auto remoteSample = RemoteVideoSample::create(*videoSample);
- if (!remoteSample)
- return;
- m_connection->send(Messages::RemoteCaptureSampleManager::VideoSampleAvailableCV(m_id, *remoteSample, metadata), 0);
+ auto properties = m_videoFrameObjectHeap->add(*videoFrame);
+ m_connection->send(Messages::RemoteCaptureSampleManager::VideoFrameAvailable(m_id, properties, metadata), 0);
}
RetainPtr<CVPixelBufferRef> rotatePixelBuffer(MediaSample& sample)
Modified: trunk/Source/WebKit/WebProcess/GPU/webrtc/LibWebRTCCodecs.cpp (291094 => 291095)
--- trunk/Source/WebKit/WebProcess/GPU/webrtc/LibWebRTCCodecs.cpp 2022-03-10 09:00:23 UTC (rev 291094)
+++ trunk/Source/WebKit/WebProcess/GPU/webrtc/LibWebRTCCodecs.cpp 2022-03-10 09:08:01 UTC (rev 291095)
@@ -39,7 +39,6 @@
#include <WebCore/CVUtilities.h>
#include <WebCore/LibWebRTCMacros.h>
#include <WebCore/PlatformMediaSessionManager.h>
-#include <WebCore/RemoteVideoSample.h>
#include <WebCore/RuntimeEnabledFeatures.h>
#include <WebCore/VP9UtilitiesCocoa.h>
#include <webrtc/sdk/WebKit/WebKitDecoder.h>
@@ -332,7 +331,7 @@
decoder->hasError = true;
}
-void LibWebRTCCodecs::completedDecoding(RTCDecoderIdentifier decoderIdentifier, uint32_t timeStamp, RemoteVideoFrameProxy::Properties&& properties)
+void LibWebRTCCodecs::completedDecoding(RTCDecoderIdentifier decoderIdentifier, uint32_t timeStamp, uint32_t timeStampNs, RemoteVideoFrameProxy::Properties&& properties)
{
assertIsCurrent(workQueue());
@@ -354,13 +353,13 @@
if (!decoder->decodedImageCallback)
return;
auto& frame = remoteVideoFrame.leakRef(); // Balanced by the release callback of videoDecoderTaskComplete.
- webrtc::videoDecoderTaskComplete(decoder->decodedImageCallback, timeStamp, frame.presentationTime().toDouble(), &frame,
+ webrtc::videoDecoderTaskComplete(decoder->decodedImageCallback, timeStamp, timeStampNs / 1000, &frame,
[](auto* pointer) { return static_cast<RemoteVideoFrameProxy*>(pointer)->pixelBuffer(); },
[](auto* pointer) { static_cast<RemoteVideoFrameProxy*>(pointer)->deref(); },
frame.size().width(), frame.size().height());
}
-void LibWebRTCCodecs::completedDecodingCV(RTCDecoderIdentifier decoderIdentifier, uint32_t timeStamp, WebCore::RemoteVideoSample&& remoteSample)
+void LibWebRTCCodecs::completedDecodingCV(RTCDecoderIdentifier decoderIdentifier, uint32_t timeStamp, uint32_t timeStampNs, RetainPtr<CVPixelBufferRef>&& pixelBuffer)
{
assertIsCurrent(workQueue());
@@ -373,14 +372,12 @@
Locker locker { AdoptLock, decoder->decodedImageCallbackLock };
if (!decoder->decodedImageCallback)
return;
- if (!remoteSample.surface())
- return;
- auto pixelBuffer = createCVPixelBuffer(remoteSample.surface()).value_or(nullptr);
+
if (!pixelBuffer) {
ASSERT_NOT_REACHED();
return;
}
- webrtc::videoDecoderTaskComplete(decoder->decodedImageCallback, timeStamp, remoteSample.time().toDouble(), pixelBuffer.get());
+ webrtc::videoDecoderTaskComplete(decoder->decodedImageCallback, timeStamp, timeStampNs / 1000, pixelBuffer.get());
}
static inline String formatNameFromCodecType(LibWebRTCCodecs::Type type)
Modified: trunk/Source/WebKit/WebProcess/GPU/webrtc/LibWebRTCCodecs.h (291094 => 291095)
--- trunk/Source/WebKit/WebProcess/GPU/webrtc/LibWebRTCCodecs.h 2022-03-10 09:00:23 UTC (rev 291094)
+++ trunk/Source/WebKit/WebProcess/GPU/webrtc/LibWebRTCCodecs.h 2022-03-10 09:08:01 UTC (rev 291095)
@@ -51,10 +51,6 @@
class Decoder;
}
-namespace WebCore {
-class RemoteVideoSample;
-}
-
namespace webrtc {
class VideoFrame;
struct WebKitEncodedFrameInfo;
@@ -133,9 +129,9 @@
void gpuProcessConnectionMayNoLongerBeNeeded();
void failedDecoding(RTCDecoderIdentifier);
- void completedDecoding(RTCDecoderIdentifier, uint32_t timeStamp, RemoteVideoFrameProxy::Properties&&);
+ void completedDecoding(RTCDecoderIdentifier, uint32_t timeStamp, uint32_t timeStampNs, RemoteVideoFrameProxy::Properties&&);
// FIXME: Will be removed once RemoteVideoFrameProxy providers are the only ones sending data.
- void completedDecodingCV(RTCDecoderIdentifier, uint32_t timeStamp, WebCore::RemoteVideoSample&&);
+ void completedDecodingCV(RTCDecoderIdentifier, uint32_t timeStamp, uint32_t timeStampNs, RetainPtr<CVPixelBufferRef>&&);
void completedEncoding(RTCEncoderIdentifier, IPC::DataReference&&, const webrtc::WebKitEncodedFrameInfo&);
RetainPtr<CVPixelBufferRef> convertToBGRA(CVPixelBufferRef);
Modified: trunk/Source/WebKit/WebProcess/GPU/webrtc/LibWebRTCCodecs.messages.in (291094 => 291095)
--- trunk/Source/WebKit/WebProcess/GPU/webrtc/LibWebRTCCodecs.messages.in 2022-03-10 09:00:23 UTC (rev 291094)
+++ trunk/Source/WebKit/WebProcess/GPU/webrtc/LibWebRTCCodecs.messages.in 2022-03-10 09:08:01 UTC (rev 291095)
@@ -24,8 +24,8 @@
messages -> LibWebRTCCodecs NotRefCounted {
FailedDecoding(WebKit::RTCDecoderIdentifier identifier)
- CompletedDecoding(WebKit::RTCDecoderIdentifier identifier, uint32_t timeStamp, WebKit::RemoteVideoFrameProxy::Properties frame)
- CompletedDecodingCV(WebKit::RTCDecoderIdentifier identifier, uint32_t timeStamp, WebCore::RemoteVideoSample sample)
+ CompletedDecoding(WebKit::RTCDecoderIdentifier identifier, uint32_t timeStamp, uint32_t timeStampNs, WebKit::RemoteVideoFrameProxy::Properties frame)
+ CompletedDecodingCV(WebKit::RTCDecoderIdentifier identifier, uint32_t timeStamp, uint32_t timeStampNs, RetainPtr<CVPixelBufferRef> pixelBuffer)
CompletedEncoding(WebKit::RTCEncoderIdentifier identifier, IPC::DataReference data, struct webrtc::WebKitEncodedFrameInfo info);
}
Modified: trunk/Source/WebKit/WebProcess/cocoa/RemoteCaptureSampleManager.cpp (291094 => 291095)
--- trunk/Source/WebKit/WebProcess/cocoa/RemoteCaptureSampleManager.cpp 2022-03-10 09:00:23 UTC (rev 291094)
+++ trunk/Source/WebKit/WebProcess/cocoa/RemoteCaptureSampleManager.cpp 2022-03-10 09:08:01 UTC (rev 291095)
@@ -33,8 +33,7 @@
#include "SharedRingBufferStorage.h"
#include "WebProcess.h"
#include <WebCore/CVUtilities.h>
-#include <WebCore/MediaSampleAVFObjC.h>
-#include <WebCore/RemoteVideoSample.h>
+#include <WebCore/VideoFrameCV.h>
#include <WebCore/WebAudioBufferList.h>
#if PLATFORM(COCOA) && ENABLE(MEDIA_STREAM)
@@ -159,7 +158,7 @@
iterator->value->setStorage(ipcHandle.handle, description, numberOfFrames, WTFMove(semaphore), mediaTime, frameChunkSize);
}
-void RemoteCaptureSampleManager::videoSampleAvailable(RealtimeMediaSourceIdentifier identifier, RemoteVideoFrameProxy::Properties&& properties, VideoSampleMetadata metadata)
+void RemoteCaptureSampleManager::videoFrameAvailable(RealtimeMediaSourceIdentifier identifier, RemoteVideoFrameProxy::Properties&& properties, VideoSampleMetadata metadata)
{
ASSERT(!WTF::isMainRunLoop());
// Create videoFrame before early outs so that the reference in `properties` is adopted.
@@ -177,7 +176,7 @@
iterator->value->videoFrameAvailable(WTFMove(videoFrame), videoFrameSize, metadata);
}
-void RemoteCaptureSampleManager::videoSampleAvailableCV(RealtimeMediaSourceIdentifier identifier, RemoteVideoSample&& sample, VideoSampleMetadata metadata)
+void RemoteCaptureSampleManager::videoFrameAvailableCV(RealtimeMediaSourceIdentifier identifier, RetainPtr<CVPixelBufferRef>&& pixelBuffer, WebCore::MediaSample::VideoRotation rotation, bool mirrored, MediaTime presentationTime, WebCore::VideoSampleMetadata metadata)
{
ASSERT(!WTF::isMainRunLoop());
auto iterator = m_videoSources.find(identifier);
@@ -185,7 +184,10 @@
RELEASE_LOG_ERROR(WebRTC, "Unable to find source %llu for remoteVideoSampleAvailable", identifier.toUInt64());
return;
}
- iterator->value->videoSampleAvailable(WTFMove(sample), metadata);
+
+ auto videoFrame = VideoFrameCV::create(presentationTime, mirrored, rotation, WTFMove(pixelBuffer));
+ auto size = videoFrame->presentationSize();
+ iterator->value->videoFrameAvailable(videoFrame.get(), { static_cast<int>(size.width()), static_cast<int>(size.height()) }, metadata);
}
RemoteCaptureSampleManager::RemoteAudio::RemoteAudio(Ref<RemoteRealtimeAudioSource>&& source)
@@ -258,23 +260,6 @@
{
}
-void RemoteCaptureSampleManager::RemoteVideo::videoSampleAvailable(RemoteVideoSample&& remoteSample, VideoSampleMetadata metadata)
-{
- auto pixelBuffer = createCVPixelBuffer(remoteSample.surface()).value_or(nullptr);
- if (!pixelBuffer) {
- ASSERT_NOT_REACHED();
- return;
- }
-
- auto videoFrame = MediaSampleAVFObjC::createFromPixelBuffer(WTFMove(pixelBuffer), remoteSample.rotation(), remoteSample.mirrored(), remoteSample.time());
- if (!videoFrame) {
- ASSERT_NOT_REACHED();
- return;
- }
-
- videoFrameAvailable(videoFrame.releaseNonNull(), remoteSample.size(), metadata);
-}
-
void RemoteCaptureSampleManager::RemoteVideo::videoFrameAvailable(Ref<MediaSample>&& sample, IntSize size, VideoSampleMetadata metadata)
{
switchOn(m_source, [&](Ref<RemoteRealtimeVideoSource>& source) {
Modified: trunk/Source/WebKit/WebProcess/cocoa/RemoteCaptureSampleManager.h (291094 => 291095)
--- trunk/Source/WebKit/WebProcess/cocoa/RemoteCaptureSampleManager.h 2022-03-10 09:00:23 UTC (rev 291094)
+++ trunk/Source/WebKit/WebProcess/cocoa/RemoteCaptureSampleManager.h 2022-03-10 09:08:01 UTC (rev 291095)
@@ -45,7 +45,6 @@
namespace WebCore {
class ImageTransferSessionVT;
-class RemoteVideoSample;
}
namespace WebKit {
@@ -75,9 +74,9 @@
// Messages
void audioStorageChanged(WebCore::RealtimeMediaSourceIdentifier, const SharedMemory::IPCHandle&, const WebCore::CAAudioStreamDescription&, uint64_t numberOfFrames, IPC::Semaphore&&, const MediaTime&, size_t frameSampleSize);
void audioSamplesAvailable(WebCore::RealtimeMediaSourceIdentifier, MediaTime, uint64_t numberOfFrames);
- void videoSampleAvailable(WebCore::RealtimeMediaSourceIdentifier, RemoteVideoFrameProxy::Properties&&, WebCore::VideoSampleMetadata);
+ void videoFrameAvailable(WebCore::RealtimeMediaSourceIdentifier, RemoteVideoFrameProxy::Properties&&, WebCore::VideoSampleMetadata);
// FIXME: Will be removed once RemoteVideoFrameProxy providers are the only ones sending data.
- void videoSampleAvailableCV(WebCore::RealtimeMediaSourceIdentifier, WebCore::RemoteVideoSample&&, WebCore::VideoSampleMetadata);
+ void videoFrameAvailableCV(WebCore::RealtimeMediaSourceIdentifier, RetainPtr<CVPixelBufferRef>&&, WebCore::MediaSample::VideoRotation, bool mirrored, MediaTime, WebCore::VideoSampleMetadata);
void setConnection(IPC::Connection*);
@@ -112,7 +111,6 @@
using Source = std::variant<Ref<RemoteRealtimeVideoSource>, Ref<RemoteRealtimeDisplaySource>>;
explicit RemoteVideo(Source&&);
- void videoSampleAvailable(WebCore::RemoteVideoSample&&, WebCore::VideoSampleMetadata);
void videoFrameAvailable(Ref<WebCore::MediaSample>&&, WebCore::IntSize, WebCore::VideoSampleMetadata);
private:
Modified: trunk/Source/WebKit/WebProcess/cocoa/RemoteCaptureSampleManager.messages.in (291094 => 291095)
--- trunk/Source/WebKit/WebProcess/cocoa/RemoteCaptureSampleManager.messages.in 2022-03-10 09:00:23 UTC (rev 291094)
+++ trunk/Source/WebKit/WebProcess/cocoa/RemoteCaptureSampleManager.messages.in 2022-03-10 09:08:01 UTC (rev 291095)
@@ -25,8 +25,8 @@
messages -> RemoteCaptureSampleManager NotRefCounted {
AudioStorageChanged(WebCore::RealtimeMediaSourceIdentifier id, WebKit::SharedMemory::IPCHandle storageHandle, WebCore::CAAudioStreamDescription description, uint64_t numberOfFrames, IPC::Semaphore captureSemaphore, MediaTime mediaTime, size_t frameChunkSize);
- VideoSampleAvailable(WebCore::RealtimeMediaSourceIdentifier id, WebKit::RemoteVideoFrameProxy::Properties sample, struct WebCore::VideoSampleMetadata metadata)
- VideoSampleAvailableCV(WebCore::RealtimeMediaSourceIdentifier id, WebCore::RemoteVideoSample sample, struct WebCore::VideoSampleMetadata metadata)
+ VideoFrameAvailable(WebCore::RealtimeMediaSourceIdentifier id, WebKit::RemoteVideoFrameProxy::Properties sample, struct WebCore::VideoSampleMetadata metadata)
+ VideoFrameAvailableCV(WebCore::RealtimeMediaSourceIdentifier id, RetainPtr<CVPixelBufferRef> pixelBuffer, WebCore::MediaSample::VideoRotation rotation, bool mirrored, MediaTime presentationTime, struct WebCore::VideoSampleMetadata metadata)
}
Modified: trunk/Source/WebKit/WebProcess/cocoa/RemoteRealtimeVideoSource.cpp (291094 => 291095)
--- trunk/Source/WebKit/WebProcess/cocoa/RemoteRealtimeVideoSource.cpp 2022-03-10 09:00:23 UTC (rev 291094)
+++ trunk/Source/WebKit/WebProcess/cocoa/RemoteRealtimeVideoSource.cpp 2022-03-10 09:08:01 UTC (rev 291095)
@@ -38,7 +38,6 @@
#include <WebCore/MediaConstraints.h>
#include <WebCore/RealtimeMediaSource.h>
#include <WebCore/RealtimeMediaSourceCenter.h>
-#include <WebCore/RemoteVideoSample.h>
#include <WebCore/WebAudioBufferList.h>
namespace WebKit {