Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: e69c00275149ab466509f9d5cb8a8634bc80e7a5
      
https://github.com/WebKit/WebKit/commit/e69c00275149ab466509f9d5cb8a8634bc80e7a5
  Author: Jer Noble <jer.no...@apple.com>
  Date:   2025-02-28 (Fri, 28 Feb 2025)

  Changed paths:
    M Source/WTF/Scripts/Preferences/UnifiedWebPreferences.yaml
    M Source/WebCore/Modules/webaudio/AudioContext.cpp
    M Source/WebCore/Modules/webaudio/DefaultAudioDestinationNode.cpp
    M Source/WebCore/WebCore.xcodeproj/project.pbxproj
    M Source/WebCore/html/HTMLMediaElement.cpp
    M Source/WebCore/platform/MediaStrategy.h
    M Source/WebCore/platform/audio/AudioDestination.h
    M Source/WebCore/platform/audio/AudioDestinationResampler.cpp
    M Source/WebCore/platform/audio/AudioDestinationResampler.h
    M Source/WebCore/platform/audio/SharedAudioDestination.cpp
    M Source/WebCore/platform/audio/SharedAudioDestination.h
    M Source/WebCore/platform/audio/cocoa/AudioDestinationCocoa.cpp
    M Source/WebCore/platform/audio/cocoa/AudioDestinationCocoa.h
    M Source/WebCore/platform/audio/cocoa/AudioOutputUnitAdaptor.cpp
    M Source/WebCore/platform/audio/cocoa/AudioOutputUnitAdaptor.h
    M Source/WebCore/platform/audio/cocoa/SpatialAudioExperienceHelper.mm
    M Source/WebCore/platform/audio/gstreamer/AudioDestinationGStreamer.cpp
    M Source/WebCore/platform/audio/gstreamer/AudioDestinationGStreamer.h
    M Source/WebCore/platform/mock/MockAudioDestinationCocoa.cpp
    M Source/WebCore/platform/mock/MockAudioDestinationCocoa.h
    M Source/WebKit/GPUProcess/media/RemoteAudioDestinationManager.cpp
    M Source/WebKit/GPUProcess/media/RemoteAudioDestinationManager.h
    M Source/WebKit/GPUProcess/media/RemoteAudioDestinationManager.messages.in
    M Source/WebKit/WebProcess/GPU/media/RemoteAudioDestinationProxy.cpp
    M Source/WebKit/WebProcess/GPU/media/RemoteAudioDestinationProxy.h
    M Source/WebKit/WebProcess/GPU/media/WebMediaStrategy.cpp
    M Source/WebKit/WebProcess/GPU/media/WebMediaStrategy.h
    M Source/WebKitLegacy/mac/WebCoreSupport/WebPlatformStrategies.mm

  Log Message:
  -----------
  [Cocoa] Adopt CASpatialAudioExperience for WebAudio
https://bugs.webkit.org/show_bug.cgi?id=288249
rdar://145326961

Reviewed by Andy Estes.

Add support for creating a CASpatialAudioExperience and attaching that
experience to the CoreAudio AudioOutputUnit used by WebAudio.

The number of parameters taken by various AudioDestination subclasses
and strategies has become burdensome, so rather than add an additional
parameter needed for creating a CASpatialAudioExperience, add a new
AudioDestinationCreationOptions struct and use that struct for the
same purposes.

This new AudioDestinationCreationOptions struct will also contain a
sceneIdentifier used to anchor audio generation to a particular screen
location.

However, most audio on Cocoa ports flows through SharedAudioDestination,
which muxes that audio together into a single AudioUnit. Add the
spatialIdentifier as a key in the SharedAudioDestination's internal hash
map, and re-create the destinations adaptor when that destination's
sceneIdentifier changes.

The sceneIdentifier and preference must be passed through to the GPU
process so that it can be accessed by RemoteAudioDestinationManager.

* Source/WTF/Scripts/Preferences/UnifiedWebPreferences.yaml:
* Source/WebCore/Modules/webaudio/AudioContext.cpp:
(WebCore::AudioContext::sceneIdentifierDidChange):
* Source/WebCore/Modules/webaudio/DefaultAudioDestinationNode.cpp:
(WebCore::DefaultAudioDestinationNode::createDestination):
* Source/WebCore/WebCore.xcodeproj/project.pbxproj:
* Source/WebCore/html/HTMLMediaElement.cpp:
(WebCore::HTMLMediaElement::sceneIdentifierDidChange):
* Source/WebCore/platform/MediaStrategy.h:
* Source/WebCore/platform/audio/AudioDestination.h:
(WebCore::AudioDestination::inputDeviceId const):
(WebCore::AudioDestination::numberOfInputChannels const):
(WebCore::AudioDestination::numberOfOutputChannels const):
(WebCore::AudioDestination::sceneIdentifier const):
(WebCore::AudioDestination::setSceneIdentifier):
(WebCore::AudioDestination::AudioDestination):
* Source/WebCore/platform/audio/AudioDestinationResampler.cpp:
(WebCore::AudioDestinationResampler::AudioDestinationResampler):
* Source/WebCore/platform/audio/AudioDestinationResampler.h:
* Source/WebCore/platform/audio/SharedAudioDestination.cpp:
(WebCore::SharedAudioDestinationAdapter::sceneIdentifier const):
(WebCore::SharedAudioDestinationAdapter::takeEnsureFunction):
(WebCore::SharedAudioDestinationAdapter::ensureAdapter):
(WebCore::SharedAudioDestinationAdapter::SharedAudioDestinationAdapter):
(WebCore::SharedAudioDestinationAdapter::~SharedAudioDestinationAdapter):
(WebCore::SharedAudioDestination::create):
(WebCore::SharedAudioDestination::SharedAudioDestination):
(WebCore::SharedAudioDestination::setSceneIdentifier):
* Source/WebCore/platform/audio/SharedAudioDestination.h:
* Source/WebCore/platform/audio/cocoa/AudioDestinationCocoa.cpp:
(WebCore::AudioDestination::create):
(WebCore::AudioDestinationCocoa::AudioDestinationCocoa):
(WebCore::AudioDestinationCocoa::setSceneIdentifier):
* Source/WebCore/platform/audio/cocoa/AudioDestinationCocoa.h:
* Source/WebCore/platform/audio/cocoa/AudioOutputUnitAdaptor.cpp:
(WebCore::AudioOutputUnitAdaptor::setSpatialAudioExperience):
* Source/WebCore/platform/audio/cocoa/AudioOutputUnitAdaptor.h:
* Source/WebCore/platform/audio/cocoa/SpatialAudioExperienceHelper.mm:
(WebCore::createSpatialAudioExperienceWithOptions):
* 
Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.h:
* 
Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
(WebCore::MediaPlayerPrivateMediaStreamAVFObjC::sceneIdentifierDidChange):
(WebCore::MediaPlayerPrivateMediaStreamAVFObjC::updateSpatialTrackingLabel):
* Source/WebCore/platform/mediastream/AudioMediaStreamTrackRenderer.h:
* Source/WebCore/platform/mediastream/AudioTrackPrivateMediaStream.cpp:
(WebCore::AudioTrackPrivateMediaStream::setSpatialAudioExperience):
* Source/WebCore/platform/mediastream/AudioTrackPrivateMediaStream.h:
* 
Source/WebCore/platform/mediastream/cocoa/AudioMediaStreamTrackRendererCocoa.cpp:
(WebCore::AudioMediaStreamTrackRendererCocoa::setSpatialAudioExperience):
* 
Source/WebCore/platform/mediastream/cocoa/AudioMediaStreamTrackRendererCocoa.h:
* 
Source/WebCore/platform/mediastream/cocoa/AudioMediaStreamTrackRendererInternalUnit.cpp:
(WebCore::LocalAudioMediaStreamTrackRendererInternalUnit::setSpatialAudioExperience):
* 
Source/WebCore/platform/mediastream/cocoa/AudioMediaStreamTrackRendererInternalUnit.h:
(WebCore::AudioMediaStreamTrackRendererInternalUnit::setSpatialAudioExperience):
* 
Source/WebCore/platform/mediastream/cocoa/AudioMediaStreamTrackRendererUnit.cpp:
(WebCore::AudioMediaStreamTrackRendererUnit::setSpatialAudioExperience):
(WebCore::AudioMediaStreamTrackRendererUnit::Unit::setSpatialAudioExperience):
* Source/WebCore/platform/mediastream/cocoa/AudioMediaStreamTrackRendererUnit.h:
* 
Source/WebCore/platform/mediastream/cocoa/BaseAudioMediaStreamTrackRendererUnit.h:
(WebCore::BaseAudioMediaStreamTrackRendererUnit::setSpatialAudioExperience):
* 
Source/WebCore/platform/mediastream/cocoa/IncomingAudioMediaStreamTrackRendererUnit.cpp:
(WebCore::IncomingAudioMediaStreamTrackRendererUnit::setSpatialAudioExperience):
* 
Source/WebCore/platform/mediastream/cocoa/IncomingAudioMediaStreamTrackRendererUnit.h:
* Source/WebCore/platform/mock/MockAudioDestinationCocoa.cpp:
(WebCore::MockAudioDestinationCocoa::MockAudioDestinationCocoa):
* Source/WebCore/platform/mock/MockAudioDestinationCocoa.h:
* Source/WebKit/GPUProcess/media/RemoteAudioDestinationManager.cpp:
(WebKit::RemoteAudioDestinationManager::createAudioDestination):
(WebKit::RemoteAudioDestinationManager::setSceneIdentifier):
* Source/WebKit/GPUProcess/media/RemoteAudioDestinationManager.h:
* Source/WebKit/GPUProcess/media/RemoteAudioDestinationManager.messages.in:
* Source/WebKit/WebProcess/GPU/media/RemoteAudioDestinationProxy.cpp:
(WebKit::RemoteAudioDestinationProxy::create):
(WebKit::RemoteAudioDestinationProxy::RemoteAudioDestinationProxy):
(WebKit::RemoteAudioDestinationProxy::connection):
(WebKit::RemoteAudioDestinationProxy::setSceneIdentifier):
* Source/WebKit/WebProcess/GPU/media/RemoteAudioDestinationProxy.h:
* Source/WebKit/WebProcess/GPU/media/WebMediaStrategy.cpp:
(WebKit::WebMediaStrategy::createAudioDestination):
* Source/WebKit/WebProcess/GPU/media/WebMediaStrategy.h:
* Source/WebKitLegacy/mac/WebCoreSupport/WebPlatformStrategies.mm:

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



To unsubscribe from these emails, change your notification settings at 
https://github.com/WebKit/WebKit/settings/notifications
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to