Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 9d258046f92b2ce5a295f7fb6a6a6336039a8acc
https://github.com/WebKit/WebKit/commit/9d258046f92b2ce5a295f7fb6a6a6336039a8acc
Author: Youenn Fablet <[email protected]>
Date: 2023-06-28 (Wed, 28 Jun 2023)
Changed paths:
A LayoutTests/http/wpt/webcodecs/videoFrame-duration-expected.txt
A LayoutTests/http/wpt/webcodecs/videoFrame-duration.html
M Source/ThirdParty/libwebrtc/Configurations/libwebrtc.exp
M Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/WebKitEncoder.h
M Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/WebKitEncoder.mm
M Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/base/RTCEncodedImage.h
M Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/base/RTCEncodedImage.m
M Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/base/RTCVideoFrame.h
M Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/base/RTCVideoFrame.mm
M
Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/components/video_codec/RTCVideoEncoderH264.mm
M Source/WebKit/GPUProcess/webrtc/LibWebRTCCodecsProxy.h
M Source/WebKit/GPUProcess/webrtc/LibWebRTCCodecsProxy.messages.in
M Source/WebKit/GPUProcess/webrtc/LibWebRTCCodecsProxy.mm
M Source/WebKit/WebProcess/GPU/media/RemoteVideoCodecFactory.cpp
M Source/WebKit/WebProcess/GPU/webrtc/LibWebRTCCodecs.cpp
M Source/WebKit/WebProcess/GPU/webrtc/LibWebRTCCodecs.h
Log Message:
-----------
WebCodecs encoders should be able to encode synchronously two frames with the
same timestamp
https://bugs.webkit.org/show_bug.cgi?id=258568
rdar://111389746
Reviewed by Eric Carlson.
We are using a map to retrieve frame durations on WebProcess side based on
timestamp.
This does not work if timestamps are the same for two frames that are being
encoded.
Instead of doing that, we are now sending both timestamp and duration to
GPUProcess when encoding a frame.
GPUProcess sends back both information as well, which allows to preserve them.
This patch is also fixing negative timestamps as they were cast to uint32_t in
GPUProcess.
Duration being optional, we are using std::numeric_limits<uint64_t>::max() as a
missing duration.
* LayoutTests/http/wpt/webcodecs/videoFrame-duration-expected.txt: Added.
* LayoutTests/http/wpt/webcodecs/videoFrame-duration.html: Added.
* Source/ThirdParty/libwebrtc/Configurations/libwebrtc.exp:
* Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/WebKitEncoder.h:
(webrtc::WebKitEncodedFrameInfo::decode):
(webrtc::WebKitEncodedFrameInfo::encode const):
* Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/WebKitEncoder.mm:
(webrtc::createLocalEncoder):
(webrtc::encodeLocalEncoderFrame):
* Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/base/RTCEncodedImage.h:
* Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/base/RTCEncodedImage.m:
* Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/base/RTCVideoFrame.h:
* Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/base/RTCVideoFrame.mm:
(-[RTCVideoFrame duration]):
(-[RTCVideoFrame initWithBuffer:rotation:timeStampNs:]):
*
Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/components/video_codec/RTCVideoEncoderH264.mm:
(-[RTCVideoEncoderH264 encode:codecSpecificInfo:frameTypes:]):
(-[RTCVideoEncoderH264
frameWasEncoded:flags:sampleBuffer:codecSpecificInfo:width:height:renderTimeMs:timestamp:duration:rotation:isKeyFrameRequired:]):
(-[RTCVideoEncoderH264
frameWasEncoded:flags:sampleBuffer:codecSpecificInfo:width:height:renderTimeMs:timestamp:rotation:isKeyFrameRequired:]):
Deleted.
* Source/WebKit/GPUProcess/webrtc/LibWebRTCCodecsProxy.h:
* Source/WebKit/GPUProcess/webrtc/LibWebRTCCodecsProxy.messages.in:
* Source/WebKit/GPUProcess/webrtc/LibWebRTCCodecsProxy.mm:
(WebKit::LibWebRTCCodecsProxy::encodeFrame):
* Source/WebKit/WebProcess/GPU/media/RemoteVideoCodecFactory.cpp:
(WebKit::RemoteVideoEncoderCallbacks::close):
(WebKit::RemoteVideoEncoder::RemoteVideoEncoder):
(WebKit::RemoteVideoEncoder::encode):
(WebKit::RemoteVideoEncoderCallbacks::notifyEncodedChunk):
(WebKit::RemoteVideoEncoderCallbacks::addDuration): Deleted.
* Source/WebKit/WebProcess/GPU/webrtc/LibWebRTCCodecs.cpp:
(WebKit::LibWebRTCCodecs::encodeFrameInternal):
(WebKit::LibWebRTCCodecs::encodeFrame):
(WebKit::LibWebRTCCodecs::completedEncoding):
* Source/WebKit/WebProcess/GPU/webrtc/LibWebRTCCodecs.h:
Canonical link: https://commits.webkit.org/265580@main
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes