Changeset 286908 in webkit
- Timestamp:
- Dec 11, 2021, 1:00:51 AM (5 years ago)
- Location:
- trunk
- Files:
-
- 11 added
- 56 edited
- 17 copied
-
LayoutTests/ChangeLog (modified) (1 diff)
-
LayoutTests/fast/mediastream/MediaStream-video-element-expected.txt (modified) (2 diffs)
-
LayoutTests/media/content/test-hevc.mp4 (added)
-
LayoutTests/media/hevc-codec-parameters-expected.txt (modified) (1 diff)
-
LayoutTests/media/hevc-codec-parameters.html (modified) (2 diffs)
-
LayoutTests/media/hevc-codec-string-expected.txt (added)
-
LayoutTests/media/hevc-codec-string.html (added)
-
LayoutTests/media/track/audio-track-configuration-expected.txt (added)
-
LayoutTests/media/track/audio-track-configuration.html (added)
-
LayoutTests/media/track/video-track-configuration-expected.txt (added)
-
LayoutTests/media/track/video-track-configuration.html (added)
-
Source/WTF/ChangeLog (modified) (1 diff)
-
Source/WTF/Scripts/Preferences/WebPreferencesExperimental.yaml (modified) (1 diff)
-
Source/WTF/wtf/Vector.h (modified) (2 diffs)
-
Source/WebCore/CMakeLists.txt (modified) (4 diffs)
-
Source/WebCore/ChangeLog (modified) (1 diff)
-
Source/WebCore/DerivedSources-input.xcfilelist (modified) (3 diffs)
-
Source/WebCore/DerivedSources-output.xcfilelist (modified) (4 diffs)
-
Source/WebCore/DerivedSources.make (modified) (3 diffs)
-
Source/WebCore/Headers.cmake (modified) (1 diff)
-
Source/WebCore/Modules/webcodecs (added)
-
Source/WebCore/Modules/webcodecs/VideoColorPrimaries.h (copied) (copied from trunk/Source/WebCore/platform/graphics/VideoTrackPrivateClient.h ) (1 diff)
-
Source/WebCore/Modules/webcodecs/VideoColorPrimaries.idl (copied) (copied from trunk/Source/WebCore/platform/graphics/VideoTrackPrivateClient.h ) (1 diff)
-
Source/WebCore/Modules/webcodecs/VideoColorSpace.h (added)
-
Source/WebCore/Modules/webcodecs/VideoColorSpace.idl (copied) (copied from trunk/Source/WebCore/platform/graphics/VideoTrackPrivateClient.h ) (1 diff)
-
Source/WebCore/Modules/webcodecs/VideoColorSpaceInit.h (copied) (copied from trunk/Source/WebCore/platform/graphics/VideoTrackPrivateClient.h ) (1 diff)
-
Source/WebCore/Modules/webcodecs/VideoColorSpaceInit.idl (copied) (copied from trunk/Source/WebCore/platform/graphics/VideoTrackPrivateClient.h ) (1 diff)
-
Source/WebCore/Modules/webcodecs/VideoMatrixCoefficients.h (copied) (copied from trunk/Source/WebCore/platform/graphics/VideoTrackPrivateClient.h ) (1 diff)
-
Source/WebCore/Modules/webcodecs/VideoMatrixCoefficients.idl (copied) (copied from trunk/Source/WebCore/platform/graphics/VideoTrackPrivateClient.h ) (1 diff)
-
Source/WebCore/Modules/webcodecs/VideoTransferCharacteristics.h (copied) (copied from trunk/Source/WebCore/platform/graphics/VideoTrackPrivateClient.h ) (1 diff)
-
Source/WebCore/Modules/webcodecs/VideoTransferCharacteristics.idl (copied) (copied from trunk/Source/WebCore/platform/graphics/VideoTrackPrivateClient.h ) (1 diff)
-
Source/WebCore/PAL/ChangeLog (modified) (1 diff)
-
Source/WebCore/PAL/pal/cf/CoreMediaSoftLink.cpp (modified) (3 diffs)
-
Source/WebCore/PAL/pal/cf/CoreMediaSoftLink.h (modified) (3 diffs)
-
Source/WebCore/PAL/pal/spi/cocoa/AVFoundationSPI.h (modified) (2 diffs)
-
Source/WebCore/Sources.txt (modified) (2 diffs)
-
Source/WebCore/SourcesCocoa.txt (modified) (1 diff)
-
Source/WebCore/WebCore.xcodeproj/project.pbxproj (modified) (13 diffs)
-
Source/WebCore/html/track/AudioTrack.cpp (modified) (4 diffs)
-
Source/WebCore/html/track/AudioTrack.h (modified) (4 diffs)
-
Source/WebCore/html/track/AudioTrack.idl (modified) (1 diff)
-
Source/WebCore/html/track/AudioTrackConfiguration.h (copied) (copied from trunk/Source/WebCore/platform/graphics/VideoTrackPrivateClient.h ) (1 diff)
-
Source/WebCore/html/track/AudioTrackConfiguration.idl (copied) (copied from trunk/Source/WebCore/platform/graphics/VideoTrackPrivateClient.h ) (1 diff)
-
Source/WebCore/html/track/VideoTrack.cpp (modified) (4 diffs)
-
Source/WebCore/html/track/VideoTrack.h (modified) (5 diffs)
-
Source/WebCore/html/track/VideoTrack.idl (modified) (1 diff)
-
Source/WebCore/html/track/VideoTrackConfiguration.h (added)
-
Source/WebCore/html/track/VideoTrackConfiguration.idl (copied) (copied from trunk/Source/WebCore/platform/graphics/VideoTrackPrivateClient.h ) (1 diff)
-
Source/WebCore/platform/graphics/AudioTrackPrivate.h (modified) (2 diffs)
-
Source/WebCore/platform/graphics/HEVCUtilities.cpp (modified) (6 diffs)
-
Source/WebCore/platform/graphics/HEVCUtilities.h (modified) (2 diffs)
-
Source/WebCore/platform/graphics/PlatformVideoColorPrimaries.h (copied) (copied from trunk/Source/WebCore/platform/graphics/VideoTrackPrivateClient.h ) (1 diff)
-
Source/WebCore/platform/graphics/PlatformVideoColorSpace.h (copied) (copied from trunk/Source/WebCore/platform/graphics/VideoTrackPrivateClient.h ) (1 diff)
-
Source/WebCore/platform/graphics/PlatformVideoMatrixCoefficients.h (copied) (copied from trunk/Source/WebCore/platform/graphics/VideoTrackPrivateClient.h ) (1 diff)
-
Source/WebCore/platform/graphics/PlatformVideoTransferCharacteristics.h (copied) (copied from trunk/Source/WebCore/platform/graphics/VideoTrackPrivateClient.h ) (1 diff)
-
Source/WebCore/platform/graphics/VideoTrackPrivate.h (modified) (3 diffs)
-
Source/WebCore/platform/graphics/VideoTrackPrivateClient.h (modified) (1 diff)
-
Source/WebCore/platform/graphics/avfoundation/AVTrackPrivateAVFObjCImpl.h (modified) (3 diffs)
-
Source/WebCore/platform/graphics/avfoundation/AVTrackPrivateAVFObjCImpl.mm (modified) (3 diffs)
-
Source/WebCore/platform/graphics/avfoundation/AudioTrackPrivateAVF.h (modified) (2 diffs)
-
Source/WebCore/platform/graphics/avfoundation/FormatDescriptionUtilities.cpp (added)
-
Source/WebCore/platform/graphics/avfoundation/FormatDescriptionUtilities.h (copied) (copied from trunk/Source/WebCore/platform/graphics/VideoTrackPrivateClient.h ) (1 diff)
-
Source/WebCore/platform/graphics/avfoundation/MediaSelectionGroupAVFObjC.h (modified) (1 diff)
-
Source/WebCore/platform/graphics/avfoundation/MediaSelectionGroupAVFObjC.mm (modified) (2 diffs)
-
Source/WebCore/platform/graphics/avfoundation/VideoTrackPrivateAVF.h (modified) (1 diff)
-
Source/WebCore/platform/graphics/avfoundation/objc/AudioTrackPrivateAVFObjC.mm (modified) (1 diff)
-
Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferParserAVFObjC.mm (modified) (1 diff)
-
Source/WebCore/platform/graphics/avfoundation/objc/VideoTrackPrivateAVFObjC.cpp (modified) (1 diff)
-
Source/WebCore/platform/graphics/avfoundation/objc/VideoTrackPrivateMediaSourceAVFObjC.mm (modified) (1 diff)
-
Source/WebCore/platform/graphics/cocoa/VideoTrackPrivateWebM.cpp (modified) (1 diff)
-
Source/WebCore/platform/graphics/cocoa/VideoTrackPrivateWebM.h (modified) (1 diff)
-
Source/WebCore/testing/Internals.cpp (modified) (2 diffs)
-
Source/WebCore/testing/Internals.h (modified) (2 diffs)
-
Source/WebCore/testing/Internals.idl (modified) (2 diffs)
-
Source/WebKit/ChangeLog (modified) (1 diff)
-
Source/WebKit/GPUProcess/media/RemoteAudioTrackProxy.cpp (modified) (1 diff)
-
Source/WebKit/GPUProcess/media/RemoteAudioTrackProxy.h (modified) (1 diff)
-
Source/WebKit/GPUProcess/media/RemoteVideoTrackProxy.cpp (modified) (2 diffs)
-
Source/WebKit/GPUProcess/media/RemoteVideoTrackProxy.h (modified) (2 diffs)
-
Source/WebKit/GPUProcess/media/TrackPrivateRemoteConfiguration.h (modified) (4 diffs)
-
Source/WebKit/WebProcess/GPU/media/AudioTrackPrivateRemote.cpp (modified) (1 diff)
-
Source/WebKit/WebProcess/GPU/media/AudioTrackPrivateRemote.h (modified) (1 diff)
-
Source/WebKit/WebProcess/GPU/media/VideoTrackPrivateRemote.cpp (modified) (1 diff)
-
Source/WebKit/WebProcess/GPU/media/VideoTrackPrivateRemote.h (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r286906 r286908 1 2021-12-11 Jer Noble <jer.noble@apple.com> 2 3 Add an experimental trackConfiguration accessor on AudioTrack & VideoTrack. 4 https://bugs.webkit.org/show_bug.cgi?id=230841 5 6 Reviewed by Eric Carlson. 7 8 * fast/mediastream/MediaStream-video-element-expected.txt: 9 * media/content/test-hevc.mp4: Added. 10 * media/hevc-codec-parameters-expected.txt: 11 * media/hevc-codec-parameters.html: 12 * media/hevc-codec-string-expected.txt: Added. 13 * media/hevc-codec-string.html: Added. 14 * media/track/audio-track-configuration-expected.txt: Added. 15 * media/track/audio-track-configuration.html: Added. 16 * media/track/video-track-configuration-expected.txt: Added. 17 * media/track/video-track-configuration.html: Added. 18 1 19 2021-12-10 Myles C. Maxfield <mmaxfield@apple.com> 2 20 -
trunk/LayoutTests/fast/mediastream/MediaStream-video-element-expected.txt
r286813 r286908 32 32 33 33 video.videoTracks[0] properties: 34 configuration = [object VideoTrackConfiguration] 34 35 id = <UUID> 35 36 kind = main … … 45 46 46 47 video.audioTracks[0] properties: 48 configuration = [object AudioTrackConfiguration] 47 49 enabled = true 48 50 id = <UUID> -
trunk/LayoutTests/media/hevc-codec-parameters-expected.txt
r286813 r286908 1 1 EXPECTED (internals.parseHEVCCodecParameters("bad-parameter") == 'null') OK 2 2 EXPECTED (internals.parseHEVCCodecParameters("hvc1") == 'null') OK 3 EXPECTED (internals.parseHEVCCodecParameters("hev1.1.6.L93") === '{ 0, 1, 6, 93 }') OK 4 EXPECTED (internals.parseHEVCCodecParameters("hev1.A4.41.H120") === '{ 1, 4, 65, 120 }') OK 5 EXPECTED (internals.parseHEVCCodecParameters("hev1.B1.4.L63") === '{ 2, 1, 4, 63 }') OK 3 EXPECTED (internals.parseHEVCCodecParameters("hev1.1.6.L93") === '{ hev1, 0, 1, 1610612736, 0, [0,0,0,0,0,0], 93 }') OK 4 EXPECTED (internals.parseHEVCCodecParameters("hvc1.A4.41.H120") === '{ hvc1, 1, 4, 2181038080, 1, [0,0,0,0,0,0], 120 }') OK 5 EXPECTED (internals.parseHEVCCodecParameters("hev1.A4.41.H120.B0") === '{ hev1, 1, 4, 2181038080, 1, [176,0,0,0,0,0], 120 }') OK 6 EXPECTED (internals.parseHEVCCodecParameters("hvc1.B1.4.L63") === '{ hvc1, 2, 1, 536870912, 0, [0,0,0,0,0,0], 63 }') OK 6 7 EXPECTED (internals.parseHEVCCodecParameters("hev1.D1.4.L63") == 'null') OK 7 8 EXPECTED (internals.parseHEVCCodecParameters("hev1.B1.4.L68000") == 'null') OK -
trunk/LayoutTests/media/hevc-codec-parameters.html
r286813 r286908 5 5 <script> 6 6 function HEVCParameterSetToString(set) { 7 return `{ ${set. generalProfileSpace }, ${set.generalProfileIDC }, ${set.generalProfileCompatibilityFlags }, ${set.generalLevelIDC } }`;7 return `{ ${set.codec}, ${set.generalProfileSpace }, ${set.generalProfileIDC }, ${set.generalProfileCompatibilityFlags }, ${set.generalTierFlag}, [${set.generalConstraintIndicatorFlags}], ${set.generalLevelIDC } }`; 8 8 } 9 9 function isEqualHEVCParameterSet(setA, setB) { 10 return setA.generalProfileSpace === setB.generalProfileSpace 10 return setA.codec === setB.codec 11 && setA.generalProfileSpace === setB.generalProfileSpace 11 12 && setA.generalProfileIDC === setB.generalProfileIDC 12 13 && setA.generalProfileCompatibilityFlags === setB.generalProfileCompatibilityFlags 14 && setA.generalTierFlag === setB.generalTierFlag 13 15 && setA.generalLevelIDC === setB.generalLevelIDC 16 && setA.generalConstraintIndicatorFlags[0] == setB.generalConstraintIndicatorFlags[0] 17 && setA.generalConstraintIndicatorFlags[1] == setB.generalConstraintIndicatorFlags[1] 18 && setA.generalConstraintIndicatorFlags[2] == setB.generalConstraintIndicatorFlags[2] 19 && setA.generalConstraintIndicatorFlags[3] == setB.generalConstraintIndicatorFlags[3] 20 && setA.generalConstraintIndicatorFlags[4] == setB.generalConstraintIndicatorFlags[4] 21 && setA.generalConstraintIndicatorFlags[5] == setB.generalConstraintIndicatorFlags[5] 14 22 } 15 function makeHEVCParameterSet( generalProfileSpace, generalProfileIDC, generalProfileCompatibilityFlags, generalLevelIDC)23 function makeHEVCParameterSet(codec, generalProfileSpace, generalProfileIDC, generalProfileCompatibilityFlags, generalTierFlag, generalConstraintIndicatorFlags, generalLevelIDC) 16 24 { 17 25 return { 26 codec: codec, 18 27 generalProfileSpace: generalProfileSpace, 19 28 generalProfileIDC: generalProfileIDC, 20 29 generalProfileCompatibilityFlags: generalProfileCompatibilityFlags, 30 generalTierFlag: generalTierFlag, 31 generalConstraintIndicatorFlags: generalConstraintIndicatorFlags, 21 32 generalLevelIDC: generalLevelIDC, 22 33 }; … … 31 42 testExpected('internals.parseHEVCCodecParameters("bad-parameter")', null); 32 43 testExpected('internals.parseHEVCCodecParameters("hvc1")', null); 33 testExpectedHEVCParameterSet('internals.parseHEVCCodecParameters("hev1.1.6.L93")', makeHEVCParameterSet(0, 1, 6, 93)); 34 testExpectedHEVCParameterSet('internals.parseHEVCCodecParameters("hev1.A4.41.H120")', makeHEVCParameterSet(1, 4, 65, 120)); 35 testExpectedHEVCParameterSet('internals.parseHEVCCodecParameters("hev1.B1.4.L63")', makeHEVCParameterSet(2, 1, 4, 63)); 44 testExpectedHEVCParameterSet('internals.parseHEVCCodecParameters("hev1.1.6.L93")', makeHEVCParameterSet('hev1', 0, 1, 0x60000000, 0, [0, 0, 0, 0, 0, 0], 93)); 45 testExpectedHEVCParameterSet('internals.parseHEVCCodecParameters("hvc1.A4.41.H120")', makeHEVCParameterSet('hvc1', 1, 4, 0x82000000, 1, [0, 0, 0, 0, 0, 0], 120)); 46 testExpectedHEVCParameterSet('internals.parseHEVCCodecParameters("hev1.A4.41.H120.B0")', makeHEVCParameterSet('hev1', 1, 4, 0x82000000, 1, [176, 0, 0, 0, 0, 0], 120)); 47 testExpectedHEVCParameterSet('internals.parseHEVCCodecParameters("hvc1.B1.4.L63")', makeHEVCParameterSet('hvc1', 2, 1, 0x20000000, 0, [0, 0, 0, 0, 0, 0], 63)); 36 48 testExpected('internals.parseHEVCCodecParameters("hev1.D1.4.L63")', null); 37 49 testExpected('internals.parseHEVCCodecParameters("hev1.B1.4.L68000")', null); -
trunk/Source/WTF/ChangeLog
r286893 r286908 1 2021-12-11 Jer Noble <jer.noble@apple.com> 2 3 Add an experimental VideoTrackConfiguration class and accessor on VideoTrack 4 https://bugs.webkit.org/show_bug.cgi?id=230841 5 6 Reviewed by Eric Carlson. 7 8 Drive-by change: add a Vector::reverseFindMatching convenience method. 9 10 * Scripts/Preferences/WebPreferencesExperimental.yaml: 11 * wtf/Vector.h: 12 (WTF::Malloc>::reverseFindMatching const): 13 1 14 2021-12-10 Eric Carlson <eric.carlson@apple.com> 2 15 -
trunk/Source/WTF/Scripts/Preferences/WebPreferencesExperimental.yaml
r286893 r286908 1362 1362 default: true 1363 1363 1364 TrackConfigurationEnabled: 1365 type: bool 1366 humanReadableName: "Track Configuration API" 1367 humanReadableDescription: "Track Configuration API" 1368 defaultValue: 1369 WebKitLegacy: 1370 default: false 1371 WebKit: 1372 default: false 1373 WebCore: 1374 default: false 1375 1364 1376 TransformStreamAPIEnabled: 1365 1377 type: bool -
trunk/Source/WTF/wtf/Vector.h
r286815 r286908 759 759 template<typename MatchFunction> size_t findMatching(const MatchFunction&) const; 760 760 template<typename U> size_t reverseFind(const U&) const; 761 761 template<typename MatchFunction> size_t reverseFindMatching(const MatchFunction&) const; 762 762 763 template<typename U> bool appendIfNotContains(const U&); 763 764 … … 1017 1018 const size_t index = size() - i; 1018 1019 if (at(index) == value) 1020 return index; 1021 } 1022 return notFound; 1023 } 1024 1025 template<typename T, size_t inlineCapacity, typename OverflowHandler, size_t minCapacity, typename Malloc> 1026 template<typename MatchFunction> 1027 size_t Vector<T, inlineCapacity, OverflowHandler, minCapacity, Malloc>::reverseFindMatching(const MatchFunction& matches) const 1028 { 1029 for (size_t i = 1; i <= size(); ++i) { 1030 const size_t index = size() - i; 1031 if (matches(at(index))) 1019 1032 return index; 1020 1033 } -
trunk/Source/WebCore/CMakeLists.txt
r286813 r286908 66 66 "${WEBCORE_DIR}/Modules/webauthn/cbor" 67 67 "${WEBCORE_DIR}/Modules/webauthn/fido" 68 "${WEBCORE_DIR}/Modules/webcodecs" 68 69 "${WEBCORE_DIR}/Modules/webdatabase" 69 70 "${WEBCORE_DIR}/Modules/webdriver" … … 660 661 Modules/webauthn/PublicKeyCredentialType.idl 661 662 Modules/webauthn/UserVerificationRequirement.idl 663 664 Modules/webcodecs/VideoColorPrimaries.idl 665 Modules/webcodecs/VideoColorSpace.idl 666 Modules/webcodecs/VideoColorSpaceInit.idl 667 Modules/webcodecs/VideoMatrixCoefficients.idl 668 Modules/webcodecs/VideoTransferCharacteristics.idl 662 669 663 670 Modules/webdatabase/DOMWindow+WebDatabase.idl … … 1114 1121 1115 1122 html/track/AudioTrack.idl 1123 html/track/AudioTrackConfiguration.idl 1116 1124 html/track/AudioTrackList.idl 1117 1125 html/track/DataCue.idl … … 1126 1134 html/track/VTTRegionList.idl 1127 1135 html/track/VideoTrack.idl 1136 html/track/VideoTrackConfiguration.idl 1128 1137 html/track/VideoTrackList.idl 1129 1138 -
trunk/Source/WebCore/ChangeLog
r286907 r286908 1 2021-12-11 Jer Noble <jer.noble@apple.com> 2 3 Add an experimental trackConfiguration accessor on AudioTrack & VideoTrack. 4 https://bugs.webkit.org/show_bug.cgi?id=230841 5 6 Reviewed by Eric Carlson. 7 8 Add an experimental property on AudioTrack VideoTrack which contains information about the 9 underlying media track's configuration. The AudioTrackConfiguration is based on 10 AudioConfiguration from MediaCapabilities. The VideoTrackConfiguration is based on a 11 combination of the VideoConfiguration from MediaCapabilities and the VideoColorSpace from 12 WebCodecs. 13 14 The AVFoundation implementation of AVTrackPrivateAVFObjCImpl will extract a NAL unit for the 15 video codec from the CMFormatDescription containing information about the underlying media, 16 and pass that NAL unit to utility methods in HEVCUtilities (which should probably be 17 renamed to CodecUntilities) to extract and create codec configuration strings. It will 18 extract colorspace information from CMFormatDescriptionExtensions found in the format 19 description. It will extract framerate, bitrate, width and height, sample rate and channel 20 count information from the underlying AVAssetTrack. There are shortcomings here, as HLS 21 streams and MSE streams do not generate framerate or bitrate information in the 22 AVAssetTrack. 23 24 Tests: media/track/audio-track-configuration.html 25 media/track/video-track-configuration.html 26 27 * CMakeLists.txt: 28 * DerivedSources-input.xcfilelist: 29 * DerivedSources-output.xcfilelist: 30 * DerivedSources.make: 31 * Modules/webcodecs/VideoColorPrimaries.h: 32 * Modules/webcodecs/VideoColorPrimaries.idl: 33 * Modules/webcodecs/VideoColorSpace.h: 34 (WebCore::VideoColorSpace::create): 35 (WebCore::VideoColorSpace::primaries const): 36 (WebCore::VideoColorSpace::setPrimaries): 37 (WebCore::VideoColorSpace::transfer const): 38 (WebCore::VideoColorSpace::setTransfer): 39 (WebCore::VideoColorSpace::matrix const): 40 (WebCore::VideoColorSpace::setMatrix): 41 (WebCore::VideoColorSpace::fullRange const): 42 (WebCore::VideoColorSpace::setfFullRange): 43 (WebCore::VideoColorSpace::VideoColorSpace): 44 * Modules/webcodecs/VideoColorSpace.idl: 45 * Modules/webcodecs/VideoColorSpaceInit.h: 46 * Modules/webcodecs/VideoColorSpaceInit.idl: 47 * Modules/webcodecs/VideoMatrixCoefficients.h: 48 * Modules/webcodecs/VideoMatrixCoefficients.idl: 49 * Modules/webcodecs/VideoTransferCharacteristics.h: 50 * Modules/webcodecs/VideoTransferCharacteristics.idl: 51 * Sources.txt: 52 * SourcesCocoa.txt: 53 * WebCore.xcodeproj/project.pbxproj: 54 * html/track/AudioTrack.cpp: 55 (WebCore::AudioTrack::AudioTrack): 56 (WebCore::AudioTrack::setPrivate): 57 (WebCore::AudioTrack::updateConfigurationFromPrivate): 58 * html/track/AudioTrack.h: 59 * html/track/AudioTrack.idl: 60 * html/track/AudioTrackConfiguration.h: 61 (WebCore::AudioTrackConfiguration::create): 62 (WebCore::AudioTrackConfiguration::codec const): 63 (WebCore::AudioTrackConfiguration::setCodec): 64 (WebCore::AudioTrackConfiguration::sampleRate const): 65 (WebCore::AudioTrackConfiguration::setSampleRate): 66 (WebCore::AudioTrackConfiguration::numberOfChannels const): 67 (WebCore::AudioTrackConfiguration::setNumberOfChannels): 68 (WebCore::AudioTrackConfiguration::bitrate const): 69 (WebCore::AudioTrackConfiguration::setBitrate): 70 (WebCore::AudioTrackConfiguration::AudioTrackConfiguration): 71 * html/track/AudioTrackConfiguration.idl: 72 * html/track/VideoTrack.cpp: 73 (WebCore::VideoTrack::VideoTrack): 74 (WebCore::VideoTrack::setPrivate): 75 (WebCore::VideoTrack::updateConfigurationFromPrivate): 76 * html/track/VideoTrack.h: 77 * html/track/VideoTrack.idl: 78 * html/track/VideoTrackConfiguration.h: Added. 79 (WebCore::VideoTrackConfiguration::create): 80 (WebCore::VideoTrackConfiguration::codec const): 81 (WebCore::VideoTrackConfiguration::setCodec): 82 (WebCore::VideoTrackConfiguration::width const): 83 (WebCore::VideoTrackConfiguration::setWidth): 84 (WebCore::VideoTrackConfiguration::height const): 85 (WebCore::VideoTrackConfiguration::setHeight): 86 (WebCore::VideoTrackConfiguration::colorSpace const): 87 (WebCore::VideoTrackConfiguration::setColorSpace): 88 (WebCore::VideoTrackConfiguration::framerate const): 89 (WebCore::VideoTrackConfiguration::setFramerate): 90 (WebCore::VideoTrackConfiguration::bitrate const): 91 (WebCore::VideoTrackConfiguration::setBitrate): 92 (WebCore::VideoTrackConfiguration::VideoTrackConfiguration): 93 * html/track/VideoTrackConfiguration.idl: 94 * platform/graphics/AudioTrackPrivate.h: 95 (WebCore::AudioTrackPrivate::codec const): 96 (WebCore::AudioTrackPrivate::setCodec): 97 (WebCore::AudioTrackPrivate::sampleRate const): 98 (WebCore::AudioTrackPrivate::setSampleRate): 99 (WebCore::AudioTrackPrivate::numberOfChannels const): 100 (WebCore::AudioTrackPrivate::setNumberOfChannels): 101 (WebCore::AudioTrackPrivate::bitrate const): 102 (WebCore::AudioTrackPrivate::setBitrate): 103 * platform/graphics/HEVCUtilities.cpp: 104 (WebCore::parseAVCCodecParameters): 105 (WebCore::createAVCCodecParametersString): 106 (WebCore::parseAVCDecoderConfigurationRecord): 107 (WebCore::parseHEVCCodecParameters): 108 (WebCore::createHEVCCodecParametersString): 109 (WebCore::parseHEVCDecoderConfigurationRecord): 110 (WebCore::parseDoViDecoderConfigurationRecord): 111 (WebCore::createDoViCodecParametersString): 112 * platform/graphics/HEVCUtilities.h: 113 * platform/graphics/PlatformVideoColorPrimaries.h: 114 * platform/graphics/PlatformVideoColorSpace.h: 115 (WebCore::PlatformVideoColorSpace::encode const): 116 (WebCore::PlatformVideoColorSpace::decode): 117 * platform/graphics/PlatformVideoMatrixCoefficients.h: 118 * platform/graphics/PlatformVideoTransferCharacteristics.h: 119 * platform/graphics/VideoTrackPrivate.h: 120 (WebCore::VideoTrackPrivate::codec const): 121 (WebCore::VideoTrackPrivate::setCodec): 122 (WebCore::VideoTrackPrivate::width const): 123 (WebCore::VideoTrackPrivate::setWidth): 124 (WebCore::VideoTrackPrivate::height const): 125 (WebCore::VideoTrackPrivate::setHeight): 126 (WebCore::VideoTrackPrivate::colorSpace const): 127 (WebCore::VideoTrackPrivate::setColorSpace): 128 (WebCore::VideoTrackPrivate::framerate const): 129 (WebCore::VideoTrackPrivate::setFramerate): 130 (WebCore::VideoTrackPrivate::bitrate const): 131 (WebCore::VideoTrackPrivate::setBitrate): 132 * platform/graphics/VideoTrackPrivateClient.h: 133 * platform/graphics/avfoundation/AVTrackPrivateAVFObjCImpl.h: 134 * platform/graphics/avfoundation/AVTrackPrivateAVFObjCImpl.mm: 135 (WebCore::assetTrackFor): 136 (WebCore::formatDescriptionFor): 137 (WebCore::AVTrackPrivateAVFObjCImpl::codec const): 138 (WebCore::AVTrackPrivateAVFObjCImpl::width const): 139 (WebCore::AVTrackPrivateAVFObjCImpl::height const): 140 (WebCore::AVTrackPrivateAVFObjCImpl::colorSpace const): 141 (WebCore::AVTrackPrivateAVFObjCImpl::framerate const): 142 (WebCore::AVTrackPrivateAVFObjCImpl::sampleRate const): 143 (WebCore::AVTrackPrivateAVFObjCImpl::numberOfChannels const): 144 (WebCore::AVTrackPrivateAVFObjCImpl::bitrate const): 145 * platform/graphics/avfoundation/AudioTrackPrivateAVF.h: 146 (WebCore::AudioTrackPrivateAVF::kind const): Deleted. 147 (WebCore::AudioTrackPrivateAVF::id const): Deleted. 148 (WebCore::AudioTrackPrivateAVF::label const): Deleted. 149 (WebCore::AudioTrackPrivateAVF::language const): Deleted. 150 (WebCore::AudioTrackPrivateAVF::trackIndex const): Deleted. 151 * platform/graphics/avfoundation/FormatDescriptionUtilities.cpp: Added. 152 (WebCore::presentationSizeFromFormatDescription): 153 (WebCore::colorSpaceFromFormatDescription): 154 (WebCore::codecFromFormatDescription): 155 * platform/graphics/avfoundation/FormatDescriptionUtilities.h: 156 * platform/graphics/avfoundation/MediaSelectionGroupAVFObjC.h: 157 * platform/graphics/avfoundation/MediaSelectionGroupAVFObjC.mm: 158 (WebCore::MediaSelectionOptionAVFObjC::assetTrack const): 159 * platform/graphics/avfoundation/VideoTrackPrivateAVF.h: 160 * platform/graphics/avfoundation/objc/AudioTrackPrivateAVFObjC.mm: 161 (WebCore::AudioTrackPrivateAVFObjC::resetPropertiesFromTrack): 162 * platform/graphics/avfoundation/objc/VideoTrackPrivateAVFObjC.cpp: 163 (WebCore::VideoTrackPrivateAVFObjC::resetPropertiesFromTrack): 164 * platform/graphics/avfoundation/objc/VideoTrackPrivateMediaSourceAVFObjC.mm: 165 (WebCore::VideoTrackPrivateMediaSourceAVFObjC::resetPropertiesFromTrack): 166 * platform/graphics/cocoa/VideoTrackPrivateWebM.cpp: 167 (WebCore::VideoTrackPrivateWebM::codec const): 168 (WebCore::VideoTrackPrivateWebM::width const): 169 (WebCore::VideoTrackPrivateWebM::height const): 170 (WebCore::VideoTrackPrivateWebM::framerate const): 171 * platform/graphics/cocoa/VideoTrackPrivateWebM.h: 172 1 173 2021-12-11 Jer Noble <jer.noble@apple.com> 2 174 -
trunk/Source/WebCore/DerivedSources-input.xcfilelist
r286813 r286908 742 742 $(PROJECT_DIR)/Modules/webauthn/PublicKeyCredentialType.idl 743 743 $(PROJECT_DIR)/Modules/webauthn/UserVerificationRequirement.idl 744 $(PROJECT_DIR)/Modules/webcodecs/VideoColorPrimaries.idl 745 $(PROJECT_DIR)/Modules/webcodecs/VideoColorSpace.idl 746 $(PROJECT_DIR)/Modules/webcodecs/VideoColorSpaceInit.idl 747 $(PROJECT_DIR)/Modules/webcodecs/VideoMatrixCoefficients.idl 748 $(PROJECT_DIR)/Modules/webcodecs/VideoTransferCharacteristics.idl 744 749 $(PROJECT_DIR)/Modules/webdatabase/DOMWindow+WebDatabase.idl 745 750 $(PROJECT_DIR)/Modules/webdatabase/Database.idl … … 1331 1336 $(PROJECT_DIR)/html/shadow/meterElementShadow.css 1332 1337 $(PROJECT_DIR)/html/track/AudioTrack.idl 1338 $(PROJECT_DIR)/html/track/AudioTrackConfiguration.idl 1333 1339 $(PROJECT_DIR)/html/track/AudioTrackList.idl 1334 1340 $(PROJECT_DIR)/html/track/DataCue.idl … … 1343 1349 $(PROJECT_DIR)/html/track/VTTRegionList.idl 1344 1350 $(PROJECT_DIR)/html/track/VideoTrack.idl 1351 $(PROJECT_DIR)/html/track/VideoTrackConfiguration.idl 1345 1352 $(PROJECT_DIR)/html/track/VideoTrackList.idl 1346 1353 $(PROJECT_DIR)/inspector/CommandLineAPIHost.idl -
trunk/Source/WebCore/DerivedSources-output.xcfilelist
r286813 r286908 225 225 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSAudioTrack.cpp 226 226 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSAudioTrack.h 227 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSAudioTrackConfiguration.cpp 228 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSAudioTrackConfiguration.h 227 229 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSAudioTrackList.cpp 228 230 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSAudioTrackList.h … … 2608 2610 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSValidityState.cpp 2609 2611 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSValidityState.h 2612 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSVideoColorPrimaries.cpp 2613 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSVideoColorPrimaries.h 2614 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSVideoColorSpace.cpp 2615 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSVideoColorSpace.h 2616 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSVideoColorSpaceInit.cpp 2617 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSVideoColorSpaceInit.h 2610 2618 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSVideoConfiguration.cpp 2611 2619 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSVideoConfiguration.h … … 2614 2622 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSVideoFrameRequestCallback.cpp 2615 2623 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSVideoFrameRequestCallback.h 2624 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSVideoMatrixCoefficients.cpp 2625 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSVideoMatrixCoefficients.h 2616 2626 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSVideoPlaybackQuality.cpp 2617 2627 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSVideoPlaybackQuality.h … … 2620 2630 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSVideoTrack.cpp 2621 2631 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSVideoTrack.h 2632 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSVideoTrackConfiguration.cpp 2633 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSVideoTrackConfiguration.h 2622 2634 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSVideoTrackList.cpp 2623 2635 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSVideoTrackList.h 2636 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSVideoTrackMediaSource.cpp 2637 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSVideoTrackMediaSource.h 2638 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSVideoTransferCharacteristics.cpp 2639 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSVideoTransferCharacteristics.h 2624 2640 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSVisibilityState.cpp 2625 2641 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebCore/JSVisibilityState.h -
trunk/Source/WebCore/DerivedSources.make
r286813 r286908 638 638 $(WebCore)/Modules/webauthn/PublicKeyCredentialType.idl \ 639 639 $(WebCore)/Modules/webauthn/UserVerificationRequirement.idl \ 640 $(WebCore)/Modules/webcodecs/VideoColorPrimaries.idl \ 641 $(WebCore)/Modules/webcodecs/VideoColorSpace.idl \ 642 $(WebCore)/Modules/webcodecs/VideoColorSpaceInit.idl \ 643 $(WebCore)/Modules/webcodecs/VideoMatrixCoefficients.idl \ 644 $(WebCore)/Modules/webcodecs/VideoTransferCharacteristics.idl \ 640 645 $(WebCore)/Modules/webdatabase/DOMWindow+WebDatabase.idl \ 641 646 $(WebCore)/Modules/webdatabase/Database.idl \ … … 1168 1173 $(WebCore)/html/canvas/WebGLVertexArrayObjectOES.idl \ 1169 1174 $(WebCore)/html/track/AudioTrack.idl \ 1175 $(WebCore)/html/track/AudioTrackConfiguration.idl \ 1170 1176 $(WebCore)/html/track/AudioTrackList.idl \ 1171 1177 $(WebCore)/html/track/DataCue.idl \ … … 1180 1186 $(WebCore)/html/track/VTTRegionList.idl \ 1181 1187 $(WebCore)/html/track/VideoTrack.idl \ 1188 $(WebCore)/html/track/VideoTrackConfiguration.idl \ 1182 1189 $(WebCore)/html/track/VideoTrackList.idl \ 1183 1190 $(WebCore)/mathml/MathMLElement.idl \ -
trunk/Source/WebCore/Headers.cmake
r286893 r286908 1526 1526 platform/graphics/PlatformTextTrack.h 1527 1527 platform/graphics/PlatformTimeRanges.h 1528 platform/graphics/PlatformVideoColorPrimaries.h 1529 platform/graphics/PlatformVideoColorSpace.h 1530 platform/graphics/PlatformVideoMatrixCoefficients.h 1531 platform/graphics/PlatformVideoTransferCharacteristics.h 1528 1532 platform/graphics/Region.h 1529 1533 platform/graphics/RemoteGraphicsContextGLProxyBase.h -
trunk/Source/WebCore/Modules/webcodecs/VideoColorPrimaries.h
r286907 r286908 28 28 #if ENABLE(VIDEO) 29 29 30 #include " TrackPrivateBaseClient.h"30 #include "PlatformVideoColorPrimaries.h" 31 31 32 32 namespace WebCore { 33 33 34 class VideoTrackPrivateClient : public TrackPrivateBaseClient { 35 public: 36 virtual void selectedChanged(bool) = 0; 37 }; 34 using VideoColorPrimaries = PlatformVideoColorPrimaries; 38 35 39 36 } -
trunk/Source/WebCore/Modules/webcodecs/VideoColorPrimaries.idl
r286907 r286908 24 24 */ 25 25 26 #pragma once 27 28 #if ENABLE(VIDEO) 29 30 #include "TrackPrivateBaseClient.h" 31 32 namespace WebCore { 33 34 class VideoTrackPrivateClient : public TrackPrivateBaseClient { 35 public: 36 virtual void selectedChanged(bool) = 0; 26 enum VideoColorPrimaries { 27 "bt709", 28 "bt470bg", 29 "smpte170m" 37 30 }; 38 39 }40 41 #endif -
trunk/Source/WebCore/Modules/webcodecs/VideoColorSpace.idl
r286907 r286908 24 24 */ 25 25 26 #pragma once 26 [ 27 Conditional=VIDEO, 28 Exposed=(Window,Worker), 29 ImplementationLacksVTable, 30 ] 31 interface VideoColorSpace { 32 readonly attribute VideoColorPrimaries? primaries; 33 readonly attribute VideoTransferCharacteristics? transfer; 34 readonly attribute VideoMatrixCoefficients? matrix; 35 readonly attribute boolean? fullRange; 27 36 28 #if ENABLE(VIDEO) 29 30 #include "TrackPrivateBaseClient.h" 31 32 namespace WebCore { 33 34 class VideoTrackPrivateClient : public TrackPrivateBaseClient { 35 public: 36 virtual void selectedChanged(bool) = 0; 37 [Default] object toJSON(); 37 38 }; 38 39 }40 41 #endif -
trunk/Source/WebCore/Modules/webcodecs/VideoColorSpaceInit.h
r286907 r286908 28 28 #if ENABLE(VIDEO) 29 29 30 #include " TrackPrivateBaseClient.h"30 #include "PlatformVideoColorSpace.h" 31 31 32 32 namespace WebCore { 33 33 34 class VideoTrackPrivateClient : public TrackPrivateBaseClient { 35 public: 36 virtual void selectedChanged(bool) = 0; 37 }; 34 using VideoColorSpaceInit = PlatformVideoColorSpace; 38 35 39 36 } -
trunk/Source/WebCore/Modules/webcodecs/VideoColorSpaceInit.idl
r286907 r286908 23 23 * THE POSSIBILITY OF SUCH DAMAGE. 24 24 */ 25 26 #pragma once 27 28 #if ENABLE(VIDEO) 29 30 #include "TrackPrivateBaseClient.h" 31 32 namespace WebCore { 33 34 class VideoTrackPrivateClient : public TrackPrivateBaseClient { 35 public: 36 virtual void selectedChanged(bool) = 0; 25 [ 26 Conditional=VIDEO, 27 JSGenerateToJSObject, 28 ] dictionary VideoColorSpaceInit { 29 VideoColorPrimaries primaries; 30 VideoTransferCharacteristics transfer; 31 VideoMatrixCoefficients matrix; 32 boolean fullRange; 37 33 }; 38 39 }40 41 #endif -
trunk/Source/WebCore/Modules/webcodecs/VideoMatrixCoefficients.h
r286907 r286908 28 28 #if ENABLE(VIDEO) 29 29 30 #include " TrackPrivateBaseClient.h"30 #include "PlatformVideoMatrixCoefficients.h" 31 31 32 32 namespace WebCore { 33 33 34 class VideoTrackPrivateClient : public TrackPrivateBaseClient { 35 public: 36 virtual void selectedChanged(bool) = 0; 34 using VideoMatrixCoefficients = PlatformVideoMatrixCoefficients; 35 37 36 }; 38 37 39 }40 41 38 #endif -
trunk/Source/WebCore/Modules/webcodecs/VideoMatrixCoefficients.idl
r286907 r286908 24 24 */ 25 25 26 #pragma once 27 28 #if ENABLE(VIDEO) 29 30 #include "TrackPrivateBaseClient.h" 31 32 namespace WebCore { 33 34 class VideoTrackPrivateClient : public TrackPrivateBaseClient { 35 public: 36 virtual void selectedChanged(bool) = 0; 26 enum VideoMatrixCoefficients { 27 "rgb", 28 "bt709", 29 "bt470bg", 30 "smpte170m" 37 31 }; 38 39 }40 41 #endif -
trunk/Source/WebCore/Modules/webcodecs/VideoTransferCharacteristics.h
r286907 r286908 28 28 #if ENABLE(VIDEO) 29 29 30 #include " TrackPrivateBaseClient.h"30 #include "PlatformVideoTransferCharacteristics.h" 31 31 32 32 namespace WebCore { 33 33 34 class VideoTrackPrivateClient : public TrackPrivateBaseClient { 35 public: 36 virtual void selectedChanged(bool) = 0; 37 }; 34 using VideoTransferCharacteristics = PlatformVideoTransferCharacteristics; 38 35 39 36 } -
trunk/Source/WebCore/Modules/webcodecs/VideoTransferCharacteristics.idl
r286907 r286908 24 24 */ 25 25 26 #pragma once 27 28 #if ENABLE(VIDEO) 29 30 #include "TrackPrivateBaseClient.h" 31 32 namespace WebCore { 33 34 class VideoTrackPrivateClient : public TrackPrivateBaseClient { 35 public: 36 virtual void selectedChanged(bool) = 0; 26 enum VideoTransferCharacteristics { 27 "bt709", 28 "smpte170m", 29 "iec61966-2-1" 37 30 }; 38 39 }40 41 #endif -
trunk/Source/WebCore/PAL/ChangeLog
r286893 r286908 1 2021-12-11 Jer Noble <jer.noble@apple.com> 2 3 Add an experimental trackConfiguration accessor on AudioTrack & VideoTrack. 4 https://bugs.webkit.org/show_bug.cgi?id=230841 5 6 Reviewed by Eric Carlson. 7 8 * pal/cf/CoreMediaSoftLink.cpp: 9 * pal/cf/CoreMediaSoftLink.h: 10 * pal/spi/cocoa/AVFoundationSPI.h: 11 1 12 2021-12-10 Eric Carlson <eric.carlson@apple.com> 2 13 -
trunk/Source/WebCore/PAL/pal/cf/CoreMediaSoftLink.cpp
r286813 r286908 52 52 SOFT_LINK_FUNCTION_FOR_SOURCE_WITH_EXPORT(PAL, CoreMedia, CMBlockBufferIsRangeContiguous, Boolean, (CMBlockBufferRef theBuffer, size_t offset, size_t length), (theBuffer, offset, length), PAL_EXPORT) 53 53 SOFT_LINK_FUNCTION_FOR_SOURCE_WITH_EXPORT(PAL, CoreMedia, CMBlockBufferReplaceDataBytes, OSStatus, (const void* sourceBytes, CMBlockBufferRef destinationBuffer, size_t offsetIntoDestination, size_t dataLength), (sourceBytes, destinationBuffer, offsetIntoDestination, dataLength), PAL_EXPORT) 54 SOFT_LINK_FUNCTION_FOR_SOURCE_WITH_EXPORT(PAL, CoreMedia, CMFormatDescriptionGetExtension, CFPropertyListRef, (CMFormatDescriptionRef desc, CFStringRef extensionKey), (desc, extensionKey), PAL_EXPORT) 54 55 SOFT_LINK_FUNCTION_FOR_SOURCE_WITH_EXPORT(PAL, CoreMedia, CMFormatDescriptionGetExtensions, CFDictionaryRef, (CMFormatDescriptionRef desc), (desc), PAL_EXPORT) 55 56 SOFT_LINK_FUNCTION_FOR_SOURCE_WITH_EXPORT(PAL, CoreMedia, CMSampleBufferGetTypeID, CFTypeID, (void), (), PAL_EXPORT) … … 81 82 82 83 SOFT_LINK_CONSTANT_FOR_SOURCE_WITH_EXPORT(PAL, CoreMedia, kCMFormatDescriptionExtension_SampleDescriptionExtensionAtoms, CFStringRef, PAL_EXPORT) 84 SOFT_LINK_CONSTANT_FOR_SOURCE_WITH_EXPORT(PAL, CoreMedia, kCMFormatDescriptionExtension_ColorPrimaries, CFStringRef, PAL_EXPORT) 83 85 SOFT_LINK_CONSTANT_FOR_SOURCE_WITH_EXPORT(PAL, CoreMedia, kCMFormatDescriptionColorPrimaries_DCI_P3, CFStringRef, PAL_EXPORT) 84 86 SOFT_LINK_CONSTANT_FOR_SOURCE_WITH_EXPORT(PAL, CoreMedia, kCMFormatDescriptionColorPrimaries_ITU_R_2020, CFStringRef, PAL_EXPORT) … … 91 93 SOFT_LINK_CONSTANT_FOR_SOURCE_WITH_EXPORT(PAL, CoreMedia, kCMFormatDescriptionTransferFunction_SMPTE_ST_428_1, CFStringRef, PAL_EXPORT) 92 94 SOFT_LINK_CONSTANT_FOR_SOURCE_WITH_EXPORT(PAL, CoreMedia, kCMFormatDescriptionYCbCrMatrix_ITU_R_2020, CFStringRef, PAL_EXPORT) 95 SOFT_LINK_CONSTANT_FOR_SOURCE_WITH_EXPORT(PAL, CoreMedia, kCMFormatDescriptionColorPrimaries_ITU_R_709_2, CFStringRef, PAL_EXPORT) 96 SOFT_LINK_CONSTANT_FOR_SOURCE_WITH_EXPORT(PAL, CoreMedia, kCMFormatDescriptionColorPrimaries_EBU_3213, CFStringRef, PAL_EXPORT) 97 SOFT_LINK_CONSTANT_FOR_SOURCE_WITH_EXPORT(PAL, CoreMedia, kCMFormatDescriptionColorPrimaries_SMPTE_C, CFStringRef, PAL_EXPORT) 98 SOFT_LINK_CONSTANT_FOR_SOURCE_WITH_EXPORT(PAL, CoreMedia, kCMFormatDescriptionExtension_TransferFunction, CFStringRef, PAL_EXPORT) 99 SOFT_LINK_CONSTANT_FOR_SOURCE_WITH_EXPORT(PAL, CoreMedia, kCMFormatDescriptionTransferFunction_ITU_R_709_2, CFStringRef, PAL_EXPORT) 100 SOFT_LINK_CONSTANT_FOR_SOURCE_WITH_EXPORT(PAL, CoreMedia, kCMFormatDescriptionExtension_YCbCrMatrix, CFStringRef, PAL_EXPORT) 101 SOFT_LINK_CONSTANT_FOR_SOURCE_WITH_EXPORT(PAL, CoreMedia, kCVImageBufferYCbCrMatrix_ITU_R_709_2, CFStringRef, PAL_EXPORT) 102 SOFT_LINK_CONSTANT_FOR_SOURCE_WITH_EXPORT(PAL, CoreMedia, kCVImageBufferYCbCrMatrix_ITU_R_601_4, CFStringRef, PAL_EXPORT) 103 SOFT_LINK_CONSTANT_FOR_SOURCE_WITH_EXPORT(PAL, CoreMedia, kCMFormatDescriptionYCbCrMatrix_SMPTE_240M_1995, CFStringRef, PAL_EXPORT) 93 104 94 105 SOFT_LINK_CONSTANT_FOR_SOURCE_WITH_EXPORT(PAL, CoreMedia, kCMTextMarkupAlignmentType_End, CFStringRef, PAL_EXPORT) -
trunk/Source/WebCore/PAL/pal/cf/CoreMediaSoftLink.h
r286813 r286908 57 57 SOFT_LINK_FUNCTION_FOR_HEADER(PAL, CoreMedia, CMFormatDescriptionGetExtensions, CFDictionaryRef, (CMFormatDescriptionRef desc), (desc)) 58 58 #define CMFormatDescriptionGetExtensions softLink_CoreMedia_CMFormatDescriptionGetExtensions 59 SOFT_LINK_FUNCTION_FOR_HEADER(PAL, CoreMedia, CMFormatDescriptionGetExtension, CFPropertyListRef, (CMFormatDescriptionRef desc, CFStringRef extensionKey), (desc, extensionKey)) 60 #define CMFormatDescriptionGetExtension softLink_CoreMedia_CMFormatDescriptionGetExtension 59 61 SOFT_LINK_FUNCTION_FOR_HEADER(PAL, CoreMedia, CMSampleBufferGetTypeID, CFTypeID, (void), ()) 60 62 #define CMSampleBufferGetTypeID softLink_CoreMedia_CMSampleBufferGetTypeID … … 112 114 SOFT_LINK_CONSTANT_FOR_HEADER(PAL, CoreMedia, kCMFormatDescriptionExtension_SampleDescriptionExtensionAtoms, CFStringRef) 113 115 #define kCMFormatDescriptionExtension_SampleDescriptionExtensionAtoms get_CoreMedia_kCMFormatDescriptionExtension_SampleDescriptionExtensionAtoms() 116 SOFT_LINK_CONSTANT_FOR_HEADER(PAL, CoreMedia, kCMFormatDescriptionExtension_ColorPrimaries, CFStringRef) 114 117 SOFT_LINK_CONSTANT_FOR_HEADER(PAL, CoreMedia, kCMFormatDescriptionColorPrimaries_DCI_P3, CFStringRef) 115 118 #define kCMFormatDescriptionColorPrimaries_DCI_P3 get_CoreMedia_kCMFormatDescriptionColorPrimaries_DCI_P3() … … 132 135 SOFT_LINK_CONSTANT_FOR_HEADER(PAL, CoreMedia, kCMFormatDescriptionYCbCrMatrix_ITU_R_2020, CFStringRef) 133 136 #define kCMFormatDescriptionYCbCrMatrix_ITU_R_2020 get_CoreMedia_kCMFormatDescriptionYCbCrMatrix_ITU_R_2020() 137 SOFT_LINK_CONSTANT_FOR_HEADER(PAL, CoreMedia, kCMFormatDescriptionColorPrimaries_ITU_R_709_2, CFStringRef) 138 SOFT_LINK_CONSTANT_FOR_HEADER(PAL, CoreMedia, kCMFormatDescriptionColorPrimaries_EBU_3213, CFStringRef) 139 SOFT_LINK_CONSTANT_FOR_HEADER(PAL, CoreMedia, kCMFormatDescriptionColorPrimaries_SMPTE_C, CFStringRef) 140 SOFT_LINK_CONSTANT_FOR_HEADER(PAL, CoreMedia, kCMFormatDescriptionExtension_TransferFunction, CFStringRef) 141 SOFT_LINK_CONSTANT_FOR_HEADER(PAL, CoreMedia, kCMFormatDescriptionTransferFunction_ITU_R_709_2, CFStringRef) 142 SOFT_LINK_CONSTANT_FOR_HEADER(PAL, CoreMedia, kCMFormatDescriptionExtension_YCbCrMatrix, CFStringRef) 143 SOFT_LINK_CONSTANT_FOR_HEADER(PAL, CoreMedia, kCVImageBufferYCbCrMatrix_ITU_R_709_2, CFStringRef) 144 SOFT_LINK_CONSTANT_FOR_HEADER(PAL, CoreMedia, kCVImageBufferYCbCrMatrix_ITU_R_601_4, CFStringRef) 145 SOFT_LINK_CONSTANT_FOR_HEADER(PAL, CoreMedia, kCMFormatDescriptionYCbCrMatrix_SMPTE_240M_1995, CFStringRef) 134 146 135 147 SOFT_LINK_CONSTANT_FOR_HEADER(PAL, CoreMedia, kCMTextMarkupAlignmentType_End, CFStringRef) -
trunk/Source/WebCore/PAL/pal/spi/cocoa/AVFoundationSPI.h
r286813 r286908 38 38 #import <AVFoundation/AVAssetCache_Private.h> 39 39 #import <AVFoundation/AVCaptureSession_Private.h> 40 #import <AVFoundation/AVMediaSelectionGroup_Private.h> 40 41 #import <AVFoundation/AVOutputContext_Private.h> 41 42 #import <AVFoundation/AVOutputDevice.h> … … 204 205 205 206 #endif // ENABLE(MEDIA_SOURCE) 207 208 #import <AVFoundation/AVMediaSelectionGroup.h> 209 NS_ASSUME_NONNULL_BEGIN 210 @interface AVMediaSelectionOption (AVMediaSelectionOption_Private) 211 @property (nonatomic, readonly) AVAssetTrack *track; 212 @end 213 NS_ASSUME_NONNULL_END 206 214 207 215 #endif // USE(APPLE_INTERNAL_SDK) -
trunk/Source/WebCore/Sources.txt
r286842 r286908 2880 2880 JSAudioTimestamp.cpp 2881 2881 JSAudioTrack.cpp 2882 JSAudioTrackConfiguration.cpp 2882 2883 JSAudioTrackList.cpp 2883 2884 JSAudioWorklet.cpp … … 3947 3948 JSVTTRegionList.cpp 3948 3949 JSValidityState.cpp 3950 JSVideoColorPrimaries.cpp 3951 JSVideoColorSpace.cpp 3952 JSVideoColorSpaceInit.cpp 3949 3953 JSVideoConfiguration.cpp 3950 3954 JSVideoFrameMetadata.cpp 3951 3955 JSVideoFrameRequestCallback.cpp 3956 JSVideoMatrixCoefficients.cpp 3952 3957 JSVideoPlaybackQuality.cpp 3953 3958 JSVideoTrack.cpp 3959 JSVideoTrackConfiguration.cpp 3954 3960 JSVideoTrackList.cpp 3961 JSVideoTransferCharacteristics.cpp 3955 3962 JSVisibilityState.cpp 3956 3963 JSVisualViewport.cpp -
trunk/Source/WebCore/SourcesCocoa.txt
r286893 r286908 290 290 platform/graphics/avfoundation/AudioSourceProviderAVFObjC.mm @no-unify 291 291 platform/graphics/avfoundation/CDMPrivateMediaSourceAVFObjC.mm 292 platform/graphics/avfoundation/FormatDescriptionUtilities.cpp 292 293 platform/graphics/avfoundation/ISOFairPlayStreamingPsshBox.cpp 293 294 platform/graphics/avfoundation/InbandMetadataTextTrackPrivateAVF.cpp -
trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj
r286893 r286908 4417 4417 CD19FEA81F573972000C42FB /* ImageDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = CD19FEA61F573972000C42FB /* ImageDecoder.h */; settings = {ATTRIBUTES = (Private, ); }; }; 4418 4418 CD19FEAE1F574B6D000C42FB /* ImageDecoderAVFObjC.h in Headers */ = {isa = PBXBuildFile; fileRef = CD19FEAC1F574B6D000C42FB /* ImageDecoderAVFObjC.h */; settings = {ATTRIBUTES = (Private, ); }; }; 4419 CD1F9B01270020B700617EB6 /* PlatformVideoColorSpace.h in Headers */ = {isa = PBXBuildFile; fileRef = CD1F9AFA26FD385900617EB6 /* PlatformVideoColorSpace.h */; settings = {ATTRIBUTES = (Private, ); }; }; 4420 CD1F9B022700323D00617EB6 /* PlatformVideoColorPrimaries.h in Headers */ = {isa = PBXBuildFile; fileRef = CD1F9AFB26FD38C900617EB6 /* PlatformVideoColorPrimaries.h */; settings = {ATTRIBUTES = (Private, ); }; }; 4421 CD1F9B032700323D00617EB6 /* PlatformVideoMatrixCoefficients.h in Headers */ = {isa = PBXBuildFile; fileRef = CD1F9AFD26FD38CB00617EB6 /* PlatformVideoMatrixCoefficients.h */; settings = {ATTRIBUTES = (Private, ); }; }; 4422 CD1F9B042700323D00617EB6 /* PlatformVideoTransferCharacteristics.h in Headers */ = {isa = PBXBuildFile; fileRef = CD1F9AFC26FD38CA00617EB6 /* PlatformVideoTransferCharacteristics.h */; settings = {ATTRIBUTES = (Private, ); }; }; 4419 4423 CD1F9B14270235F700617EB6 /* VideoTrackPrivateClient.h in Headers */ = {isa = PBXBuildFile; fileRef = CD1F9B12270235F700617EB6 /* VideoTrackPrivateClient.h */; settings = {ATTRIBUTES = (Private, ); }; }; 4420 4424 CD1F9B162702360F00617EB6 /* AudioTrackPrivateClient.h in Headers */ = {isa = PBXBuildFile; fileRef = CD1F9B152702360E00617EB6 /* AudioTrackPrivateClient.h */; settings = {ATTRIBUTES = (Private, ); }; }; … … 15781 15785 CD19FEAD1F574B6D000C42FB /* ImageDecoderAVFObjC.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = ImageDecoderAVFObjC.mm; sourceTree = "<group>"; }; 15782 15786 CD1E7346167BC78E009A885D /* TextTrackRepresentation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TextTrackRepresentation.cpp; sourceTree = "<group>"; }; 15787 CD1F9AE626FD1F7B00617EB6 /* VideoTrackConfiguration.idl */ = {isa = PBXFileReference; lastKnownFileType = text; path = VideoTrackConfiguration.idl; sourceTree = "<group>"; }; 15788 CD1F9AE726FD1F7B00617EB6 /* VideoTrackConfiguration.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VideoTrackConfiguration.h; sourceTree = "<group>"; }; 15789 CD1F9AEB26FD20C600617EB6 /* VideoColorSpaceInit.idl */ = {isa = PBXFileReference; lastKnownFileType = text; path = VideoColorSpaceInit.idl; sourceTree = "<group>"; }; 15790 CD1F9AEC26FD20C600617EB6 /* VideoColorSpaceInit.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VideoColorSpaceInit.h; sourceTree = "<group>"; }; 15791 CD1F9AEE26FD20ED00617EB6 /* VideoColorPrimaries.idl */ = {isa = PBXFileReference; lastKnownFileType = text; path = VideoColorPrimaries.idl; sourceTree = "<group>"; }; 15792 CD1F9AEF26FD20ED00617EB6 /* VideoColorPrimaries.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VideoColorPrimaries.h; sourceTree = "<group>"; }; 15793 CD1F9AF126FD211700617EB6 /* VideoMatrixCoefficients.idl */ = {isa = PBXFileReference; lastKnownFileType = text; path = VideoMatrixCoefficients.idl; sourceTree = "<group>"; }; 15794 CD1F9AF226FD211700617EB6 /* VideoMatrixCoefficients.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VideoMatrixCoefficients.h; sourceTree = "<group>"; }; 15795 CD1F9AF426FD215600617EB6 /* VideoColorSpace.idl */ = {isa = PBXFileReference; lastKnownFileType = text; path = VideoColorSpace.idl; sourceTree = "<group>"; }; 15796 CD1F9AF526FD215600617EB6 /* VideoColorSpace.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VideoColorSpace.h; sourceTree = "<group>"; }; 15797 CD1F9AF726FD2CAD00617EB6 /* VideoTransferCharacteristics.idl */ = {isa = PBXFileReference; lastKnownFileType = text; path = VideoTransferCharacteristics.idl; sourceTree = "<group>"; }; 15798 CD1F9AF826FD2CAD00617EB6 /* VideoTransferCharacteristics.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VideoTransferCharacteristics.h; sourceTree = "<group>"; }; 15799 CD1F9AFA26FD385900617EB6 /* PlatformVideoColorSpace.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PlatformVideoColorSpace.h; sourceTree = "<group>"; }; 15800 CD1F9AFB26FD38C900617EB6 /* PlatformVideoColorPrimaries.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PlatformVideoColorPrimaries.h; sourceTree = "<group>"; }; 15801 CD1F9AFC26FD38CA00617EB6 /* PlatformVideoTransferCharacteristics.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PlatformVideoTransferCharacteristics.h; sourceTree = "<group>"; }; 15802 CD1F9AFD26FD38CB00617EB6 /* PlatformVideoMatrixCoefficients.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PlatformVideoMatrixCoefficients.h; sourceTree = "<group>"; }; 15783 15803 CD1F9B12270235F700617EB6 /* VideoTrackPrivateClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VideoTrackPrivateClient.h; sourceTree = "<group>"; }; 15784 15804 CD1F9B152702360E00617EB6 /* AudioTrackPrivateClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AudioTrackPrivateClient.h; sourceTree = "<group>"; }; … … 15839 15859 CD3E252118046BCD00E27F56 /* CSSGridTemplateAreasValue.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CSSGridTemplateAreasValue.cpp; sourceTree = "<group>"; }; 15840 15860 CD3E252218046BCD00E27F56 /* CSSGridTemplateAreasValue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CSSGridTemplateAreasValue.h; sourceTree = "<group>"; }; 15861 CD42053B272318B500B464D7 /* JSAudioTrackConfiguration.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = JSAudioTrackConfiguration.cpp; sourceTree = "<group>"; }; 15862 CD42053E272318C300B464D7 /* JSAudioTrackConfiguration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSAudioTrackConfiguration.h; sourceTree = "<group>"; }; 15863 CD42053F272318E900B464D7 /* JSVideoTrackConfiguration.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = JSVideoTrackConfiguration.h; sourceTree = "<group>"; }; 15864 CD420540272318E900B464D7 /* JSVideoTrackConfiguration.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = JSVideoTrackConfiguration.cpp; sourceTree = "<group>"; }; 15841 15865 CD4AC5281496AE2F0087C4EF /* Composite.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; name = Composite.wav; path = platform/audio/resources/Composite.wav; sourceTree = SOURCE_ROOT; }; 15842 15866 CD4E0AFA11F7BC27009D3811 /* fullscreen.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = fullscreen.css; sourceTree = "<group>"; }; … … 16095 16119 CDD7089418359F6E002B3DC6 /* SampleMap.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SampleMap.cpp; sourceTree = "<group>"; }; 16096 16120 CDD7089518359F6F002B3DC6 /* SampleMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SampleMap.h; sourceTree = "<group>"; }; 16121 CDD8D30D271E991700DAA256 /* AudioTrackConfiguration.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AudioTrackConfiguration.h; sourceTree = "<group>"; }; 16122 CDD8D30E271E991700DAA256 /* AudioTrackConfiguration.idl */ = {isa = PBXFileReference; lastKnownFileType = text; path = AudioTrackConfiguration.idl; sourceTree = "<group>"; }; 16123 CDD8D310271F2C8D00DAA256 /* FormatDescriptionUtilities.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FormatDescriptionUtilities.h; sourceTree = "<group>"; }; 16124 CDD8D311271F2C8D00DAA256 /* FormatDescriptionUtilities.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = FormatDescriptionUtilities.cpp; sourceTree = "<group>"; }; 16097 16125 CDDC1E7918A952F30027A9D4 /* MediaSourcePrivateClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaSourcePrivateClient.h; sourceTree = "<group>"; }; 16098 16126 CDDDEA222538CD8000A1300C /* MediaSession.idl */ = {isa = PBXFileReference; lastKnownFileType = text; path = MediaSession.idl; sourceTree = "<group>"; }; … … 18581 18609 CD318621199F1E2A0030A0F7 /* CDMPrivateMediaSourceAVFObjC.h */, 18582 18610 CD318620199F1E2A0030A0F7 /* CDMPrivateMediaSourceAVFObjC.mm */, 18611 CDD8D311271F2C8D00DAA256 /* FormatDescriptionUtilities.cpp */, 18612 CDD8D310271F2C8D00DAA256 /* FormatDescriptionUtilities.h */, 18583 18613 07E9E12F18F62B370011A3A4 /* InbandMetadataTextTrackPrivateAVF.cpp */, 18584 18614 07E9E12D18F5E2760011A3A4 /* InbandMetadataTextTrackPrivateAVF.h */, … … 25852 25882 FD315FA212B025B100C1A359 /* webaudio */, 25853 25883 57D8462A1FEAF57F00CA3682 /* webauthn */, 25884 CD1F9AEA26FD20A600617EB6 /* webcodecs */, 25854 25885 97BC69D51505F054001B74AC /* webdatabase */, 25855 25886 996E59DA1DF00D45006612B9 /* webdriver */, … … 26706 26737 BE8EF03E171C8FF9009B48C3 /* JSAudioTrack.cpp */, 26707 26738 BE8EF03F171C8FF9009B48C3 /* JSAudioTrack.h */, 26739 CD42053B272318B500B464D7 /* JSAudioTrackConfiguration.cpp */, 26740 CD42053E272318C300B464D7 /* JSAudioTrackConfiguration.h */, 26708 26741 BE8EF040171C8FF9009B48C3 /* JSAudioTrackList.cpp */, 26709 26742 BE8EF041171C8FF9009B48C3 /* JSAudioTrackList.h */, … … 26968 27001 BE8EF046171C9014009B48C3 /* JSVideoTrack.cpp */, 26969 27002 BE8EF047171C9014009B48C3 /* JSVideoTrack.h */, 27003 CD420540272318E900B464D7 /* JSVideoTrackConfiguration.cpp */, 27004 CD42053F272318E900B464D7 /* JSVideoTrackConfiguration.h */, 26970 27005 BE8EF048171C9014009B48C3 /* JSVideoTrackList.cpp */, 26971 27006 BE8EF049171C9014009B48C3 /* JSVideoTrackList.h */, … … 27919 27954 BE88E0CE1715D2A200658D98 /* AudioTrack.idl */, 27920 27955 CD1F9B1927023A7600617EB6 /* AudioTrackClient.h */, 27956 CDD8D30D271E991700DAA256 /* AudioTrackConfiguration.h */, 27957 CDD8D30E271E991700DAA256 /* AudioTrackConfiguration.idl */, 27921 27958 BE88E0CF1715D2A200658D98 /* AudioTrackList.cpp */, 27922 27959 BE88E0D01715D2A200658D98 /* AudioTrackList.h */, … … 27964 28001 BE88E0D41715D2A200658D98 /* VideoTrack.idl */, 27965 28002 CD1F9B1727023A2900617EB6 /* VideoTrackClient.h */, 28003 CD1F9AE726FD1F7B00617EB6 /* VideoTrackConfiguration.h */, 28004 CD1F9AE626FD1F7B00617EB6 /* VideoTrackConfiguration.idl */, 27966 28005 BE88E0D51715D2A200658D98 /* VideoTrackList.cpp */, 27967 28006 BE88E0D61715D2A200658D98 /* VideoTrackList.h */, … … 28796 28835 074E82B818A69F0E007EF54C /* PlatformTimeRanges.cpp */, 28797 28836 074E82B918A69F0E007EF54C /* PlatformTimeRanges.h */, 28837 CD1F9AFB26FD38C900617EB6 /* PlatformVideoColorPrimaries.h */, 28838 CD1F9AFA26FD385900617EB6 /* PlatformVideoColorSpace.h */, 28839 CD1F9AFD26FD38CB00617EB6 /* PlatformVideoMatrixCoefficients.h */, 28840 CD1F9AFC26FD38CA00617EB6 /* PlatformVideoTransferCharacteristics.h */, 28798 28841 BCAB417F13E356E800D8AAF3 /* Region.cpp */, 28799 28842 BCAB418013E356E800D8AAF3 /* Region.h */, … … 29929 29972 ); 29930 29973 path = ios; 29974 sourceTree = "<group>"; 29975 }; 29976 CD1F9AEA26FD20A600617EB6 /* webcodecs */ = { 29977 isa = PBXGroup; 29978 children = ( 29979 CD1F9AEF26FD20ED00617EB6 /* VideoColorPrimaries.h */, 29980 CD1F9AEE26FD20ED00617EB6 /* VideoColorPrimaries.idl */, 29981 CD1F9AF526FD215600617EB6 /* VideoColorSpace.h */, 29982 CD1F9AF426FD215600617EB6 /* VideoColorSpace.idl */, 29983 CD1F9AEC26FD20C600617EB6 /* VideoColorSpaceInit.h */, 29984 CD1F9AEB26FD20C600617EB6 /* VideoColorSpaceInit.idl */, 29985 CD1F9AF226FD211700617EB6 /* VideoMatrixCoefficients.h */, 29986 CD1F9AF126FD211700617EB6 /* VideoMatrixCoefficients.idl */, 29987 CD1F9AF826FD2CAD00617EB6 /* VideoTransferCharacteristics.h */, 29988 CD1F9AF726FD2CAD00617EB6 /* VideoTransferCharacteristics.idl */, 29989 ); 29990 path = webcodecs; 29931 29991 sourceTree = "<group>"; 29932 29992 }; … … 36288 36348 0F7D07331884C56C00B4AF86 /* PlatformTextTrack.h in Headers */, 36289 36349 074E82BB18A69F0E007EF54C /* PlatformTimeRanges.h in Headers */, 36350 CD1F9B022700323D00617EB6 /* PlatformVideoColorPrimaries.h in Headers */, 36351 CD1F9B01270020B700617EB6 /* PlatformVideoColorSpace.h in Headers */, 36352 CD1F9B032700323D00617EB6 /* PlatformVideoMatrixCoefficients.h in Headers */, 36353 CD1F9B042700323D00617EB6 /* PlatformVideoTransferCharacteristics.h in Headers */, 36290 36354 52B0D4BE1C57FD1E0077CE53 /* PlatformView.h in Headers */, 36291 36355 95BA4FAD26D981AA002A0E62 /* PlatformViewController.h in Headers */, -
trunk/Source/WebCore/html/track/AudioTrack.cpp
r286813 r286908 36 36 37 37 #include "AudioTrackClient.h" 38 #include "AudioTrackConfiguration.h" 38 39 #include "AudioTrackList.h" 39 40 #include "AudioTrackPrivate.h" … … 82 83 , m_private(trackPrivate) 83 84 , m_enabled(trackPrivate.enabled()) 85 , m_configuration(AudioTrackConfiguration::create()) 84 86 { 85 87 m_private->setClient(*this); 86 88 updateKindFromPrivate(); 89 updateConfigurationFromPrivate(); 87 90 } 88 91 … … 106 109 107 110 updateKindFromPrivate(); 111 updateConfigurationFromPrivate(); 108 112 setId(m_private->id()); 109 113 } … … 226 230 } 227 231 232 void AudioTrack::updateConfigurationFromPrivate() 233 { 234 m_configuration->setCodec(m_private->codec()); 235 m_configuration->setSampleRate(m_private->sampleRate()); 236 m_configuration->setNumberOfChannels(m_private->numberOfChannels()); 237 m_configuration->setBitrate(m_private->bitrate()); 238 } 239 228 240 #if !RELEASE_LOG_DISABLED 229 241 void AudioTrack::setLogger(const Logger& logger, const void* logIdentifier) -
trunk/Source/WebCore/html/track/AudioTrack.h
r286813 r286908 36 36 37 37 class AudioTrackClient; 38 class AudioTrackConfiguration; 38 39 class AudioTrackList; 39 40 … … 66 67 void setLanguage(const AtomString&) final; 67 68 69 AudioTrackConfiguration& configuration() const { return m_configuration; } 70 68 71 #if !RELEASE_LOG_DISABLED 69 72 void setLogger(const Logger&, const void*) final; … … 85 88 86 89 void updateKindFromPrivate(); 90 void updateConfigurationFromPrivate(); 87 91 88 92 #if !RELEASE_LOG_DISABLED … … 94 98 Ref<AudioTrackPrivate> m_private; 95 99 bool m_enabled { false }; 100 101 Ref<AudioTrackConfiguration> m_configuration; 96 102 }; 97 103 -
trunk/Source/WebCore/html/track/AudioTrack.idl
r286813 r286908 34 34 readonly attribute DOMString label; 35 35 [SettingsConditionallyReadWrite=MediaSourceEnabled] attribute DOMString language; 36 [EnabledBySetting=TrackConfigurationEnabled] readonly attribute AudioTrackConfiguration configuration; 36 37 37 38 attribute boolean enabled; -
trunk/Source/WebCore/html/track/AudioTrackConfiguration.h
r286907 r286908 28 28 #if ENABLE(VIDEO) 29 29 30 #include "TrackPrivateBaseClient.h"30 #include <wtf/text/WTFString.h> 31 31 32 32 namespace WebCore { 33 33 34 class VideoTrackPrivateClient : public TrackPrivateBaseClient { 34 struct AudioTrackConfigurationInit { 35 String codec; 36 uint32_t sampleRate { 0 }; 37 uint32_t numberOfChannels { 0 }; 38 uint64_t bitrate { 0 }; 39 }; 40 41 class AudioTrackConfiguration : public RefCounted<AudioTrackConfiguration> { 42 WTF_MAKE_FAST_ALLOCATED; 35 43 public: 36 virtual void selectedChanged(bool) = 0; 44 static Ref<AudioTrackConfiguration> create(AudioTrackConfigurationInit&& init) { return adoptRef(*new AudioTrackConfiguration(WTFMove(init))); } 45 static Ref<AudioTrackConfiguration> create() { return adoptRef(*new AudioTrackConfiguration()); } 46 47 String codec() const { return m_state.codec; } 48 void setCodec(String codec) { m_state.codec = codec; } 49 50 uint32_t sampleRate() const { return m_state.sampleRate; } 51 void setSampleRate(uint32_t sampleRate) { m_state.sampleRate = sampleRate; } 52 53 uint32_t numberOfChannels() const { return m_state.numberOfChannels; } 54 void setNumberOfChannels(uint32_t numberOfChannels) { m_state.numberOfChannels = numberOfChannels; } 55 56 uint64_t bitrate() const { return m_state.bitrate; } 57 void setBitrate(uint64_t bitrate) { m_state.bitrate = bitrate; } 58 59 private: 60 AudioTrackConfiguration(AudioTrackConfigurationInit&& init) 61 : m_state(init) 62 { 63 } 64 AudioTrackConfiguration() = default; 65 66 AudioTrackConfigurationInit m_state; 37 67 }; 38 68 -
trunk/Source/WebCore/html/track/AudioTrackConfiguration.idl
r286907 r286908 23 23 * THE POSSIBILITY OF SUCH DAMAGE. 24 24 */ 25 26 #pragma once 27 28 #if ENABLE(VIDEO) 29 30 #include "TrackPrivateBaseClient.h" 31 32 namespace WebCore { 33 34 class VideoTrackPrivateClient : public TrackPrivateBaseClient { 35 public: 36 virtual void selectedChanged(bool) = 0; 25 [ 26 Conditional=VIDEO, 27 ImplementationLacksVTable, 28 Exposed=(Window,Worker), 29 ] interface AudioTrackConfiguration { 30 readonly attribute DOMString codec; 31 readonly attribute unsigned long sampleRate; 32 readonly attribute unsigned long numberOfChannels; 33 readonly attribute unsigned long long bitrate; 37 34 }; 38 39 }40 41 #endif -
trunk/Source/WebCore/html/track/VideoTrack.cpp
r286813 r286908 36 36 37 37 #include "VideoTrackClient.h" 38 #include "VideoTrackConfiguration.h" 38 39 #include "VideoTrackList.h" 39 40 #include "VideoTrackPrivate.h" … … 85 86 : MediaTrackBase(context, MediaTrackBase::VideoTrack, trackPrivate.id(), trackPrivate.label(), trackPrivate.language()) 86 87 , m_private(trackPrivate) 88 , m_configuration(VideoTrackConfiguration::create()) 87 89 , m_selected(trackPrivate.selected()) 88 90 { 89 91 m_private->setClient(*this); 90 92 updateKindFromPrivate(); 93 updateConfigurationFromPrivate(); 91 94 } 92 95 … … 110 113 m_private->setSelected(m_selected); 111 114 updateKindFromPrivate(); 115 updateConfigurationFromPrivate(); 112 116 setId(m_private->id()); 113 117 } … … 257 261 } 258 262 263 void VideoTrack::updateConfigurationFromPrivate() 264 { 265 m_configuration->setCodec(m_private->codec()); 266 m_configuration->setWidth(m_private->width()); 267 m_configuration->setHeight(m_private->height()); 268 m_configuration->setColorSpace(VideoColorSpace::create(m_private->colorSpace())); 269 m_configuration->setFramerate(m_private->framerate()); 270 m_configuration->setBitrate(m_private->bitrate()); 271 } 272 259 273 #if !RELEASE_LOG_DISABLED 260 274 void VideoTrack::setLogger(const Logger& logger, const void* logIdentifier) -
trunk/Source/WebCore/html/track/VideoTrack.h
r286813 r286908 38 38 class VideoTrack; 39 39 class VideoTrackClient; 40 class VideoTrackConfiguration; 40 41 class VideoTrackList; 41 42 class VideoTrackPrivate; … … 69 70 const MediaDescription& description() const; 70 71 72 VideoTrackConfiguration& configuration() const { return m_configuration; } 73 71 74 void setPrivate(VideoTrackPrivate&); 72 75 #if !RELEASE_LOG_DISABLED … … 81 84 // VideoTrackPrivateClient 82 85 void selectedChanged(bool) final; 86 void configurationChanged() final { updateConfigurationFromPrivate(); } 83 87 84 88 // TrackPrivateBaseClient … … 91 95 92 96 void updateKindFromPrivate(); 97 void updateConfigurationFromPrivate(); 93 98 94 99 #if !RELEASE_LOG_DISABLED … … 99 104 WeakHashSet<VideoTrackClient> m_clients; 100 105 Ref<VideoTrackPrivate> m_private; 106 Ref<VideoTrackConfiguration> m_configuration; 101 107 bool m_selected { false }; 102 108 }; -
trunk/Source/WebCore/html/track/VideoTrack.idl
r286813 r286908 36 36 attribute boolean selected; 37 37 38 [EnabledBySetting=TrackConfigurationEnabled] readonly attribute VideoTrackConfiguration configuration; 38 39 }; -
trunk/Source/WebCore/html/track/VideoTrackConfiguration.idl
r286907 r286908 24 24 */ 25 25 26 #pragma once 27 28 #if ENABLE(VIDEO) 29 30 #include "TrackPrivateBaseClient.h" 31 32 namespace WebCore { 33 34 class VideoTrackPrivateClient : public TrackPrivateBaseClient { 35 public: 36 virtual void selectedChanged(bool) = 0;26 [ 27 Conditional=VIDEO, 28 ImplementationLacksVTable, 29 Exposed=(Window,Worker), 30 ] interface VideoTrackConfiguration { 31 readonly attribute DOMString codec; 32 readonly attribute unsigned long width; 33 readonly attribute unsigned long height; 34 readonly attribute unsigned long long bitrate; 35 readonly attribute double framerate; 36 readonly attribute VideoColorSpace colorSpace; 37 37 }; 38 39 }40 41 #endif -
trunk/Source/WebCore/platform/graphics/AudioTrackPrivate.h
r286813 r286908 65 65 using EnabledChangedCallback = Function<void(AudioTrackPrivate&, bool enabled)>; 66 66 void setEnabledChangedCallback(EnabledChangedCallback&& callback) { m_enabledChangedCallback = WTFMove(callback); } 67 68 String codec() const { return m_codec; } 69 void setCodec(String&& codec) { m_codec = WTFMove(codec); } 70 71 uint32_t sampleRate() const { return m_sampleRate; } 72 void setSampleRate(uint32_t sampleRate) { m_sampleRate = sampleRate; } 73 74 uint32_t numberOfChannels() const { return m_numberOfChannels; } 75 void setNumberOfChannels(uint32_t numberOfChannels) { m_numberOfChannels = numberOfChannels; } 76 77 uint64_t bitrate() const { return m_bitrate; } 78 void setBitrate(uint64_t bitrate) { m_bitrate = bitrate; } 67 79 68 80 #if !RELEASE_LOG_DISABLED … … 76 88 WeakPtr<AudioTrackPrivateClient> m_client; 77 89 bool m_enabled { false }; 90 String m_codec; 91 uint32_t m_sampleRate { 0 }; 92 uint32_t m_numberOfChannels { 0 }; 93 uint64_t m_bitrate { 0 }; 78 94 EnabledChangedCallback m_enabledChangedCallback; 79 95 }; -
trunk/Source/WebCore/platform/graphics/HEVCUtilities.cpp
r286813 r286908 27 27 #include "HEVCUtilities.h" 28 28 29 #include "FourCC.h" 30 #include "SharedBuffer.h" 31 #include <JavaScriptCore/DataView.h> 32 #include <wtf/HexNumber.h> 29 33 #include <wtf/NeverDestroyed.h> 30 34 #include <wtf/SortedArrayMap.h> 31 35 #include <wtf/text/StringToIntegerConversion.h> 32 36 37 #if __has_include(<bmalloc/pas_utils.h>) 38 #include <bmalloc/pas_utils.h> 39 #endif 40 33 41 namespace WebCore { 42 43 static inline uint32_t reverseBits(uint32_t value) 44 { 45 #if __has_include(<bmalloc/pas_utils.h>) 46 return pas_reverse(value); 47 #else 48 // From pas_reverse(): 49 value = ((value & 0xaaaaaaaa) >> 1) | ((value & 0x55555555) << 1); 50 value = ((value & 0xcccccccc) >> 2) | ((value & 0x33333333) << 2); 51 value = ((value & 0xf0f0f0f0) >> 4) | ((value & 0x0f0f0f0f) << 4); 52 value = ((value & 0xff00ff00) >> 8) | ((value & 0x00ff00ff) << 8); 53 return (value >> 16) | (value << 16); 54 #endif 55 } 56 57 std::optional<AVCParameters> parseAVCCodecParameters(StringView codecString) 58 { 59 // The format of the 'avc1' codec string is specified in ISO/IEC 14496-15:2014, Annex E2. 60 StringView codecView(codecString); 61 auto codecSplit = codecView.split('.'); 62 auto nextElement = codecSplit.begin(); 63 if (nextElement == codecSplit.end()) 64 return std::nullopt; 65 66 AVCParameters parameters; 67 68 // Codec identifier: legal values are specified in ISO/IEC 14496-15:2014, section 8: 69 auto codecName = *nextElement; 70 if (codecName != "avc1") 71 return std::nullopt; 72 73 if (++nextElement == codecSplit.end()) 74 return std::nullopt; 75 76 // First element: profile_idc 77 auto firstElement = *nextElement; 78 if (!firstElement.length()) 79 return std::nullopt; 80 81 auto profileFlagsAndLevel = parseInteger<uint32_t>(*nextElement, 16); 82 if (!profileFlagsAndLevel) 83 return std::nullopt; 84 parameters.profileIDC = (*profileFlagsAndLevel & 0xF00) >> 16; 85 parameters.constraintsFlags = (*profileFlagsAndLevel & 0xF0) >> 8; 86 parameters.levelIDC = *profileFlagsAndLevel & 0xF; 87 88 return parameters; 89 } 90 91 String createAVCCodecParametersString(const AVCParameters& parameters) 92 { 93 // The format of the 'avc1' codec string is specified in ISO/IEC 14496-15:2014, Annex E.2. 94 return makeString("avc1." 95 , hex(parameters.profileIDC, 2) 96 , hex(parameters.constraintsFlags, 2) 97 , hex(parameters.levelIDC, 2)); 98 } 99 100 std::optional<AVCParameters> parseAVCDecoderConfigurationRecord(const SharedBuffer& buffer) 101 { 102 // ISO/IEC 14496-10:2014 103 // 7.3.2.1.1 Sequence parameter set data syntax 104 105 // AVCDecoderConfigurationRecord is at a minimum 24 bytes long 106 if (buffer.size() < 24) 107 return std::nullopt; 108 109 // aligned(8) class AVCDecoderConfigurationRecord { 110 // unsigned int(8) configurationVersion = 1; 111 // unsigned int(8) AVCProfileIndication; 112 // unsigned int(8) profile_compatibility; 113 // unsigned int(8) AVCLevelIndication; 114 // ... 115 AVCParameters parameters; 116 auto arrayBuffer = buffer.tryCreateArrayBuffer(); 117 if (!arrayBuffer) 118 return std::nullopt; 119 120 bool status = true; 121 auto view = JSC::DataView::create(WTFMove(arrayBuffer), 0, buffer.size()); 122 123 // Byte 0 is a version flag 124 parameters.profileIDC = view->get<uint8_t>(1, false, &status); 125 if (!status) 126 return std::nullopt; 127 128 parameters.constraintsFlags = view->get<uint8_t>(2, false, &status); 129 if (!status) 130 return std::nullopt; 131 132 parameters.levelIDC = view->get<uint8_t>(3, false, &status); 133 if (!status) 134 return std::nullopt; 135 136 return parameters; 137 } 34 138 35 139 std::optional<HEVCParameters> parseHEVCCodecParameters(StringView codecString) … … 46 150 // Codec identifier: legal values are specified in ISO/IEC 14496-15:2014, section 8: 47 151 auto codecName = *nextElement; 48 if (codecName != "hvc1" && codecName != "hev1") 152 if (codecName == "hvc1") 153 parameters.codec = HEVCParameters::Codec::Hvc1; 154 else if (codecName == "hev1") 155 parameters.codec = HEVCParameters::Codec::Hev1; 156 else 49 157 return std::nullopt; 50 158 … … 78 186 if (!compatibilityFlags) 79 187 return std::nullopt; 80 parameters.generalProfileCompatibilityFlags = *compatibilityFlags;188 parameters.generalProfileCompatibilityFlags = reverseBits(*compatibilityFlags); 81 189 82 190 if (++nextElement == codecSplit.end()) … … 89 197 if (firstCharacter != 'L' && firstCharacter != 'H') 90 198 return std::nullopt; 199 parameters.generalTierFlag = (firstCharacter == 'L' ? 0 : 1); 91 200 92 201 auto generalLevelIDC = parseInteger<uint8_t>(generalTier.substring(1)); … … 100 209 if (++nextElement == codecSplit.end()) 101 210 break; 102 if (!parseInteger<uint8_t>(*nextElement, 16)) 211 auto flag = parseInteger<uint8_t>(*nextElement, 16); 212 if (!flag) 103 213 return std::nullopt; 104 } 214 parameters.generalConstraintIndicatorFlags[i] = *flag; 215 } 216 217 return parameters; 218 } 219 220 String createHEVCCodecParametersString(const HEVCParameters& parameters) 221 { 222 // The format of the 'hevc' codec string is specified in ISO/IEC 14496-15:2014, Annex E.3. 223 char profileSpaceCharacter = 'A' + parameters.generalProfileSpace - 1; 224 225 String profileSpaceString; 226 if (parameters.generalProfileSpace) 227 profileSpaceString.append(profileSpaceCharacter); 228 229 // For the second parameter, from ISO/IEC 14496-15:2014, Annex E.3. 230 // * the 32 bits of the general_profile_compatibility_flags, but in reverse bit order, i.e. with 231 // general_profile_compatibility_flag[ 31 ] as the most significant bit, followed by, general_profile_compatibility_flag[ 30 ], 232 // and down to general_profile_compatibility_flag[ 0 ] as the least significant bit, where general_profile_compatibility_flag[ i ] 233 // for i in the range of 0 to 31, inclusive, are specified in ISO/IEC 23008‐2, encoded in hexadecimal (leading zeroes may be omitted) 234 auto compatFlagParameter = hex(reverseBits(parameters.generalProfileCompatibilityFlags)); 235 236 // * each of the 6 bytes of the constraint flags, starting from the byte containing the 237 // general_progressive_source_flag, each encoded as a hexadecimal number, and the encoding 238 // of each byte separated by a period; trailing bytes that are zero may be omitted. 239 StringBuilder compatibilityFlags; 240 auto lastFlagByte = parameters.generalConstraintIndicatorFlags.reverseFindMatching([] (auto& flag) { return flag; }); 241 for (size_t i = 0; lastFlagByte != notFound && i <= lastFlagByte; ++i) { 242 compatibilityFlags.append('.'); 243 compatibilityFlags.append(hex(parameters.generalConstraintIndicatorFlags[i], 2)); 244 } 245 246 return makeString(parameters.codec == HEVCParameters::Codec::Hev1 ? "hev1" : "hvc1" 247 , '.' 248 , profileSpaceString 249 , parameters.generalProfileIDC 250 , '.' 251 , compatFlagParameter 252 , '.' 253 , parameters.generalTierFlag ? 'H' : 'L' 254 , parameters.generalLevelIDC 255 , compatibilityFlags.toString()); 256 } 257 258 std::optional<HEVCParameters> parseHEVCDecoderConfigurationRecord(const FourCC& codecCode, const SharedBuffer& buffer) 259 { 260 // ISO/IEC 14496-15:2014 261 // 8.3.3.1 HEVC decoder configuration record 262 263 // HEVCDecoderConfigurationRecord is at a minimum 23 bytes long 264 if (buffer.size() < 23) 265 return std::nullopt; 266 267 HEVCParameters parameters; 268 if (codecCode == FourCC('hev1')) 269 parameters.codec = HEVCParameters::Codec::Hev1; 270 else if (codecCode == FourCC('hvc1')) 271 parameters.codec = HEVCParameters::Codec::Hvc1; 272 else 273 return std::nullopt; 274 275 // aligned(8) class HEVCDecoderConfigurationRecord { 276 // unsigned int(8) configurationVersion = 1; 277 // unsigned int(2) general_profile_space; 278 // unsigned int(1) general_tier_flag; 279 // unsigned int(5) general_profile_idc; 280 // unsigned int(32) general_profile_compatibility_flags; 281 // unsigned int(48) general_constraint_indicator_flags; 282 // unsigned int(8) general_level_idc; 283 // ... 284 auto arrayBuffer = buffer.tryCreateArrayBuffer(); 285 if (!arrayBuffer) 286 return std::nullopt; 287 288 bool status = true; 289 auto view = JSC::DataView::create(WTFMove(arrayBuffer), 0, buffer.size()); 290 uint32_t profileSpaceTierIDC = view->get<uint8_t>(1, false, &status); 291 if (!status) 292 return std::nullopt; 293 294 parameters.generalProfileSpace = (profileSpaceTierIDC & 0b11000000) >> 6; 295 parameters.generalTierFlag = (profileSpaceTierIDC & 0b00100000) >> 5; 296 parameters.generalProfileIDC = profileSpaceTierIDC & 0b00011111; 297 298 parameters.generalProfileCompatibilityFlags = view->get<uint32_t>(2, false, &status); 299 if (!status) 300 return std::nullopt; 301 302 for (unsigned i = 0; i < 6; ++i) { 303 parameters.generalConstraintIndicatorFlags[i] = view->get<uint8_t>(6 + i, false, &status); 304 if (!status) 305 return std::nullopt; 306 } 307 308 parameters.generalLevelIDC = view->get<uint8_t>(12, false, &status); 309 if (!status) 310 return std::nullopt; 105 311 106 312 return parameters; … … 231 437 } 232 438 233 } 439 std::optional<DoViParameters> parseDoViDecoderConfigurationRecord(const SharedBuffer& buffer) 440 { 441 // The format of the DoVi Configuration Record is contained in "Dolby Vision Streams Within 442 // the ISO Base Media File Format, Version 2.0" 443 444 // DoViDecoderConfigurationRecord is exacty 24 bytes long 445 if (buffer.size() < 24) 446 return std::nullopt; 447 448 // align (8) class DOVIDecoderConfigurationRecord 449 // { 450 // unsigned int (8) dv_version_major; 451 // unsigned int (8) dv_version_minor; 452 // unsigned int (7) dv_profile; 453 // unsigned int (6) dv_level; 454 // bit (1) rpu_present_flag; 455 // bit (1) el_present_flag; 456 // bit (1) bl_present_flag; 457 // ... 458 DoViParameters parameters; 459 auto arrayBuffer = buffer.tryCreateArrayBuffer(); 460 if (!arrayBuffer) 461 return std::nullopt; 462 463 bool status = true; 464 auto view = JSC::DataView::create(WTFMove(arrayBuffer), 0, buffer.size()); 465 466 auto profileLevelAndFlags = view->get<uint16_t>(2, false, &status); 467 if (!status) 468 return std::nullopt; 469 470 parameters.bitstreamProfileID = (profileLevelAndFlags & 0b1111111000000000) >> 9; 471 parameters.bitstreamLevelID = (profileLevelAndFlags & 0b0000000111111000) >> 3; 472 return parameters; 473 } 474 475 String createDoViCodecParametersString(const DoViParameters& parameters) 476 { 477 // The format of the DoVi codec string is specified in "Dolby Vision Profiles and Levels Version 1.3.2" 478 StringBuilder builder; 479 builder.append("dvh1."); 480 if (parameters.bitstreamProfileID < 10) 481 builder.append('0'); 482 builder.append(parameters.bitstreamProfileID); 483 builder.append('.'); 484 if (parameters.bitstreamLevelID < 10) 485 builder.append('0'); 486 builder.append(parameters.bitstreamLevelID); 487 return builder.toString(); 488 } 489 490 } -
trunk/Source/WebCore/platform/graphics/HEVCUtilities.h
r286813 r286908 28 28 #include <optional> 29 29 #include <wtf/Forward.h> 30 #include <wtf/Vector.h> 30 31 31 32 namespace WebCore { 32 33 34 struct FourCC; 35 class SharedBuffer; 36 37 struct AVCParameters { 38 uint8_t profileIDC { 0 }; 39 uint8_t constraintsFlags { 0 }; 40 uint8_t levelIDC { 0 }; 41 }; 42 43 WEBCORE_EXPORT std::optional<AVCParameters> parseAVCCodecParameters(StringView); 44 WEBCORE_EXPORT std::optional<AVCParameters> parseAVCDecoderConfigurationRecord(const SharedBuffer&); 45 WEBCORE_EXPORT String createAVCCodecParametersString(const AVCParameters&); 46 33 47 struct HEVCParameters { 48 enum class Codec { Hev1, Hvc1 } codec { Codec::Hvc1 }; 34 49 uint16_t generalProfileSpace { 0 }; 35 50 uint16_t generalProfileIDC { 0 }; 36 51 uint32_t generalProfileCompatibilityFlags { 0 }; 52 uint8_t generalTierFlag { 0 }; 53 Vector<unsigned char, 6> generalConstraintIndicatorFlags { 0, 0, 0, 0, 0, 0 }; 37 54 uint16_t generalLevelIDC { 0 }; 38 55 }; 39 56 40 57 WEBCORE_EXPORT std::optional<HEVCParameters> parseHEVCCodecParameters(StringView); 58 WEBCORE_EXPORT std::optional<HEVCParameters> parseHEVCDecoderConfigurationRecord(const FourCC&, const SharedBuffer&); 59 WEBCORE_EXPORT String createHEVCCodecParametersString(const HEVCParameters&); 41 60 42 61 struct DoViParameters { … … 47 66 48 67 WEBCORE_EXPORT std::optional<DoViParameters> parseDoViCodecParameters(StringView); 68 WEBCORE_EXPORT std::optional<DoViParameters> parseDoViDecoderConfigurationRecord(const SharedBuffer&); 69 WEBCORE_EXPORT String createDoViCodecParametersString(const DoViParameters&); 49 70 50 71 } -
trunk/Source/WebCore/platform/graphics/PlatformVideoColorPrimaries.h
r286907 r286908 26 26 #pragma once 27 27 28 #if ENABLE(VIDEO) 29 30 #include "TrackPrivateBaseClient.h" 28 #include <wtf/Forward.h> 31 29 32 30 namespace WebCore { 33 31 34 class VideoTrackPrivateClient : public TrackPrivateBaseClient { 35 public: 36 virtual void selectedChanged(bool) = 0; 32 enum class PlatformVideoColorPrimaries : uint8_t { 33 Bt709, 34 Bt470bg, 35 Smpte170m, 36 }; 37 38 } // namespace WebCore 39 40 namespace WTF { 41 42 template<> struct EnumTraits<WebCore::PlatformVideoColorPrimaries> { 43 using values = EnumValues< 44 WebCore::PlatformVideoColorPrimaries, 45 WebCore::PlatformVideoColorPrimaries::Bt709, 46 WebCore::PlatformVideoColorPrimaries::Bt470bg, 47 WebCore::PlatformVideoColorPrimaries::Smpte170m 48 >; 37 49 }; 38 50 39 51 } 40 41 #endif -
trunk/Source/WebCore/platform/graphics/PlatformVideoColorSpace.h
r286907 r286908 26 26 #pragma once 27 27 28 #if ENABLE(VIDEO) 29 30 #include "TrackPrivateBaseClient.h" 28 #include "PlatformVideoColorPrimaries.h" 29 #include "PlatformVideoMatrixCoefficients.h" 30 #include "PlatformVideoTransferCharacteristics.h" 31 #include <wtf/FastMalloc.h> 31 32 32 33 namespace WebCore { 33 34 34 class VideoTrackPrivateClient : public TrackPrivateBaseClient { 35 public: 36 virtual void selectedChanged(bool) = 0; 35 struct PlatformVideoColorSpace { 36 WTF_MAKE_STRUCT_FAST_ALLOCATED; 37 std::optional<PlatformVideoColorPrimaries> primaries; 38 std::optional<PlatformVideoTransferCharacteristics> transfer; 39 std::optional<PlatformVideoMatrixCoefficients> matrix; 40 std::optional<bool> fullRange; 41 template <class Encoder> void encode(Encoder&) const; 42 template <class Decoder> static WARN_UNUSED_RETURN bool decode(Decoder&, PlatformVideoColorSpace&); 37 43 }; 38 44 45 template <class Encoder> 46 void PlatformVideoColorSpace::encode(Encoder& encoder) const 47 { 48 encoder << primaries; 49 encoder << transfer; 50 encoder << matrix; 51 encoder << fullRange; 39 52 } 40 53 41 #endif 54 template <class Decoder> 55 bool PlatformVideoColorSpace::decode(Decoder& decoder, PlatformVideoColorSpace& colorSpace) 56 { 57 if (!decoder.decode(colorSpace.primaries)) 58 return false; 59 if (!decoder.decode(colorSpace.transfer)) 60 return false; 61 if (!decoder.decode(colorSpace.matrix)) 62 return false; 63 if (!decoder.decode(colorSpace.fullRange)) 64 return false; 65 return true; 66 } 67 68 } -
trunk/Source/WebCore/platform/graphics/PlatformVideoMatrixCoefficients.h
r286907 r286908 26 26 #pragma once 27 27 28 #if ENABLE(VIDEO) 29 30 #include "TrackPrivateBaseClient.h" 28 #include <wtf/Forward.h> 31 29 32 30 namespace WebCore { 33 31 34 class VideoTrackPrivateClient : public TrackPrivateBaseClient { 35 public: 36 virtual void selectedChanged(bool) = 0; 32 enum class PlatformVideoMatrixCoefficients : uint8_t { 33 Rgb, 34 Bt709, 35 Bt470bg, 36 Smpte170m, 37 }; 38 39 } // namespace WebCore 40 41 namespace WTF { 42 43 template<> struct EnumTraits<WebCore::PlatformVideoMatrixCoefficients> { 44 using values = EnumValues< 45 WebCore::PlatformVideoMatrixCoefficients, 46 WebCore::PlatformVideoMatrixCoefficients::Rgb, 47 WebCore::PlatformVideoMatrixCoefficients::Bt709, 48 WebCore::PlatformVideoMatrixCoefficients::Bt470bg, 49 WebCore::PlatformVideoMatrixCoefficients::Smpte170m 50 >; 37 51 }; 38 52 39 53 } 40 41 #endif -
trunk/Source/WebCore/platform/graphics/PlatformVideoTransferCharacteristics.h
r286907 r286908 26 26 #pragma once 27 27 28 #if ENABLE(VIDEO) 29 30 #include "TrackPrivateBaseClient.h" 28 #include <wtf/Forward.h> 31 29 32 30 namespace WebCore { 33 31 34 class VideoTrackPrivateClient : public TrackPrivateBaseClient { 35 public: 36 virtual void selectedChanged(bool) = 0; 32 enum class PlatformVideoTransferCharacteristics : uint8_t { 33 Bt709, 34 Smpte170m, 35 Iec6196621, 36 }; 37 38 } // namespace WebCore 39 40 namespace WTF { 41 42 template<> struct EnumTraits<WebCore::PlatformVideoTransferCharacteristics> { 43 using values = EnumValues< 44 WebCore::PlatformVideoTransferCharacteristics, 45 WebCore::PlatformVideoTransferCharacteristics::Bt709, 46 WebCore::PlatformVideoTransferCharacteristics::Smpte170m, 47 WebCore::PlatformVideoTransferCharacteristics::Iec6196621 48 >; 37 49 }; 38 50 39 51 } 40 41 #endif -
trunk/Source/WebCore/platform/graphics/VideoTrackPrivate.h
r286813 r286908 28 28 #if ENABLE(VIDEO) 29 29 30 #include "PlatformVideoColorSpace.h" 30 31 #include "TrackPrivateBase.h" 31 32 #include "VideoTrackPrivateClient.h" … … 62 63 void setSelectedChangedCallback(SelectedChangedCallback&& callback) { m_selectedChangedCallback = WTFMove(callback); } 63 64 65 virtual String codec() const { return m_codec; } 66 virtual void setCodec(String&& codec) { m_codec = WTFMove(codec); } 67 68 virtual uint32_t width() const { return m_width; } 69 virtual void setWidth(uint32_t width) { m_width = width; } 70 71 virtual uint32_t height() const { return m_height; } 72 virtual void setHeight(uint32_t height) { m_height = height; } 73 74 virtual PlatformVideoColorSpace colorSpace() const { return m_colorSpace; } 75 virtual void setColorSpace(PlatformVideoColorSpace&& colorSpace) { m_colorSpace = WTFMove(colorSpace); } 76 77 virtual double framerate() const { return m_framerate; } 78 virtual void setFramerate(double framerate) { m_framerate = framerate; } 79 80 virtual uint64_t bitrate() const { return m_bitrate; } 81 virtual void setBitrate(uint64_t bitrate) { m_bitrate = bitrate; } 82 64 83 protected: 65 84 VideoTrackPrivate() = default; … … 68 87 WeakPtr<VideoTrackPrivateClient> m_client { nullptr }; 69 88 bool m_selected { false }; 89 String m_codec; 90 uint32_t m_width { 0 }; 91 uint32_t m_height { 0 }; 92 PlatformVideoColorSpace m_colorSpace; 93 double m_framerate { 0 }; 94 uint64_t m_bitrate { 0 }; 95 70 96 SelectedChangedCallback m_selectedChangedCallback; 71 97 }; -
trunk/Source/WebCore/platform/graphics/VideoTrackPrivateClient.h
r286813 r286908 35 35 public: 36 36 virtual void selectedChanged(bool) = 0; 37 virtual void configurationChanged() = 0; 37 38 }; 38 39 -
trunk/Source/WebCore/platform/graphics/avfoundation/AVTrackPrivateAVFObjCImpl.h
r286813 r286908 30 30 31 31 #include "AudioTrackPrivate.h" 32 #include "PlatformVideoColorSpace.h" 32 33 #include "VideoTrackPrivate.h" 33 34 #include <wtf/Ref.h> … … 39 40 OBJC_CLASS AVMediaSelectionGroup; 40 41 OBJC_CLASS AVMediaSelectionOption; 42 43 typedef const struct opaqueCMFormatDescription* CMFormatDescriptionRef; 41 44 42 45 namespace WebCore { … … 69 72 int trackID() const; 70 73 74 String codec() const; 75 uint32_t width() const; 76 uint32_t height() const; 77 PlatformVideoColorSpace colorSpace() const; 78 double framerate() const; 79 uint64_t bitrate() const; 80 uint32_t sampleRate() const; 81 uint32_t numberOfChannels() const; 71 82 static String languageForAVAssetTrack(AVAssetTrack*); 72 83 static String languageForAVMediaSelectionOption(AVMediaSelectionOption *); -
trunk/Source/WebCore/platform/graphics/avfoundation/AVTrackPrivateAVFObjCImpl.mm
r286813 r286908 29 29 #if ENABLE(VIDEO) 30 30 31 #import "FormatDescriptionUtilities.h" 31 32 #import "MediaSelectionGroupAVFObjC.h" 33 #import "SharedBuffer.h" 32 34 #import <AVFoundation/AVAssetTrack.h> 33 35 #import <AVFoundation/AVMediaSelectionGroup.h> … … 37 39 #import <objc/runtime.h> 38 40 41 #import <pal/cf/CoreMediaSoftLink.h> 39 42 #import <pal/cocoa/AVFoundationSoftLink.h> 40 43 … … 240 243 } 241 244 245 static AVAssetTrack* assetTrackFor(const AVTrackPrivateAVFObjCImpl& impl) 246 { 247 if (impl.playerItemTrack() && impl.playerItemTrack().assetTrack) 248 return impl.playerItemTrack().assetTrack; 249 if (impl.assetTrack()) 250 return impl.assetTrack(); 251 if (impl.mediaSelectionOption() && impl.mediaSelectionOption()->assetTrack()) 252 return impl.mediaSelectionOption()->assetTrack(); 253 return nil; 254 } 255 256 static CMFormatDescriptionRef formatDescriptionFor(const AVTrackPrivateAVFObjCImpl& impl) 257 { 258 auto assetTrack = assetTrackFor(impl); 259 if (!assetTrack || !assetTrack.formatDescriptions.count) 260 return nullptr; 261 return static_cast<CMFormatDescriptionRef>(assetTrack.formatDescriptions[0]); 262 } 263 264 String AVTrackPrivateAVFObjCImpl::codec() const 265 { 266 return codecFromFormatDescription(formatDescriptionFor(*this)); 267 } 268 269 uint32_t AVTrackPrivateAVFObjCImpl::width() const 270 { 271 if (auto assetTrack = assetTrackFor(*this)) 272 return assetTrack.naturalSize.width; 273 ASSERT_NOT_REACHED(); 274 return 0; 275 } 276 277 uint32_t AVTrackPrivateAVFObjCImpl::height() const 278 { 279 if (auto assetTrack = assetTrackFor(*this)) 280 return assetTrack.naturalSize.height; 281 ASSERT_NOT_REACHED(); 282 return 0; 283 } 284 285 PlatformVideoColorSpace AVTrackPrivateAVFObjCImpl::colorSpace() const 286 { 287 if (auto colorSpace = colorSpaceFromFormatDescription(formatDescriptionFor(*this))) 288 return *colorSpace; 289 return { }; 290 } 291 292 double AVTrackPrivateAVFObjCImpl::framerate() const 293 { 294 if (auto assetTrack = assetTrackFor(*this)) 295 return assetTrack.nominalFrameRate; 296 ASSERT_NOT_REACHED(); 297 return 0; 298 } 299 300 uint32_t AVTrackPrivateAVFObjCImpl::sampleRate() const 301 { 302 auto formatDescription = formatDescriptionFor(*this); 303 if (!formatDescription) 304 return 0; 305 306 const AudioStreamBasicDescription* const asbd = PAL::CMAudioFormatDescriptionGetStreamBasicDescription(formatDescription); 307 if (!asbd) 308 return 0; 309 310 return asbd->mSampleRate; 311 } 312 313 uint32_t AVTrackPrivateAVFObjCImpl::numberOfChannels() const 314 { 315 auto formatDescription = formatDescriptionFor(*this); 316 if (!formatDescription) 317 return 0; 318 319 const AudioStreamBasicDescription* const asbd = PAL::CMAudioFormatDescriptionGetStreamBasicDescription(formatDescription); 320 if (!asbd) 321 return 0; 322 323 return asbd->mChannelsPerFrame; 324 } 325 326 uint64_t AVTrackPrivateAVFObjCImpl::bitrate() const 327 { 328 auto assetTrack = assetTrackFor(*this); 329 if (!assetTrack) 330 return 0; 331 if (!std::isfinite(assetTrack.estimatedDataRate)) 332 return 0; 333 return assetTrack.estimatedDataRate; 334 } 335 242 336 } 243 337 -
trunk/Source/WebCore/platform/graphics/avfoundation/AudioTrackPrivateAVF.h
r286813 r286908 35 35 WTF_MAKE_NONCOPYABLE(AudioTrackPrivateAVF) 36 36 public: 37 virtual Kind kind() const{ return m_kind; }38 virtual AtomString id() const{ return m_id; }39 virtual AtomString label() const{ return m_label; }40 virtual AtomString language() const{ return m_language; }41 virtual int trackIndex() const{ return m_index; }37 Kind kind() const override { return m_kind; } 38 AtomString id() const override { return m_id; } 39 AtomString label() const override { return m_label; } 40 AtomString language() const override { return m_language; } 41 int trackIndex() const override { return m_index; } 42 42 43 43 protected: … … 47 47 void setLanguage(const AtomString& language) { m_language = language; } 48 48 void setTrackIndex(int index) { m_index = index; } 49 49 50 50 Kind m_kind { None }; 51 51 AtomString m_id; -
trunk/Source/WebCore/platform/graphics/avfoundation/FormatDescriptionUtilities.h
r286907 r286908 26 26 #pragma once 27 27 28 #i f ENABLE(VIDEO)28 #include <wtf/Forward.h> 29 29 30 #include "TrackPrivateBaseClient.h" 30 typedef const struct opaqueCMFormatDescription *CMFormatDescriptionRef; 31 31 32 32 namespace WebCore { 33 33 34 class VideoTrackPrivateClient : public TrackPrivateBaseClient { 35 public: 36 virtual void selectedChanged(bool) = 0; 37 }; 34 class FloatSize; 35 struct PlatformVideoColorSpace; 36 37 FloatSize presentationSizeFromFormatDescription(CMFormatDescriptionRef); 38 std::optional<PlatformVideoColorSpace> colorSpaceFromFormatDescription(CMFormatDescriptionRef); 39 String codecFromFormatDescription(CMFormatDescriptionRef); 38 40 39 41 } 40 41 #endif -
trunk/Source/WebCore/platform/graphics/avfoundation/MediaSelectionGroupAVFObjC.h
r286813 r286908 55 55 56 56 AVMediaSelectionOption *avMediaSelectionOption() const { return m_mediaSelectionOption.get(); } 57 AVAssetTrack *assetTrack() const; 57 58 58 59 private: -
trunk/Source/WebCore/platform/graphics/avfoundation/MediaSelectionGroupAVFObjC.mm
r286813 r286908 30 30 31 31 #import <AVFoundation/AVAsset.h> 32 #import <AVFoundation/AVMediaSelectionGroup.h>33 32 #import <AVFoundation/AVPlayerItem.h> 34 33 #import <objc/runtime.h> 34 #import <pal/spi/cocoa/AVFoundationSPI.h> 35 35 #import <wtf/Language.h> 36 36 #import <wtf/cocoa/VectorCocoa.h> … … 81 81 82 82 return [[m_group->avMediaSelectionGroup() options] indexOfObject:m_mediaSelectionOption.get()]; 83 } 84 85 AVAssetTrack* MediaSelectionOptionAVFObjC::assetTrack() const 86 { 87 if ([m_mediaSelectionOption respondsToSelector:@selector(track)]) 88 return [m_mediaSelectionOption track]; 89 return nil; 83 90 } 84 91 -
trunk/Source/WebCore/platform/graphics/avfoundation/VideoTrackPrivateAVF.h
r286813 r286908 48 48 void setTrackIndex(int index) { m_index = index; } 49 49 50 50 51 Kind m_kind { None }; 51 52 AtomString m_id; -
trunk/Source/WebCore/platform/graphics/avfoundation/objc/AudioTrackPrivateAVFObjC.mm
r286813 r286908 56 56 setLabel(m_impl->label()); 57 57 setLanguage(m_impl->language()); 58 setCodec(m_impl->codec()); 59 setSampleRate(m_impl->sampleRate()); 60 setNumberOfChannels(m_impl->numberOfChannels()); 61 setBitrate(m_impl->bitrate()); 62 58 63 } 59 64 -
trunk/Source/WebCore/platform/graphics/avfoundation/objc/SourceBufferParserAVFObjC.mm
r286813 r286908 172 172 m_originalCodec = PAL::softLink_CoreMedia_CMFormatDescriptionGetMediaSubType(description); 173 173 CFStringRef originalFormatKey = PAL::canLoad_CoreMedia_kCMFormatDescriptionExtension_ProtectedContentOriginalFormat() ? PAL::get_CoreMedia_kCMFormatDescriptionExtension_ProtectedContentOriginalFormat() : CFSTR("CommonEncryptionOriginalFormat"); 174 if (auto originalFormat = dynamic_cf_cast<CFNumberRef>( CMFormatDescriptionGetExtension(description, originalFormatKey)))174 if (auto originalFormat = dynamic_cf_cast<CFNumberRef>(PAL::CMFormatDescriptionGetExtension(description, originalFormatKey))) 175 175 CFNumberGetValue(originalFormat, kCFNumberSInt32Type, &m_originalCodec); 176 176 } -
trunk/Source/WebCore/platform/graphics/avfoundation/objc/VideoTrackPrivateAVFObjC.cpp
r286813 r286908 63 63 setLabel(m_impl->label()); 64 64 setLanguage(m_impl->language()); 65 setCodec(m_impl->codec()); 66 setWidth(m_impl->width()); 67 setHeight(m_impl->height()); 68 setColorSpace(m_impl->colorSpace()); 69 setFramerate(m_impl->framerate()); 70 setBitrate(m_impl->bitrate()); 71 72 if (auto* client = this->client()) 73 client->configurationChanged(); 65 74 } 66 75 -
trunk/Source/WebCore/platform/graphics/avfoundation/objc/VideoTrackPrivateMediaSourceAVFObjC.mm
r286813 r286908 51 51 setLabel(m_impl->label()); 52 52 setLanguage(m_impl->language()); 53 setCodec(m_impl->codec()); 54 setWidth(m_impl->width()); 55 setHeight(m_impl->height()); 56 setColorSpace(m_impl->colorSpace()); 57 setFramerate(m_impl->framerate()); 58 setBitrate(m_impl->bitrate()); 53 59 } 54 60 -
trunk/Source/WebCore/platform/graphics/cocoa/VideoTrackPrivateWebM.cpp
r286813 r286908 87 87 } 88 88 89 String VideoTrackPrivateWebM::codec() const 90 { 91 if (!m_track.codec_id.is_present()) 92 return emptyString(); 93 94 StringView codecID { m_track.codec_id.value().data(), (unsigned)m_track.codec_id.value().length() }; 95 96 // TODO: Specific codec parameters are parsed out of the sample header; they aren't typically contained in the WebM Track element. 97 if (codecID == "V_VP9") 98 return "vp09"; 99 100 if (codecID == "V_VP8") 101 return "vp08"; 102 103 return emptyString(); 104 } 105 106 uint32_t VideoTrackPrivateWebM::width() const 107 { 108 if (!m_track.video.is_present()) 109 return 0; 110 111 auto& video = m_track.video.value(); 112 if (video.display_width.is_present()) 113 return video.display_width.value(); 114 115 if (video.pixel_width.is_present()) 116 return video.pixel_width.value(); 117 118 return 0; 119 } 120 121 uint32_t VideoTrackPrivateWebM::height() const 122 { 123 if (!m_track.video.is_present()) 124 return 0; 125 126 auto& video = m_track.video.value(); 127 if (video.display_height.is_present()) 128 return video.display_height.value(); 129 130 if (video.pixel_height.is_present()) 131 return video.pixel_height.value(); 132 133 return 0; 134 } 135 136 double VideoTrackPrivateWebM::framerate() const 137 { 138 if (!m_track.video.is_present()) 139 return 0; 140 141 auto& video = m_track.video.value(); 142 if (video.frame_rate.is_present()) 143 return video.frame_rate.value(); 144 145 return 0; 146 } 147 89 148 } 90 149 -
trunk/Source/WebCore/platform/graphics/cocoa/VideoTrackPrivateWebM.h
r286813 r286908 44 44 std::optional<uint64_t> trackUID() const final; 45 45 std::optional<bool> defaultEnabled() const final; 46 String codec() const final; 47 uint32_t width() const final; 48 uint32_t height() const final; 49 double framerate() const final; 46 50 47 51 private: -
trunk/Source/WebCore/testing/Internals.cpp
r286813 r286908 5938 5938 } 5939 5939 5940 String Internals::createHEVCCodecParametersString(const HEVCParameterSet& parameters) 5941 { 5942 return WebCore::createHEVCCodecParametersString(parameters); 5943 } 5944 5940 5945 auto Internals::parseDoViCodecParameters(StringView string) -> std::optional<DoViParameterSet> 5941 5946 { … … 5963 5968 } 5964 5969 5970 String Internals::createDoViCodecParametersString(const DoViParameterSet& parameterSet) 5971 { 5972 DoViParameters::Codec codec; 5973 if (parameterSet.codecName == "avc1"_s) 5974 codec = DoViParameters::Codec::AVC1; 5975 else if (parameterSet.codecName == "avc3"_s) 5976 codec = DoViParameters::Codec::AVC3; 5977 else if (parameterSet.codecName == "hev1"_s) 5978 codec = DoViParameters::Codec::HEV1; 5979 else if (parameterSet.codecName == "hvc1"_s) 5980 codec = DoViParameters::Codec::HVC1; 5981 else 5982 return emptyString(); 5983 5984 return WebCore::createDoViCodecParametersString({ codec, parameterSet.bitstreamProfileID, parameterSet.bitstreamLevelID }); 5985 } 5986 5965 5987 std::optional<VPCodecConfigurationRecord> Internals::parseVPCodecParameters(StringView string) 5966 5988 { -
trunk/Source/WebCore/testing/Internals.h
r286813 r286908 1027 1027 1028 1028 using HEVCParameterSet = WebCore::HEVCParameters; 1029 using HEVCParameterCodec = WebCore::HEVCParameters::Codec; 1029 1030 std::optional<HEVCParameterSet> parseHEVCCodecParameters(StringView); 1031 String createHEVCCodecParametersString(const HEVCParameterSet& parameters); 1030 1032 1031 1033 struct DoViParameterSet { … … 1035 1037 }; 1036 1038 std::optional<DoViParameterSet> parseDoViCodecParameters(StringView); 1039 String createDoViCodecParametersString(const DoViParameterSet& parameters); 1037 1040 1038 1041 using VPCodecConfigurationRecord = WebCore::VPCodecConfigurationRecord; -
trunk/Source/WebCore/testing/Internals.idl
r286813 r286908 181 181 }; 182 182 183 enum HEVCParameterCodec { 184 "hev1", 185 "hvc1" 186 }; 187 183 188 [ 184 189 ExportMacro=WEBCORE_TESTSUPPORT_EXPORT, 185 190 JSGenerateToJSObject, 186 191 ] dictionary HEVCParameterSet { 192 HEVCParameterCodec codec; 187 193 unsigned short generalProfileSpace; 188 194 unsigned short generalProfileIDC; 189 195 unsigned long generalProfileCompatibilityFlags; 196 octet generalTierFlag; 197 required FrozenArray<octet> generalConstraintIndicatorFlags; 190 198 unsigned short generalLevelIDC; 191 199 }; … … 996 1004 997 1005 HEVCParameterSet? parseHEVCCodecParameters(DOMString codecParameters); 1006 DOMString createHEVCCodecParametersString(HEVCParameterSet parameters); 998 1007 DoViParameterSet? parseDoViCodecParameters(DOMString codecParameters); 1008 DOMString createDoViCodecParametersString(DoViParameterSet parameters); 999 1009 VPCodecConfigurationRecord? parseVPCodecParameters(DOMString codecParameters); 1000 1010 -
trunk/Source/WebKit/ChangeLog
r286905 r286908 1 2021-12-11 Jer Noble <jer.noble@apple.com> 2 3 Add an experimental trackConfiguration accessor on AudioTrack & VideoTrack. 4 https://bugs.webkit.org/show_bug.cgi?id=230841 5 6 Reviewed by Eric Carlson. 7 8 * GPUProcess/media/RemoteAudioTrackProxy.cpp: 9 (WebKit::RemoteAudioTrackProxy::configuration): 10 * GPUProcess/media/RemoteAudioTrackProxy.h: 11 * GPUProcess/media/RemoteVideoTrackProxy.cpp: 12 (WebKit::RemoteVideoTrackProxy::configuration): 13 (WebKit::RemoteVideoTrackProxy::updateConfiguration): 14 (WebKit::RemoteVideoTrackProxy::selectedChanged): 15 (WebKit::RemoteVideoTrackProxy::idChanged): 16 (WebKit::RemoteVideoTrackProxy::labelChanged): 17 (WebKit::RemoteVideoTrackProxy::languageChanged): 18 (WebKit::RemoteVideoTrackProxy::configurationChanged): Deleted. 19 * GPUProcess/media/RemoteVideoTrackProxy.h: 20 * GPUProcess/media/TrackPrivateRemoteConfiguration.h: 21 (WebKit::TrackPrivateRemoteConfiguration::encode const): 22 (WebKit::TrackPrivateRemoteConfiguration::decode): 23 * WebProcess/GPU/media/AudioTrackPrivateRemote.cpp: 24 (WebKit::AudioTrackPrivateRemote::updateConfiguration): 25 * WebProcess/GPU/media/AudioTrackPrivateRemote.h: 26 * WebProcess/GPU/media/VideoTrackPrivateRemote.cpp: 27 (WebKit::VideoTrackPrivateRemote::updateConfiguration): 28 * WebProcess/GPU/media/VideoTrackPrivateRemote.h: 29 1 30 2021-12-10 Simon Fraser <simon.fraser@apple.com> 2 31 -
trunk/Source/WebKit/GPUProcess/media/RemoteAudioTrackProxy.cpp
r286813 r286908 55 55 } 56 56 57 TrackPrivateRemoteConfiguration &RemoteAudioTrackProxy::configuration()57 TrackPrivateRemoteConfiguration RemoteAudioTrackProxy::configuration() 58 58 { 59 static NeverDestroyed<TrackPrivateRemoteConfiguration> configuration; 60 61 configuration->trackId = m_trackPrivate->id(); 62 configuration->label = m_trackPrivate->label(); 63 configuration->language = m_trackPrivate->language(); 64 configuration->trackIndex = m_trackPrivate->trackIndex(); 65 configuration->startTimeVariance = m_trackPrivate->startTimeVariance(); 66 configuration->enabled = m_trackPrivate->enabled(); 67 configuration->audioKind = m_trackPrivate->kind(); 68 69 return configuration.get(); 59 return { 60 m_trackPrivate->id(), 61 m_trackPrivate->label(), 62 m_trackPrivate->language(), 63 m_trackPrivate->startTimeVariance(), 64 m_trackPrivate->trackIndex(), 65 m_trackPrivate->enabled(), 66 m_trackPrivate->kind(), 67 false, 68 WebCore::VideoTrackPrivate::Kind::None, 69 m_trackPrivate->codec(), 70 0, 71 0, 72 { }, 73 0, 74 m_trackPrivate->bitrate(), 75 m_trackPrivate->sampleRate(), 76 m_trackPrivate->numberOfChannels(), 77 }; 70 78 } 71 79 -
trunk/Source/WebKit/GPUProcess/media/RemoteAudioTrackProxy.h
r286813 r286908 77 77 void willRemove() final; 78 78 79 TrackPrivateRemoteConfiguration &configuration();79 TrackPrivateRemoteConfiguration configuration(); 80 80 void configurationChanged(); 81 81 -
trunk/Source/WebKit/GPUProcess/media/RemoteVideoTrackProxy.cpp
r286813 r286908 55 55 } 56 56 57 TrackPrivateRemoteConfiguration &RemoteVideoTrackProxy::configuration()57 TrackPrivateRemoteConfiguration RemoteVideoTrackProxy::configuration() 58 58 { 59 static NeverDestroyed<TrackPrivateRemoteConfiguration> configuration; 60 61 configuration->trackId = m_trackPrivate->id(); 62 configuration->label = m_trackPrivate->label(); 63 configuration->language = m_trackPrivate->language(); 64 configuration->trackIndex = m_trackPrivate->trackIndex(); 65 configuration->startTimeVariance = m_trackPrivate->startTimeVariance(); 66 configuration->selected = m_trackPrivate->selected(); 67 configuration->videoKind = m_trackPrivate->kind(); 68 69 return configuration.get(); 59 TrackPrivateRemoteConfiguration configuration { }; 60 configuration.trackId = m_trackPrivate->id(); 61 configuration.label = m_trackPrivate->label(); 62 configuration.language = m_trackPrivate->language(); 63 configuration.trackIndex = m_trackPrivate->trackIndex(); 64 configuration.startTimeVariance = m_trackPrivate->startTimeVariance(); 65 configuration.selected = m_trackPrivate->selected(); 66 configuration.videoKind = m_trackPrivate->kind(); 67 configuration.codec = m_trackPrivate->codec(); 68 configuration.width = m_trackPrivate->width(); 69 configuration.height = m_trackPrivate->height(); 70 configuration.colorSpace = m_trackPrivate->colorSpace(); 71 configuration.framerate = m_trackPrivate->framerate(); 72 configuration.bitrate = m_trackPrivate->bitrate(); 73 return configuration; 70 74 } 71 75 72 void RemoteVideoTrackProxy:: configurationChanged()76 void RemoteVideoTrackProxy::updateConfiguration() 73 77 { 74 78 if (!m_connectionToWebProcess) … … 88 92 return; 89 93 m_selected = selected; 90 configurationChanged();94 updateConfiguration(); 91 95 } 92 96 93 97 void RemoteVideoTrackProxy::idChanged(const AtomString&) 94 98 { 95 configurationChanged();99 updateConfiguration(); 96 100 } 97 101 98 102 void RemoteVideoTrackProxy::labelChanged(const AtomString&) 99 103 { 100 configurationChanged();104 updateConfiguration(); 101 105 } 102 106 103 107 void RemoteVideoTrackProxy::languageChanged(const AtomString&) 104 108 { 105 configurationChanged();109 updateConfiguration(); 106 110 } 107 111 -
trunk/Source/WebKit/GPUProcess/media/RemoteVideoTrackProxy.h
r286813 r286908 70 70 // VideoTrackPrivateClient 71 71 void selectedChanged(bool) final; 72 void configurationChanged() final { updateConfiguration(); } 72 73 73 74 // TrackPrivateBaseClient … … 77 78 void willRemove() final; 78 79 79 TrackPrivateRemoteConfiguration &configuration();80 void configurationChanged();80 TrackPrivateRemoteConfiguration configuration(); 81 void updateConfiguration(); 81 82 82 83 WeakPtr<GPUConnectionToWebProcess> m_connectionToWebProcess; -
trunk/Source/WebKit/GPUProcess/media/TrackPrivateRemoteConfiguration.h
r286813 r286908 47 47 WebCore::VideoTrackPrivate::Kind videoKind { WebCore::VideoTrackPrivate::Kind::None }; 48 48 49 String codec; 50 uint32_t width; 51 uint32_t height; 52 WebCore::PlatformVideoColorSpace colorSpace; 53 double framerate; 54 uint64_t bitrate; 55 uint32_t sampleRate; 56 uint32_t numberOfChannels; 57 49 58 template<class Encoder> 50 59 void encode(Encoder& encoder) const … … 59 68 encoder << selected; 60 69 encoder << videoKind; 70 encoder << codec; 71 encoder << width; 72 encoder << height; 73 encoder << colorSpace; 74 encoder << framerate; 75 encoder << bitrate; 76 encoder << sampleRate; 77 encoder << numberOfChannels; 61 78 } 62 79 … … 109 126 return std::nullopt; 110 127 128 std::optional<String> codec; 129 decoder >> codec; 130 if (!codec) 131 return std::nullopt; 132 133 std::optional<uint32_t> width; 134 decoder >> width; 135 if (!width) 136 return std::nullopt; 137 138 std::optional<uint32_t> height; 139 decoder >> height; 140 if (!height) 141 return std::nullopt; 142 143 std::optional<WebCore::PlatformVideoColorSpace> colorSpace; 144 decoder >> colorSpace; 145 if (!colorSpace) 146 return std::nullopt; 147 148 std::optional<double> framerate; 149 decoder >> framerate; 150 if (!framerate) 151 return std::nullopt; 152 153 std::optional<uint64_t> bitrate; 154 decoder >> bitrate; 155 if (!bitrate) 156 return std::nullopt; 157 158 std::optional<uint32_t> sampleRate; 159 decoder >> sampleRate; 160 if (!sampleRate) 161 return std::nullopt; 162 163 std::optional<uint32_t> numberOfChannels; 164 decoder >> numberOfChannels; 165 if (!numberOfChannels) 166 return std::nullopt; 167 111 168 return {{ 112 169 WTFMove(*trackId), … … 119 176 *selected, 120 177 *videoKind, 178 WTFMove(*codec), 179 *width, 180 *height, 181 WTFMove(*colorSpace), 182 *framerate, 183 *bitrate, 184 *sampleRate, 185 *numberOfChannels, 121 186 }}; 122 187 } -
trunk/Source/WebKit/WebProcess/GPU/media/AudioTrackPrivateRemote.cpp
r286813 r286908 82 82 m_startTimeVariance = configuration.startTimeVariance; 83 83 m_kind = configuration.audioKind; 84 setCodec(WTFMove(configuration.codec)); 85 setSampleRate(configuration.sampleRate); 86 setNumberOfChannels(configuration.numberOfChannels); 87 setBitrate(configuration.bitrate); 88 84 89 AudioTrackPrivate::setEnabled(configuration.enabled); 85 90 } -
trunk/Source/WebKit/WebProcess/GPU/media/AudioTrackPrivateRemote.h
r286813 r286908 67 67 AtomString m_language; 68 68 int m_trackIndex { -1 }; 69 69 70 MediaTime m_startTimeVariance { MediaTime::zeroTime() }; 70 71 WebCore::MediaPlayerIdentifier m_playerIdentifier; -
trunk/Source/WebKit/WebProcess/GPU/media/VideoTrackPrivateRemote.cpp
r286813 r286908 81 81 m_startTimeVariance = configuration.startTimeVariance; 82 82 m_kind = configuration.videoKind; 83 m_codec = configuration.codec; 84 m_width = configuration.width; 85 m_height = configuration.height; 86 m_colorSpace = configuration.colorSpace; 87 m_framerate = configuration.framerate; 88 m_bitrate = configuration.bitrate; 89 83 90 VideoTrackPrivate::setSelected(configuration.selected); 84 91 } -
trunk/Source/WebKit/WebProcess/GPU/media/VideoTrackPrivateRemote.h
r286813 r286908 58 58 int trackIndex() const final { return m_trackIndex; } 59 59 MediaTime startTimeVariance() const final { return m_startTimeVariance; } 60 String codec() const final { return m_codec; } 61 uint32_t width() const final { return m_width; } 62 uint32_t height() const final { return m_height; } 63 WebCore::PlatformVideoColorSpace colorSpace() const final { return m_colorSpace; } 64 double framerate() const final { return m_framerate; } 65 uint64_t bitrate() const final { return m_bitrate; } 60 66 61 67 private: … … 71 77 AtomString m_language; 72 78 int m_trackIndex { -1 }; 79 String m_codec; 80 uint32_t m_width { 0 }; 81 uint32_t m_height { 0 }; 82 WebCore::PlatformVideoColorSpace m_colorSpace; 83 double m_framerate { 0 }; 84 uint64_t m_bitrate { 0 }; 73 85 MediaTime m_startTimeVariance { MediaTime::zeroTime() }; 74 86 TrackPrivateRemoteIdentifier m_idendifier;
Note:
See TracChangeset
for help on using the changeset viewer.