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

Reply via email to