[webkit-changes] [WebKit/WebKit] 19888c: Prepare AVAudioSessionCaptureDeviceManager for spe...

youennf noreply at github.com
Wed Dec 18 07:59:08 PST 2024


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 19888c4fb22381309ac240707969b138b6210b77
      https://github.com/WebKit/WebKit/commit/19888c4fb22381309ac240707969b138b6210b77
  Author: Youenn Fablet <youenn at apple.com>
  Date:   2024-12-18 (Wed, 18 Dec 2024)

  Changed paths:
    M Source/WebCore/platform/audio/ios/AudioSessionIOS.h
    M Source/WebCore/platform/audio/ios/AudioSessionIOS.mm
    M Source/WebCore/platform/mediastream/cocoa/AudioMediaStreamTrackRendererInternalUnit.h
    M Source/WebCore/platform/mediastream/cocoa/AudioMediaStreamTrackRendererUnit.cpp
    M Source/WebCore/platform/mediastream/cocoa/AudioMediaStreamTrackRendererUnit.h
    M Source/WebCore/platform/mediastream/cocoa/IncomingAudioMediaStreamTrackRendererUnit.cpp
    M Source/WebCore/platform/mediastream/ios/AVAudioSessionCaptureDeviceManager.h
    M Source/WebCore/platform/mediastream/ios/AVAudioSessionCaptureDeviceManager.mm
    M Source/WebCore/platform/mediastream/mac/BaseAudioSharedUnit.h
    M Source/WebCore/platform/mediastream/mac/CoreAudioSharedUnit.cpp
    M Source/WebKit/GPUProcess/GPUConnectionToWebProcess.h
    M Source/WebKit/GPUProcess/media/RemoteAudioSessionProxy.cpp
    M Source/WebKit/GPUProcess/media/RemoteAudioSessionProxy.h
    M Source/WebKit/GPUProcess/media/RemoteMediaPlayerProxy.cpp
    M Source/WebKit/GPUProcess/webrtc/RemoteAudioMediaStreamTrackRendererInternalUnitManager.cpp
    M Source/WebKit/GPUProcess/webrtc/RemoteAudioMediaStreamTrackRendererInternalUnitManager.h
    M Source/WebKit/GPUProcess/webrtc/RemoteAudioMediaStreamTrackRendererInternalUnitManager.messages.in
    M Source/WebKit/WebProcess/GPU/webrtc/AudioMediaStreamTrackRendererInternalUnitManager.cpp

  Log Message:
  -----------
  Prepare AVAudioSessionCaptureDeviceManager for speaker selection
rdar://141435061
https://bugs.webkit.org/show_bug.cgi?id=284629

Reviewed by Eric Carlson.

Update AudioMediaStreamTrackRendererUnit so that we store the last used speaker of a page.
We then use that speaker on iOS for all audio of that page.
We add special support for the receiver speaker since this is handled by category option.

In addition, AVAudioSessionCaptureDeviceManager will be the place to set the preferred speaker.
In GPU process, the various players will all go to the AudioSessionProxy to give their preferred speaker.
The speaker will be used when the AudioSessionProxy gets activated.
This allows several pages to use different speakers without interferring with each other as long as they are not playing audio at the same time.

* Source/WebCore/platform/audio/ios/AudioSessionIOS.h:
* Source/WebCore/platform/audio/ios/AudioSessionIOS.mm:
(WebCore::AudioSessionIOS::setCategory):
* Source/WebCore/platform/mediastream/cocoa/AudioMediaStreamTrackRendererInternalUnit.h:
(WebCore::AudioMediaStreamTrackRendererInternalUnit::setLastDeviceUsed):
* Source/WebCore/platform/mediastream/cocoa/AudioMediaStreamTrackRendererUnit.cpp:
(WebCore::AudioMediaStreamTrackRendererUnit::supportsPerDeviceRendering):
(WebCore::AudioMediaStreamTrackRendererUnit::setLastDeviceUsed):
(WebCore::AudioMediaStreamTrackRendererUnit::ensureDeviceUnit):
(WebCore::AudioMediaStreamTrackRendererUnit::getDeviceUnit):
(WebCore::AudioMediaStreamTrackRendererUnit::addSource):
(WebCore::AudioMediaStreamTrackRendererUnit::removeSource):
(WebCore::AudioMediaStreamTrackRendererUnit::addResetObserver):
(WebCore::AudioMediaStreamTrackRendererUnit::retrieveFormatDescription):
(WebCore::AudioMediaStreamTrackRendererUnit::Unit::setLastDeviceUsed):
* Source/WebCore/platform/mediastream/cocoa/AudioMediaStreamTrackRendererUnit.h:
* Source/WebCore/platform/mediastream/cocoa/IncomingAudioMediaStreamTrackRendererUnit.cpp:
(WebCore::IncomingAudioMediaStreamTrackRendererUnit::addSource):
(WebCore::IncomingAudioMediaStreamTrackRendererUnit::removeSource):
* Source/WebCore/platform/mediastream/ios/AVAudioSessionCaptureDeviceManager.h:
* Source/WebCore/platform/mediastream/ios/AVAudioSessionCaptureDeviceManager.mm:
(WebCore::AVAudioSessionCaptureDeviceManager::setPreferredMicrophoneID):
(WebCore::AVAudioSessionCaptureDeviceManager::configurePreferredMicrophone):
(WebCore::AVAudioSessionCaptureDeviceManager::setPreferredSpeakerID):
(WebCore::AVAudioSessionCaptureDeviceManager::setPreferredAudioSessionDeviceIDs):
(WebCore::AVAudioSessionCaptureDeviceManager::setPreferredAudioSessionDeviceUID): Deleted.
(WebCore::AVAudioSessionCaptureDeviceManager::configurePreferredAudioCaptureDevice): Deleted.
(WebCore::AVAudioSessionCaptureDeviceManager::setPreferredAudioSessionDeviceUIDInternal): Deleted.
* Source/WebCore/platform/mediastream/mac/BaseAudioSharedUnit.h:
* Source/WebCore/platform/mediastream/mac/CoreAudioSharedUnit.cpp:
(WebCore::CoreAudioSharedUnit::captureDeviceChanged):
* Source/WebKit/GPUProcess/GPUConnectionToWebProcess.h:
* Source/WebKit/GPUProcess/media/RemoteAudioSessionProxy.cpp:
(WebKit::RemoteAudioSessionProxy::RemoteAudioSessionProxy):
(WebKit::RemoteAudioSessionProxy::setCategory):
(WebKit::RemoteAudioSessionProxy::tryToSetActive):
(WebKit::RemoteAudioSessionProxy::sharedPreferencesForWebProcess const):
(WebKit::RemoteAudioSessionProxy::setPreferredSpeakerID):
* Source/WebKit/GPUProcess/media/RemoteAudioSessionProxy.h:
* Source/WebKit/GPUProcess/media/RemoteMediaPlayerProxy.cpp:
(WebKit::RemoteMediaPlayerProxy::audioOutputDeviceChanged):
* Source/WebKit/GPUProcess/webrtc/RemoteAudioMediaStreamTrackRendererInternalUnitManager.cpp:
(WebKit::RemoteAudioMediaStreamTrackRendererInternalUnitManager::setLastDeviceUsed):
* Source/WebKit/GPUProcess/webrtc/RemoteAudioMediaStreamTrackRendererInternalUnitManager.h:
* Source/WebKit/GPUProcess/webrtc/RemoteAudioMediaStreamTrackRendererInternalUnitManager.messages.in:
* Source/WebKit/WebProcess/GPU/webrtc/AudioMediaStreamTrackRendererInternalUnitManager.cpp:
(WebKit::AudioMediaStreamTrackRendererInternalUnitManagerProxy::setLastDeviceUsed):

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



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


More information about the webkit-changes mailing list