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

Reply via email to