Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 4242fa3522c554886a7173f2f6e929f1fba3a1f8
      
https://github.com/WebKit/WebKit/commit/4242fa3522c554886a7173f2f6e929f1fba3a1f8
  Author: Youenn Fablet <[email protected]>
  Date:   2026-09-28 (Mon, 28 Sep 2026)

  Changed paths:
    M Source/WebCore/SourcesCocoa.txt
    M Source/WebCore/WebCore.xcodeproj/project.pbxproj
    M Source/WebCore/platform/cocoa/CoreVideoSoftLink.cpp
    M Source/WebCore/platform/cocoa/CoreVideoSoftLink.h
    M Source/WebCore/platform/graphics/AnnexBUtilities.cpp
    M Source/WebCore/platform/graphics/AnnexBUtilities.h
    M Source/WebCore/platform/graphics/H264Utilities.cpp
    M 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/H264UtilitiesCocoa.h
    M Source/WebCore/platform/graphics/cocoa/H264UtilitiesCocoa.mm
    M Source/WebCore/platform/graphics/cocoa/HEVCUtilitiesCocoa.mm
    M Source/WebCore/platform/video-codecs/cocoa/GPUVideoDecoder.mm
    M Source/WebCore/platform/video-codecs/cocoa/GPUVideoDecoderVTB.h
    M Source/WebCore/platform/video-codecs/cocoa/GPUVideoDecoderVTB.mm
    A Source/WebCore/platform/video-codecs/cocoa/GPUVideoDecoderVTBH264.h
    A Source/WebCore/platform/video-codecs/cocoa/GPUVideoDecoderVTBH264.mm
    M Source/WebCore/platform/video-codecs/cocoa/GPUVideoDecoderVTBH265.h
    M Source/WebCore/platform/video-codecs/cocoa/GPUVideoDecoderVTBH265.mm
    M Source/WebCore/platform/video-codecs/cocoa/GPUVideoEncoderVTB.mm
    M Tools/TestWebKitAPI/Tests/WebCore/H264UtilitiesTests.cpp
    M Tools/TestWebKitAPI/Tests/WebCore/cocoa/H264UtilitiesCocoaTests.mm

  Log Message:
  -----------
  Implement a VideoToolbox H264 decoder in WebCore
rdar://188171149
https://bugs.webkit.org/show_bug.cgi?id=324951

Reviewed by Eric Carlson.

Like done for H265 with GPUVideoDecoderVTBH265, we implement H264 decoding with 
GPUVideoDecoderVTBH264.
It reuses the same infrastructure.

We need some specific routines that were implemented by libwebrtc for 
RTCVideoDecoderH264, in particular the qp parsing and annexB H264 handling.
We reimplement these routines following what is done in libwebrtc.
We add some unit tests to cover these new WebCore routines.

We still keep color space handling as before, a follow-up will properly support 
color space handling.
The only change is that we are now correctly handling full range on encoder and 
decoder side.

Covered by existing tests.

