Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 8b235dbb0f829b9d9fe869af9615b3f7464511ee
https://github.com/WebKit/WebKit/commit/8b235dbb0f829b9d9fe869af9615b3f7464511ee
Author: Youenn Fablet <[email protected]>
Date: 2026-09-22 (Tue, 22 Sep 2026)
Changed paths:
R LayoutTests/platform/ios/webrtc/h264-high-expected.txt
M Source/WebCore/Headers.cmake
M Source/WebCore/PAL/pal/cf/CoreMediaSoftLink.cpp
M Source/WebCore/PAL/pal/cf/CoreMediaSoftLink.h
M Source/WebCore/PAL/pal/cf/VideoToolboxSoftLink.cpp
M Source/WebCore/PAL/pal/cf/VideoToolboxSoftLink.h
M Source/WebCore/Sources.txt
M Source/WebCore/SourcesCocoa.txt
M Source/WebCore/WebCore.xcodeproj/project.pbxproj
A Source/WebCore/platform/graphics/H264Utilities.cpp
A Source/WebCore/platform/graphics/H264Utilities.h
M Source/WebCore/platform/graphics/HEVCUtilities.cpp
M Source/WebCore/platform/graphics/HEVCUtilities.h
M Source/WebCore/platform/graphics/cocoa/CMUtilities.h
M Source/WebCore/platform/graphics/cocoa/CMUtilities.mm
M Source/WebCore/platform/graphics/cocoa/H264UtilitiesCocoa.h
M Source/WebCore/platform/graphics/cocoa/H264UtilitiesCocoa.mm
M Source/WebCore/platform/graphics/cocoa/HEVCUtilitiesCocoa.h
M Source/WebCore/platform/graphics/cocoa/HEVCUtilitiesCocoa.mm
M Source/WebCore/platform/video-codecs/cocoa/GPUVideoDecoderVTBH265.mm
M Source/WebCore/platform/video-codecs/cocoa/GPUVideoEncoder.mm
M Source/WebCore/platform/video-codecs/cocoa/GPUVideoEncoderVTB.h
M Source/WebCore/platform/video-codecs/cocoa/GPUVideoEncoderVTB.mm
A Source/WebCore/platform/video-codecs/cocoa/GPUVideoEncoderVTBH264.h
A Source/WebCore/platform/video-codecs/cocoa/GPUVideoEncoderVTBH264.mm
M Source/WebCore/platform/video-codecs/cocoa/GPUVideoEncoderVTBH265.mm
M Tools/TestWebKitAPI/CMakeLists.txt
M Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj
A Tools/TestWebKitAPI/Tests/WebCore/H264UtilitiesTests.cpp
M Tools/TestWebKitAPI/Tests/WebCore/cocoa/H264UtilitiesCocoaTests.mm
Log Message:
-----------
Implement a VideoToolbox H264 encoder in WebCore
rdar://187579442
https://bugs.webkit.org/show_bug.cgi?id=324347
Reviewed by Jean-Yves Avenard.
We mirror the H265 migration code path for H264:
- We add a WebCore-native H.264 encoder path (WebRTCVideoEncoderVTBH264) built
on the existing VideoEncoderVTB/ WebRTCVideoEncoderVTB base classes.
This is used when WebRTCWebCoreVideoEncodersEnabled is set.
- H264 SDP profile-level-id negotiation (H264ProfileLevelId parsing +
VideoToolbox profile/level mapping) is ported from RTCVideoEncoderH264.mm.
We port the H.264 NALU/RBSP/bitstream-parsing routines needed for QP extraction
(H264BitstreamParser, mirroring the existing HEVCBitstreamParser but simpler as
we have a single active SPS/PPS) into a new H264Utilities.h/cpp.
We fo the same for H.264 AnnexB conversion.
We cover these routines with API tests.
We remove an iOS test expectation since we can now use high auto level there,
which is not enabled in the libwebrtc existing RTCVideoEncoderH264.mm.
Test: Tools/TestWebKitAPI/Tests/WebCore/cocoa/H264UtilitiesCocoaTests.mm
* LayoutTests/platform/ios/webrtc/h264-high-expected.txt: Removed.
* Source/WebCore/PAL/pal/cf/CoreMediaSoftLink.cpp:
* Source/WebCore/PAL/pal/cf/CoreMediaSoftLink.h:
* Source/WebCore/PAL/pal/cf/VideoToolboxSoftLink.cpp:
* Source/WebCore/PAL/pal/cf/VideoToolboxSoftLink.h:
* Source/WebCore/Sources.txt:
* Source/WebCore/SourcesCocoa.txt:
* Source/WebCore/WebCore.xcodeproj/project.pbxproj:
* Source/WebCore/platform/graphics/H264Utilities.cpp: Added.
(WebCore::h264NaluType):
(WebCore::H264BitstreamParser::parseSps):
(WebCore::H264BitstreamParser::parsePps):
(WebCore::H264BitstreamParser::parseNonParameterSetNalu):
(WebCore::H264BitstreamParser::parseSlice):
(WebCore::H264BitstreamParser::parseBitstream):
(WebCore::H264BitstreamParser::lastSliceQP const):
* Source/WebCore/platform/graphics/H264Utilities.h: Added.
* Source/WebCore/platform/graphics/cocoa/CMUtilities.h:
* Source/WebCore/platform/graphics/cocoa/CMUtilities.mm:
(WebCore::convertParameterSetsCMSampleBufferToAnnexB):
* Source/WebCore/platform/graphics/cocoa/H264UtilitiesCocoa.h:
* Source/WebCore/platform/graphics/cocoa/H264UtilitiesCocoa.mm:
(WebCore::convertAVCCMSampleBufferToAnnexB):
* Source/WebCore/platform/graphics/cocoa/HEVCUtilitiesCocoa.mm:
(WebCore::convertHEVCCMSampleBufferToAnnexB):
* Tools/TestWebKitAPI/CMakeLists.txt:
* Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
* Tools/TestWebKitAPI/Tests/WebCore/cocoa/H264UtilitiesCocoaTests.mm:
(TestWebKitAPI::appendByte):
(TestWebKitAPI::appendBytes):
(TestWebKitAPI::makeAVCCData):
(TestWebKitAPI::createAVCFormatDescription):
(TestWebKitAPI::createAVCSampleBuffer):
(TestWebKitAPI::annexBStartCode):
(TestWebKitAPI::TEST(H264UtilitiesCocoa, KeyframePrependsParameterSets)):
(TestWebKitAPI::TEST(H264UtilitiesCocoa, NonKeyframeOmitsParameterSets)):
(TestWebKitAPI::TEST(H264UtilitiesCocoa,
MultipleNALUsOfDifferentSizesAreAllExtracted)):
(TestWebKitAPI::TEST(H264UtilitiesCocoa, TruncatedNALULengthReturnsEmpty)):
(TestWebKitAPI::TEST(H264UtilitiesCocoa,
MalformedAVCCWithTruncatedSPSDoesNotCrash)): Deleted.
(TestWebKitAPI::TEST(H264UtilitiesCocoa,
MalformedAVCCWithTruncatedPPSDoesNotCrash)): Deleted.
* Source/WebCore/Headers.cmake:
* Source/WebCore/platform/video-codecs/cocoa/GPUVideoEncoder.mm:
(WebCore::GPUVideoEncoder::create):
* Source/WebCore/platform/video-codecs/cocoa/GPUVideoEncoderVTB.h:
(WebCore::GPUVideoEncoderVTB::configureAdditionalProperties):
* Source/WebCore/platform/video-codecs/cocoa/GPUVideoEncoderVTB.mm:
(WebCore::GPUVideoEncoderVTB::GPUVideoEncoderVTB):
(WebCore::GPUVideoEncoderVTB::configureCompressionSession):
(WebCore::GPUVideoEncoderVTB::setProperty):
(WebCore::GPUVideoEncoderVTB::encodeFrame):
(WebCore::GPUVideoEncoderVTB::notifyDescriptionIfNeeded):
(WebCore::GPUVideoEncoderVTB::toVector):
* Source/WebCore/platform/video-codecs/cocoa/GPUVideoEncoderVTBH264.h: Added.
* Source/WebCore/platform/video-codecs/cocoa/GPUVideoEncoderVTBH264.mm: Added.
(WebCore::parseH264ProfileLevelId):
(WebCore::extractVTProfileLevel):
(WebCore::computeVTProfileLevel):
(WebCore::GPUVideoEncoderVTBH264::GPUVideoEncoderVTBH264):
(WebCore::GPUVideoEncoderVTBH264::codecType const):
(WebCore::GPUVideoEncoderVTBH264::configureAdditionalProperties):
(WebCore::GPUVideoEncoderVTBH264::convertAndNotify):
* Source/WebCore/platform/video-codecs/cocoa/GPUVideoEncoderVTBH265.mm:
(WebCore::GPUVideoEncoderVTBH265::GPUVideoEncoderVTBH265):
(WebCore::GPUVideoEncoderVTBH265::convertAndNotify):
* Tools/TestWebKitAPI/Tests/WebCore/H264UtilitiesTests.cpp: Added.
(TestWebKitAPI::TEST(H264BitstreamParser, ReportsNoQpBeforeAnyParsing)):
(TestWebKitAPI::TEST(H264BitstreamParser,
ReportsNoQpAfterParsingOnlyParameterSets)):
(TestWebKitAPI::TEST(H264BitstreamParser, ReportsQpForImageSlices)):
(TestWebKitAPI::TEST(H264BitstreamParser, ReportsQpForCABACImageSlices)):
(TestWebKitAPI::TEST(H264BitstreamParser, ReportsQpForWeightedPredSlices)):
* Source/WebCore/platform/graphics/HEVCUtilities.cpp:
(WebCore::findNaluIndices):
(WebCore::HEVCBitstreamParser::parseBitstream):
(WebCore::findHEVCNaluIndices): Deleted.
* Source/WebCore/platform/graphics/HEVCUtilities.h:
* LayoutTests/platform/ios/webrtc/h264-high-expected.txt: Removed.
Canonical link: https://commits.webkit.org/321600@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications