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