* Source/WebCore/SourcesCocoa.txt:
* Source/WebCore/WebCore.xcodeproj/project.pbxproj:
* Source/WebCore/platform/graphics/H264Utilities.cpp:
(WebCore::findH264AnnexBSpsIndex):
(WebCore::findH264AnnexBMaxNumReorderFrames):
(WebCore::findAVCCMaxNumReorderFrames):
(WebCore::maxDpbMbsFromLevelNumber):
(WebCore::skipH264HRDParameters):
(WebCore::H264BitstreamParser::parseSpsMaxNumReorderFrames):
* Source/WebCore/platform/graphics/H264Utilities.h:
* Source/WebCore/platform/graphics/cocoa/H264UtilitiesCocoa.h:
* Source/WebCore/platform/graphics/cocoa/H264UtilitiesCocoa.mm:
(WebCore::createVideoInfoFromAVCC):
(WebCore::h264AnnexBSpsIsFollowedByPps):
(WebCore::createVideoInfoFromAVCAnnexBStream):
(WebCore::convertAVCAnnexBToLengthPrefixed):
* Source/WebCore/platform/video-codecs/cocoa/GPUVideoDecoderVTBH264.h: Added.
* Source/WebCore/platform/video-codecs/cocoa/GPUVideoDecoderVTBH264.mm: Added.
(WebCore::GPUVideoDecoderVTBH264::GPUVideoDecoderVTBH264):
(WebCore::GPUVideoDecoderVTBH264::decodeFrame):
(WebCore::GPUVideoDecoderVTBH264::setFormat):
* Source/WebCore/platform/video-codecs/cocoa/GPUVideoEncoderVTB.mm:
(WebCore::GPUVideoEncoderVTB::encodeFrame):
(WebCore::defaultH264EncodingColorSpace): Deleted.
* Tools/TestWebKitAPI/Tests/WebCore/H264UtilitiesTests.cpp:
(TestWebKitAPI::TEST(H264BitstreamParser, 
ComputesZeroMaxNumReorderFramesWhenPicOrderCntTypeIsTwo)):
(TestWebKitAPI::TestBitWriter::writeFlag):
(TestWebKitAPI::TestBitWriter::writeBits):
(TestWebKitAPI::TestBitWriter::writeExpGolomb):
(TestWebKitAPI::TestBitWriter::takeBytes):
(TestWebKitAPI::TestBitWriter::writeBit):
(TestWebKitAPI::TestBitWriter::flushByte):
(TestWebKitAPI::makeSpsWithMaxNumReorderFrames):
(TestWebKitAPI::makeAVCCWithSingleSps):
(TestWebKitAPI::TEST(H264Utilities, 
FindAVCCMaxNumReorderFramesParsesEmbeddedSps)):
(TestWebKitAPI::TEST(H264Utilities, 
FindAVCCMaxNumReorderFramesReturnsNonZeroValueFromBitstreamRestriction)):
(TestWebKitAPI::TEST(H264Utilities, 
FindAVCCMaxNumReorderFramesRejectsTooShortRecord)):
(TestWebKitAPI::TEST(H264Utilities, 
FindAVCCMaxNumReorderFramesRejectsZeroSequenceParameterSets)):
(TestWebKitAPI::TEST(H264Utilities, 
FindAVCCMaxNumReorderFramesRejectsSpsSizeOfJustTheNaluHeader)):
(TestWebKitAPI::TEST(H264Utilities, 
FindAVCCMaxNumReorderFramesRejectsTruncatedSps)):
* Tools/TestWebKitAPI/Tests/WebCore/cocoa/H264UtilitiesCocoaTests.mm:
(TestWebKitAPI::TEST(H264UtilitiesCocoa, CreatesVideoInfoFromAnnexBSpsPpsPair)):
(TestWebKitAPI::TEST(H264UtilitiesCocoa, 
ConvertsAnnexBToLengthPrefixedSkippingLeadingParameterSets)):
* Source/WebCore/platform/video-codecs/cocoa/GPUVideoDecoder.mm:
(WebCore::GPUVideoDecoder::create):
* Source/WebCore/platform/video-codecs/cocoa/GPUVideoDecoderVTB.mm:
(WebCore::overrideColorSpaceAttachments):
(WebCore::createMultiImageCallback):
(WebCore::GPUVideoDecoderVTB::decodeFrameInternal):
* Source/WebCore/platform/cocoa/CoreVideoSoftLink.cpp:
* Source/WebCore/platform/cocoa/CoreVideoSoftLink.h:
* Source/WebCore/platform/graphics/AnnexBUtilities.cpp:
(WebCore::annexBToLengthPrefixed):
* Source/WebCore/platform/graphics/AnnexBUtilities.h:
* Source/WebCore/platform/graphics/cocoa/HEVCUtilitiesCocoa.mm:
(WebCore::convertHEVCAnnexBToLengthPrefixed):
* Source/WebCore/platform/video-codecs/cocoa/GPUVideoDecoderVTB.h:
(WebCore::GPUVideoDecoderVTB::shouldOverrideColorSpaceAttachments const):
* Source/WebCore/platform/graphics/HEVCUtilities.cpp:
* Source/WebCore/platform/graphics/HEVCUtilities.h:
* Source/WebCore/platform/video-codecs/cocoa/GPUVideoDecoderVTBH265.h:
* Source/WebCore/platform/video-codecs/cocoa/GPUVideoDecoderVTBH265.mm:

Canonical link: https://commits.webkit.org/322034@main



To unsubscribe from these emails, change your notification settings at 
https://github.com/WebKit/WebKit/settings/notifications

Reply via email to