Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 70664c036656992ccabca58b08e43e5918d8abf9
https://github.com/WebKit/WebKit/commit/70664c036656992ccabca58b08e43e5918d8abf9
Author: Jean-Yves Avenard <[email protected]>
Date: 2025-12-16 (Tue, 16 Dec 2025)
Changed paths:
M Source/JavaScriptCore/inspector/protocol/DOM.json
M Source/WTF/wtf/PlatformHave.h
M Source/WebCore/Headers.cmake
M Source/WebCore/PAL/pal/cf/CoreMediaSoftLink.cpp
M Source/WebCore/PAL/pal/cf/CoreMediaSoftLink.h
M Source/WebCore/SaferCPPExpectations/UnretainedCallArgsCheckerExpectations
M Source/WebCore/WebCore.xcodeproj/project.pbxproj
M Source/WebCore/html/HTMLMediaElement.cpp
M Source/WebCore/html/MediaElementSession.cpp
M Source/WebCore/html/track/VideoTrackConfiguration.cpp
M Source/WebCore/html/track/VideoTrackConfiguration.h
M Source/WebCore/inspector/agents/InspectorDOMAgent.cpp
R Source/WebCore/platform/SpatialVideoMetadata.h
M Source/WebCore/platform/TrackInfo.h
M Source/WebCore/platform/cocoa/PlaybackSessionModel.h
M Source/WebCore/platform/cocoa/PlaybackSessionModelMediaElement.h
M Source/WebCore/platform/cocoa/PlaybackSessionModelMediaElement.mm
A Source/WebCore/platform/graphics/ImmersiveVideoMetadata.h
M Source/WebCore/platform/graphics/MediaPlayer.cpp
M Source/WebCore/platform/graphics/PlatformVideoTrackConfiguration.h
R Source/WebCore/platform/graphics/VideoProjectionMetadata.h
M Source/WebCore/platform/graphics/avfoundation/AVTrackPrivateAVFObjCImpl.h
M Source/WebCore/platform/graphics/avfoundation/AVTrackPrivateAVFObjCImpl.mm
M
Source/WebCore/platform/graphics/avfoundation/FormatDescriptionUtilities.cpp
M Source/WebCore/platform/graphics/avfoundation/FormatDescriptionUtilities.h
M Source/WebCore/platform/graphics/cocoa/CMUtilities.mm
M Source/WebCore/platform/graphics/cocoa/NullVideoPresentationInterface.h
M Source/WebCore/platform/graphics/cocoa/VideoMediaSampleRenderer.mm
M Source/WebCore/platform/graphics/cocoa/VideoTrackPrivateWebM.cpp
M Source/WebCore/platform/graphics/cocoa/WebCoreDecompressionSession.mm
M Source/WebCore/platform/ios/VideoPresentationInterfaceIOS.h
M Source/WebInspectorUI/UserInterface/Views/MediaDetailsSidebarPanel.js
M Source/WebKit/Platform/ios/PlaybackSessionInterfaceLMK.h
M Source/WebKit/Platform/ios/PlaybackSessionInterfaceLMK.mm
M Source/WebKit/Shared/WebCoreArgumentCoders.serialization.in
M Source/WebKit/UIProcess/Cocoa/PlaybackSessionManagerProxy.h
M Source/WebKit/UIProcess/Cocoa/PlaybackSessionManagerProxy.messages.in
M Source/WebKit/UIProcess/Cocoa/PlaybackSessionManagerProxy.mm
M Source/WebKit/UIProcess/Cocoa/VideoPresentationManagerProxy.h
M Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenViewController.mm
M Source/WebKit/WebKitSwift/LinearMediaKit/LinearMediaTypes.swift
M Source/WebKit/WebKitSwift/LinearMediaKit/WKSLinearMediaTypes.h
M Source/WebKit/WebProcess/cocoa/PlaybackSessionManager.h
M Source/WebKit/WebProcess/cocoa/PlaybackSessionManager.mm
M Tools/TestWebKitAPI/SourcesCocoa.txt
M Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj
A Tools/TestWebKitAPI/Tests/WebKitCocoa/ImmersiveVideoMetadata.mm
A Tools/TestWebKitAPI/Tests/WebKitCocoa/immersivemono.mp4
A Tools/TestWebKitAPI/Tests/WebKitCocoa/immersivestereo-overunder.mp4
A Tools/TestWebKitAPI/Tests/WebKitCocoa/immersivestereo-sbs.mp4
A Tools/TestWebKitAPI/Tests/WebKitCocoa/spatial.mp4
Log Message:
-----------
[visionOS] spatial video don't play when MediaPlayerPrivateMediaSourceAVFObjC
runs in the WebContent process
https://bugs.webkit.org/show_bug.cgi?id=303301
rdar://165954788
Reviewed by Gerald Squelart.
The immersive videos couldn't have played as the required metadata were lost
during the WebContent->GPU serialisation.
We add support for extracting the Immersive Metadata from the
AVFormatDescription.
Our SpatialVideoMetadata and VideoProjectionMetadata were each designed to only
carry the information to determine if a video was spatial or immersive.
They didn't convey the entire information.
Their actual content had they contained what was needed to re-create a
CMFormatDescription would have had overlapping content.
As such, we merge both of those structures into a single ImmersiveVideoMetadata.
Added API tests.
* Source/JavaScriptCore/inspector/protocol/DOM.json:
* Source/WTF/wtf/PlatformHave.h:
* Source/WebCore/Headers.cmake:
* Source/WebCore/PAL/pal/cf/CoreMediaSoftLink.cpp:
* Source/WebCore/PAL/pal/cf/CoreMediaSoftLink.h:
* Source/WebCore/SaferCPPExpectations/UnretainedCallArgsCheckerExpectations:
* Source/WebCore/WebCore.xcodeproj/project.pbxproj:
* Source/WebCore/html/HTMLMediaElement.cpp:
* Source/WebCore/html/MediaElementSession.cpp:
(WebCore::MediaElementSession::descriptionForTrack):
* Source/WebCore/html/track/VideoTrackConfiguration.cpp:
(WebCore::VideoTrackConfiguration::setImmersiveVideoMetadata):
(WebCore::VideoTrackConfiguration::toJSON const):
(WebCore::VideoTrackConfiguration::setSpatialVideoMetadata): Deleted.
(WebCore::VideoTrackConfiguration::setVideoProjectionMetadata): Deleted.
* Source/WebCore/html/track/VideoTrackConfiguration.h:
(WebCore::VideoTrackConfiguration::immersiveVideoMetadata const):
(WebCore::VideoTrackConfiguration::spatialVideoMetadata const): Deleted.
(WebCore::VideoTrackConfiguration::videoProjectionMetadata const): Deleted.
* Source/WebCore/inspector/agents/InspectorDOMAgent.cpp:
(WebCore::InspectorDOMAgent::relayoutDocument):
(WebCore::InspectorDOMAgent::highlightNodeList):
(WebCore::InspectorDOMAgent::buildObjectForAccessibilityProperties):
(WebCore::InspectorDOMAgent::destroyedNodesTimerFired):
(WebCore::videoProjectionMetadataKind):
(WebCore::InspectorDOMAgent::getMediaStats):
* Source/WebCore/platform/SpatialVideoMetadata.h: Removed.
* Source/WebCore/platform/TrackInfo.h:
(WebCore::VideoInfo::create):
(WebCore::VideoInfo::VideoInfo):
* Source/WebCore/platform/cocoa/PlaybackSessionModel.h:
(WebCore::PlaybackSessionModelClient::immersiveVideoMetadataChanged):
(WebCore::PlaybackSessionModelClient::spatialVideoMetadataChanged): Deleted.
(WebCore::PlaybackSessionModelClient::videoProjectionMetadataChanged): Deleted.
* Source/WebCore/platform/cocoa/PlaybackSessionModelMediaElement.h:
* Source/WebCore/platform/cocoa/PlaybackSessionModelMediaElement.mm:
(WebCore::PlaybackSessionModelMediaElement::maybeUpdateVideoMetadata):
* Source/WebCore/platform/graphics/ImmersiveVideoMetadata.h: Added.
(WebCore::CameraCalibration::operator== const):
(WebCore::ImmersiveVideoMetadata::isSpatial const):
(WebCore::ImmersiveVideoMetadata::isImmersive const):
(WTF::LogArgument<WebCore::ImmersiveVideoMetadata>::toString):
* Source/WebCore/platform/graphics/MediaPlayer.cpp:
(WebCore::convertEnumerationToString):
(WebCore::convertImmersiveVideoMetadataToString):
(WebCore::convertSpatialVideoMetadataToString): Deleted.
(WebCore::convertVideoProjectionMetadataToString): Deleted.
* Source/WebCore/platform/graphics/PlatformVideoTrackConfiguration.h:
* Source/WebCore/platform/graphics/VideoProjectionMetadata.h: Removed.
* Source/WebCore/platform/graphics/avfoundation/AVTrackPrivateAVFObjCImpl.h:
* Source/WebCore/platform/graphics/avfoundation/AVTrackPrivateAVFObjCImpl.mm:
(WebCore::AVTrackPrivateAVFObjCImpl::videoTrackConfiguration const):
(WebCore::AVTrackPrivateAVFObjCImpl::immersiveVideoMetadata const):
(WebCore::AVTrackPrivateAVFObjCImpl::spatialVideoMetadata const): Deleted.
(WebCore::AVTrackPrivateAVFObjCImpl::videoProjectionMetadata const): Deleted.
* Source/WebCore/platform/graphics/avfoundation/FormatDescriptionUtilities.cpp:
(WTF::makeVectorElement):
(WebCore::codecFromFormatDescription):
(WebCore::toHeroEye):
(WebCore::toViewPackingKind):
(WebCore::toLensAlgorithmKind):
(WebCore::toLensDomain):
(WebCore::toLensRole):
(WebCore::toExtrinsicOriginSource):
(WebCore::toCameraCalibrationDataLensCollection):
(WebCore::toVideoProjectionMetadataKind):
(WebCore::immersiveVideoMetadataFromFormatDescription):
(WebCore::extractImmersiveVideoMetadata):
(WebCore::formatDescriptionDictionaryFromImmersiveVideoMetadata):
(WebCore::spatialVideoMetadataFromFormatDescription): Deleted.
(WebCore::videoProjectionMetadataFromFormatDescription): Deleted.
* Source/WebCore/platform/graphics/avfoundation/FormatDescriptionUtilities.h:
* Source/WebCore/platform/graphics/cocoa/CMUtilities.mm:
(WebCore::createFormatDescriptionFromTrackInfo):
(WebCore::createVideoInfoFromFormatDescription):
* Source/WebCore/platform/graphics/cocoa/NullVideoPresentationInterface.h:
* Source/WebCore/platform/graphics/cocoa/VideoMediaSampleRenderer.mm:
* Source/WebCore/platform/graphics/cocoa/VideoTrackPrivateWebM.cpp:
(WebCore::VideoTrackPrivateWebM::updateConfiguration):
* Source/WebCore/platform/graphics/cocoa/WebCoreDecompressionSession.mm:
(WebCore::cfDictionaryCreateCombined):
(WebCore::copyDescriptionExtensionValuesIfNeeded):
(WebCore::canCopyFormatDescriptionExtension): Deleted.
* Source/WebCore/platform/ios/VideoPresentationInterfaceIOS.h:
* Source/WebInspectorUI/UserInterface/Views/MediaDetailsSidebarPanel.js:
(WI.MediaDetailsSidebarPanel.prototype.setVideo):
* Source/WebKit/Platform/ios/PlaybackSessionInterfaceLMK.h:
* Source/WebKit/Platform/ios/PlaybackSessionInterfaceLMK.mm:
(WebKit::PlaybackSessionInterfaceLMK::immersiveVideoMetadataChanged):
(WebKit::PlaybackSessionInterfaceLMK::spatialVideoMetadataChanged): Deleted.
(WebKit::PlaybackSessionInterfaceLMK::videoProjectionMetadataChanged): Deleted.
* Source/WebKit/Shared/WebCoreArgumentCoders.serialization.in:
* Source/WebKit/UIProcess/Cocoa/PlaybackSessionManagerProxy.h:
* Source/WebKit/UIProcess/Cocoa/PlaybackSessionManagerProxy.messages.in:
* Source/WebKit/UIProcess/Cocoa/PlaybackSessionManagerProxy.mm:
(WebKit::PlaybackSessionModelContext::immersiveVideoMetadataChanged):
(WebKit::PlaybackSessionManagerProxy::immersiveVideoMetadataChanged):
(WebKit::PlaybackSessionModelContext::spatialVideoMetadataChanged): Deleted.
(WebKit::PlaybackSessionModelContext::videoProjectionMetadataChanged): Deleted.
(WebKit::PlaybackSessionManagerProxy::spatialVideoMetadataChanged): Deleted.
(WebKit::PlaybackSessionManagerProxy::videoProjectionMetadataChanged): Deleted.
* Source/WebKit/UIProcess/Cocoa/VideoPresentationManagerProxy.h:
* Source/WebKit/UIProcess/ios/fullscreen/WKFullScreenViewController.mm:
(-[WKFullScreenViewController
configureEnvironmentPickerOrFullscreenVideoButtonView]):
* Source/WebKit/WebKitSwift/LinearMediaKit/LinearMediaTypes.swift:
(WKSLinearMediaSpatialVideoMetadata.metadata):
* Source/WebKit/WebKitSwift/LinearMediaKit/WKSLinearMediaTypes.h:
* Source/WebKit/WebProcess/cocoa/PlaybackSessionManager.h:
* Source/WebKit/WebProcess/cocoa/PlaybackSessionManager.mm:
(WebKit::PlaybackSessionInterfaceContext::immersiveVideoMetadataChanged):
(WebKit::PlaybackSessionManager::immersiveVideoMetadataChanged):
(WebKit::PlaybackSessionInterfaceContext::spatialVideoMetadataChanged): Deleted.
(WebKit::PlaybackSessionInterfaceContext::videoProjectionMetadataChanged):
Deleted.
(WebKit::PlaybackSessionManager::spatialVideoMetadataChanged): Deleted.
(WebKit::PlaybackSessionManager::videoProjectionMetadataChanged): Deleted.
* Tools/TestWebKitAPI/SourcesCocoa.txt:
* Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
* Tools/TestWebKitAPI/Tests/WebKitCocoa/ImmersiveVideoMetadata.mm: Added.
(TestWebKitAPI::compareCameraCalibrationDictionary):
(TestWebKitAPI::compareCameraCalibrationArray):
(TestWebKitAPI::TEST(ImmersiveVideoMetadata, Spatial)):
(TestWebKitAPI::TEST(ImmersiveVideoMetadata, ImmersiveMono)):
(TestWebKitAPI::TEST(ImmersiveVideoMetadata, ImmersiveStereo_SideBySide)):
(TestWebKitAPI::TEST(ImmersiveVideoMetadata, ImmersiveStereo_OverUnder)):
* Tools/TestWebKitAPI/Tests/WebKitCocoa/immersivemono.mp4: Added.
* Tools/TestWebKitAPI/Tests/WebKitCocoa/immersivestereo-overunder.mp4: Added.
* Tools/TestWebKitAPI/Tests/WebKitCocoa/immersivestereo-sbs.mp4: Added.
* Tools/TestWebKitAPI/Tests/WebKitCocoa/spatial.mp4: Added.
Canonical link: https://commits.webkit.org/304503@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications