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

Reply via email to