Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 6a2161611cb0a04bded789c994bee25aad099943
https://github.com/WebKit/WebKit/commit/6a2161611cb0a04bded789c994bee25aad099943
Author: Youenn Fablet <[email protected]>
Date: 2024-11-22 (Fri, 22 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.
Relanding with a fix for m_outputDescription check.
*
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/286952@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes