Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: cf8f9c6c9acd6ed48126c63fb603ff2995f60660
      
https://github.com/WebKit/WebKit/commit/cf8f9c6c9acd6ed48126c63fb603ff2995f60660
  Author: Youenn Fablet <you...@apple.com>
  Date:   2024-11-20 (Wed, 20 Nov 2024)

  Changed paths:
    M 
Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm
    M Source/WebCore/platform/mediastream/AudioMediaStreamTrackRenderer.cpp
    M Source/WebCore/platform/mediastream/AudioMediaStreamTrackRenderer.h
    M 
Source/WebCore/platform/mediastream/cocoa/AudioMediaStreamTrackRendererCocoa.cpp
    M 
Source/WebCore/platform/mediastream/cocoa/AudioMediaStreamTrackRendererCocoa.h
    M 
Source/WebCore/platform/mediastream/cocoa/AudioMediaStreamTrackRendererInternalUnit.cpp
    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/BaseAudioMediaStreamTrackRendererUnit.h
    M 
Source/WebCore/platform/mediastream/cocoa/IncomingAudioMediaStreamTrackRendererUnit.cpp
    M 
Source/WebCore/platform/mediastream/cocoa/IncomingAudioMediaStreamTrackRendererUnit.h
    M Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCAudioModule.cpp
    M Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCAudioModule.h
    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
    M 
Source/WebKit/WebProcess/GPU/webrtc/AudioMediaStreamTrackRendererInternalUnitManager.h

  Log Message:
  -----------
  [macOS] Add support for multi-speaker MediaStreamTrack audio playing
rdar://139969268
https://bugs.webkit.org/show_bug.cgi?id=283174

Reviewed by Eric Carlson.

Within WebProcess, we update AudioMediaStreamTrackRendererUnit and 
IncomingAudioMediaStreamTrackRendererUnit to support sources going to different 
speakers.
For each one of these classes, we register/unregister sources with their 
speaker device ID.
We then mix the sources that are using the same device ID.
We then send those per-speaker-device streams to the GPUProcess.

These streams are then rendered using 
LocalAudioMediaStreamTrackRendererInternalUnit, except if the ID is 'default'.
In that case, this stream will be rendered through VPIO if VPIO is running or 
via LocalAudioMediaStreamTrackRendererInternalUnit otherwise.

We no longer allow an audio rendering unit to change of device dynamically.
Instead, when this happens, the source will unregister itself from 
AudioMediaStreamTrackRendererUnit or IncomingAudioMediaStreamTrackRendererUnit,
and reregister itself with the new speaker device ID.

We add some threading assertions as a small improvement to the code.

Manually tested.

* 
Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaStreamAVFObjC.mm:
(WebCore::MediaPlayerPrivateMediaStreamAVFObjC::audioOutputDeviceChanged):
* Source/WebCore/platform/mediastream/AudioMediaStreamTrackRenderer.cpp:
(WebCore::AudioMediaStreamTrackRenderer::defaultDeviceID):
* Source/WebCore/platform/mediastream/AudioMediaStreamTrackRenderer.h:
* 
Source/WebCore/platform/mediastream/cocoa/AudioMediaStreamTrackRendererCocoa.cpp:
(WebCore::m_deviceID):
(WebCore::AudioMediaStreamTrackRendererCocoa::stop):
(WebCore::AudioMediaStreamTrackRendererCocoa::setAudioOutputDevice):
(WebCore::AudioMediaStreamTrackRendererCocoa::setRegisteredDataSource):
* 
Source/WebCore/platform/mediastream/cocoa/AudioMediaStreamTrackRendererCocoa.h:
* 
Source/WebCore/platform/mediastream/cocoa/AudioMediaStreamTrackRendererInternalUnit.cpp:
(WebCore::LocalAudioMediaStreamTrackRendererInternalUnit::setAudioOutputDevice):
(WebCore::AudioMediaStreamTrackRendererInternalUnit::create):
* 
Source/WebCore/platform/mediastream/cocoa/AudioMediaStreamTrackRendererInternalUnit.h:
(WebCore::AudioMediaStreamTrackRendererInternalUnit::close):
* 
Source/WebCore/platform/mediastream/cocoa/AudioMediaStreamTrackRendererUnit.cpp:
(WebCore::AudioMediaStreamTrackRendererUnit::singleton):
(WebCore::AudioMediaStreamTrackRendererUnit::AudioMediaStreamTrackRendererUnit):
(WebCore::AudioMediaStreamTrackRendererUnit::Unit::Unit):
(WebCore::AudioMediaStreamTrackRendererUnit::Unit::~Unit):
(WebCore::AudioMediaStreamTrackRendererUnit::Unit::close):
(WebCore::AudioMediaStreamTrackRendererUnit::deleteUnitsIfPossible):
(WebCore::AudioMediaStreamTrackRendererUnit::addSource):
(WebCore::AudioMediaStreamTrackRendererUnit::Unit::addSource):
(WebCore::AudioMediaStreamTrackRendererUnit::removeSource):
(WebCore::AudioMediaStreamTrackRendererUnit::Unit::removeSource):
(WebCore::AudioMediaStreamTrackRendererUnit::addResetObserver):
(WebCore::AudioMediaStreamTrackRendererUnit::Unit::addResetObserver):
(WebCore::AudioMediaStreamTrackRendererUnit::Unit::retrieveFormatDescription):
(WebCore::AudioMediaStreamTrackRendererUnit::Unit::start):
(WebCore::AudioMediaStreamTrackRendererUnit::Unit::stop):
(WebCore::AudioMediaStreamTrackRendererUnit::Unit::reset):
(WebCore::AudioMediaStreamTrackRendererUnit::retrieveFormatDescription):
(WebCore::AudioMediaStreamTrackRendererUnit::Unit::updateRenderSourcesIfNecessary):
(WebCore::AudioMediaStreamTrackRendererUnit::Unit::render):
(WebCore::AudioMediaStreamTrackRendererUnit::~AudioMediaStreamTrackRendererUnit):
 Deleted.
