[webkit-changes] [WebKit/WebKit] 9d2580: WebCodecs encoders should be able to encode synchr...
youennf
noreply at github.com
Wed Jun 28 06:42:45 PDT 2023
Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 9d258046f92b2ce5a295f7fb6a6a6336039a8acc
https://github.com/WebKit/WebKit/commit/9d258046f92b2ce5a295f7fb6a6a6336039a8acc
Author: Youenn Fablet <youennf at gmail.com>
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
More information about the webkit-changes
mailing list