(WebCore::AudioMediaStreamTrackRendererUnit::setAudioOutputDevice): Deleted.
(WebCore::AudioMediaStreamTrackRendererUnit::start): Deleted.
(WebCore::AudioMediaStreamTrackRendererUnit::stop): Deleted.
(WebCore::AudioMediaStreamTrackRendererUnit::reset): Deleted.
(WebCore::AudioMediaStreamTrackRendererUnit::updateRenderSourcesIfNecessary): 
Deleted.
(WebCore::AudioMediaStreamTrackRendererUnit::render): Deleted.
* Source/WebCore/platform/mediastream/cocoa/AudioMediaStreamTrackRendererUnit.h:
(WebCore::AudioMediaStreamTrackRendererUnit::Unit::create):
(WebCore::AudioMediaStreamTrackRendererUnit::Unit::hasSources const):
(WebCore::AudioMediaStreamTrackRendererUnit::Unit::isDefault const):
(WebCore::AudioMediaStreamTrackRendererUnit::Unit::WTF_GUARDED_BY_LOCK):
(WebCore::AudioMediaStreamTrackRendererUnit::protectedInternalUnit): Deleted.
(WebCore::AudioMediaStreamTrackRendererUnit::WTF_GUARDED_BY_LOCK): Deleted.
* 
Source/WebCore/platform/mediastream/cocoa/BaseAudioMediaStreamTrackRendererUnit.h:
* 
Source/WebCore/platform/mediastream/cocoa/IncomingAudioMediaStreamTrackRendererUnit.cpp:
(WebCore::IncomingAudioMediaStreamTrackRendererUnit::addResetObserver):
(WebCore::IncomingAudioMediaStreamTrackRendererUnit::addSourceToMixer):
(WebCore::IncomingAudioMediaStreamTrackRendererUnit::addSource):
(WebCore::IncomingAudioMediaStreamTrackRendererUnit::removeSourceFromMixer):
(WebCore::IncomingAudioMediaStreamTrackRendererUnit::removeSource):
(WebCore::IncomingAudioMediaStreamTrackRendererUnit::start):
(WebCore::IncomingAudioMediaStreamTrackRendererUnit::stop):
(WebCore::IncomingAudioMediaStreamTrackRendererUnit::renderAudioChunk):
(WebCore::IncomingAudioMediaStreamTrackRendererUnit::setAudioOutputDevice): 
Deleted.
* 
Source/WebCore/platform/mediastream/cocoa/IncomingAudioMediaStreamTrackRendererUnit.h:
* Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCAudioModule.cpp:
(WebCore::LibWebRTCAudioModule::pollFromSource):
* Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCAudioModule.h:
(WebCore::LibWebRTCAudioModule::startIncomingAudioRendering):
(WebCore::LibWebRTCAudioModule::stopIncomingAudioRendering):
* 
Source/WebKit/GPUProcess/webrtc/RemoteAudioMediaStreamTrackRendererInternalUnitManager.cpp:
(WebKit::RemoteAudioMediaStreamTrackRendererInternalUnitManagerUnit::create):
(WebKit::RemoteAudioMediaStreamTrackRendererInternalUnitManager::createUnit):
(WebKit::RemoteAudioMediaStreamTrackRendererInternalUnitManagerUnit::RemoteAudioMediaStreamTrackRendererInternalUnitManagerUnit):
(WebKit::RemoteAudioMediaStreamTrackRendererInternalUnitManagerUnit::setShouldRegisterAsSpeakerSamplesProducer):
(WebKit::RemoteAudioMediaStreamTrackRendererInternalUnitManagerUnit::updateShouldRegisterAsSpeakerSamplesProducer):
(WebKit::RemoteAudioMediaStreamTrackRendererInternalUnitManager::setAudioOutputDevice):
 Deleted.
(WebKit::RemoteAudioMediaStreamTrackRendererInternalUnitManagerUnit::setAudioOutputDevice):
 Deleted.
* 
Source/WebKit/GPUProcess/webrtc/RemoteAudioMediaStreamTrackRendererInternalUnitManager.h:
* 
Source/WebKit/GPUProcess/webrtc/RemoteAudioMediaStreamTrackRendererInternalUnitManager.messages.in:
* 
Source/WebKit/WebProcess/GPU/webrtc/AudioMediaStreamTrackRendererInternalUnitManager.cpp:
(WebKit::createRemoteAudioMediaStreamTrackRendererInternalUnitProxy):
(WebKit::AudioMediaStreamTrackRendererInternalUnitManagerProxy::AudioMediaStreamTrackRendererInternalUnitManagerProxy):
(WebKit::AudioMediaStreamTrackRendererInternalUnitManagerProxy::createRemoteUnit):
(WebKit::AudioMediaStreamTrackRendererInternalUnitManagerProxy::start):
(WebKit::AudioMediaStreamTrackRendererInternalUnitManagerProxy::setAudioOutputDevice):
 Deleted.
* 
Source/WebKit/WebProcess/GPU/webrtc/AudioMediaStreamTrackRendererInternalUnitManager.h:

Canonical link: https://commits.webkit.org/286855@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