[webkit-changes] [WebKit/WebKit] 4918b7: Implement MediaSession voiceactivity action

youennf noreply at github.com
Fri Sep 6 13:32:19 PDT 2024


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 4918b7c46048ecbb3de1f268c7f424fc7bb5dca3
      https://github.com/WebKit/WebKit/commit/4918b7c46048ecbb3de1f268c7f424fc7bb5dca3
  Author: Youenn Fablet <youenn at apple.com>
  Date:   2024-09-06 (Fri, 06 Sep 2024)

  Changed paths:
    M LayoutTests/http/wpt/mediasession/resources/toggleCapture-iframe.html
    A LayoutTests/http/wpt/mediasession/voiceActivityDetection-expected.txt
    A LayoutTests/http/wpt/mediasession/voiceActivityDetection.html
    M LayoutTests/platform/glib/TestExpectations
    M LayoutTests/platform/mac-ventura/TestExpectations
    M Source/WTF/wtf/PlatformHave.h
    M Source/WebCore/Modules/mediasession/MediaSession.cpp
    M Source/WebCore/Modules/mediasession/MediaSessionAction.h
    M Source/WebCore/Modules/mediasession/MediaSessionAction.idl
    M Source/WebCore/Modules/mediasession/MediaSessionActionDetails.h
    M Source/WebCore/Modules/mediastream/UserMediaClient.h
    M Source/WebCore/Modules/mediastream/UserMediaController.cpp
    M Source/WebCore/Modules/mediastream/UserMediaController.h
    M Source/WebCore/WebCore.xcodeproj/project.pbxproj
    M Source/WebCore/dom/Document.cpp
    M Source/WebCore/dom/Document.h
    M Source/WebCore/page/Page.cpp
    M Source/WebCore/page/Page.h
    M Source/WebCore/platform/mediastream/RealtimeMediaSourceFactory.h
    M Source/WebCore/platform/mediastream/mac/BaseAudioSharedUnit.cpp
    M Source/WebCore/platform/mediastream/mac/BaseAudioSharedUnit.h
    M Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp
    M Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.h
    A Source/WebCore/platform/mediastream/mac/CoreAudioSharedInternalUnit.h
    M Source/WebCore/platform/mediastream/mac/CoreAudioSharedUnit.cpp
    M Source/WebCore/platform/mediastream/mac/CoreAudioSharedUnit.h
    A Source/WebCore/platform/mediastream/mac/CoreAudioSharedUnit.mm
    M Source/WebCore/platform/mediastream/mac/MockAudioSharedUnit.mm
    M Source/WebCore/platform/mock/MockRealtimeMediaSourceCenter.cpp
    M Source/WebKit/GPUProcess/GPUProcess.cpp
    M Source/WebKit/GPUProcess/GPUProcess.h
    M Source/WebKit/GPUProcess/GPUProcess.messages.in
    M Source/WebKit/UIProcess/GPU/GPUProcessProxy.cpp
    M Source/WebKit/UIProcess/GPU/GPUProcessProxy.h
    M Source/WebKit/UIProcess/GPU/GPUProcessProxy.messages.in
    M Source/WebKit/UIProcess/WebPageProxy.cpp
    M Source/WebKit/UIProcess/WebPageProxy.h
    M Source/WebKit/UIProcess/WebPageProxy.messages.in
    M Source/WebKit/WebProcess/WebCoreSupport/WebUserMediaClient.cpp
    M Source/WebKit/WebProcess/WebCoreSupport/WebUserMediaClient.h
    M Source/WebKit/WebProcess/WebPage/WebPage.cpp
    M Source/WebKit/WebProcess/WebPage/WebPage.h
    M Source/WebKit/WebProcess/WebPage/WebPage.messages.in

  Log Message:
  -----------
  Implement MediaSession voiceactivity action
rdar://133054919
https://bugs.webkit.org/show_bug.cgi?id=277545

Reviewed by Eric Carlson.

We implement voiceactivity detection on macOS and iOS based on OS APIs.
This is done in GPU process and triggers voiceactivity action for documents having muted microphone tracks.

This detection works even if microphone is not in use, as long as the audio unit is running.
When being asked to stop the audio unit, we check whether voiceactivity detection is on.
If so, we mute microphone capture and let the audio unit running.

Added a mock based test.
Manually tested.

* LayoutTests/http/wpt/mediasession/resources/toggleCapture-iframe.html:
* LayoutTests/http/wpt/mediasession/voiceActivityDetection-expected.txt: Added.
* LayoutTests/http/wpt/mediasession/voiceActivityDetection.html: Added.
* LayoutTests/platform/glib/TestExpectations:
* LayoutTests/platform/mac-ventura/TestExpectations:
* Source/WTF/wtf/PlatformHave.h:
* Source/WebCore/Modules/mediasession/MediaSession.cpp:
(WebCore::platformCommandForMediaSessionAction):
(WebCore::MediaSession::setActionHandler):
* Source/WebCore/Modules/mediasession/MediaSessionAction.h:
* Source/WebCore/Modules/mediasession/MediaSessionAction.idl:
* Source/WebCore/Modules/mediastream/UserMediaClient.h:
* Source/WebCore/Modules/mediastream/UserMediaController.cpp:
(WebCore::UserMediaController::setShouldListenToVoiceActivity):
(WebCore::UserMediaController::checkDocumentForVoiceActivity):
(WebCore::UserMediaController::voiceActivityDetected):
* Source/WebCore/Modules/mediastream/UserMediaController.h:
* Source/WebCore/WebCore.xcodeproj/project.pbxproj:
* Source/WebCore/dom/Document.cpp:
(WebCore::Document::updateIsPlayingMedia):
(WebCore::Document::hasMutedAudioCaptureDevice const):
(WebCore::Document::setShouldListenToVoiceActivity):
(WebCore::Document::voiceActivityDetected):
* Source/WebCore/dom/Document.h:
* Source/WebCore/page/Page.cpp:
(WebCore::Page::voiceActivityDetected):
* Source/WebCore/page/Page.h:
* Source/WebCore/platform/mediastream/RealtimeMediaSourceFactory.h:
(WebCore::AudioCaptureFactory::enableMutedSpeechActivityEventListener):
(WebCore::AudioCaptureFactory::disableMutedSpeechActivityEventListener):
* Source/WebCore/platform/mediastream/mac/BaseAudioSharedUnit.cpp:
(WebCore::BaseAudioSharedUnit::stopProducingData):
* Source/WebCore/platform/mediastream/mac/BaseAudioSharedUnit.h:
(WebCore::BaseAudioSharedUnit::captureDeviceID const):
(WebCore::BaseAudioSharedUnit::persistentID const):
(WebCore::BaseAudioSharedUnit::setVoiceActivityListenerCallback):
(WebCore::BaseAudioSharedUnit::voiceActivityDetected):
(WebCore::BaseAudioSharedUnit::isListeningToVoiceActivity const):
* Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp:
(WebCore::CoreAudioCaptureSourceFactory::enableMutedSpeechActivityEventListener):
(WebCore::CoreAudioCaptureSourceFactory::disableMutedSpeechActivityEventListener):
* Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.h:
* Source/WebCore/platform/mediastream/mac/CoreAudioSharedInternalUnit.h: Added.
* Source/WebCore/platform/mediastream/mac/CoreAudioSharedUnit.cpp:
(WebCore::CoreAudioSharedUnit::startInternal):
(WebCore::CoreAudioSharedUnit::isProducingMicrophoneSamplesChanged):
(WebCore::CoreAudioSharedUnit::prewarmAudioUnitCreation):
(): Deleted.
* Source/WebCore/platform/mediastream/mac/CoreAudioSharedUnit.h:
* Source/WebCore/platform/mediastream/mac/CoreAudioSharedUnit.mm: Added.
(WebCore::speechActivityListenerCallback):
(WebCore::manageSpeechActivityListener):
(WebCore::CoreAudioSharedUnit::processVoiceActivityEvent):
(WebCore::CoreAudioSharedInternalUnit::setVoiceActivityDetection):
(WebCore::CoreAudioSharedUnit::enableMutedSpeechActivityEventListener):
(WebCore::CoreAudioSharedUnit::disableMutedSpeechActivityEventListener):
* Source/WebCore/platform/mediastream/mac/MockAudioSharedUnit.mm:
(WebCore::m_voiceDetectionTimer):
(WebCore::MockAudioSharedInternalUnit::setVoiceActivityDetection):
(WebCore::MockAudioSharedInternalUnit::voiceDetected):
(WebCore::MockAudioSharedInternalUnit::set):
* Source/WebCore/platform/mock/MockRealtimeMediaSourceCenter.cpp:
* Source/WebKit/GPUProcess/GPUProcess.cpp:
(WebKit::GPUProcess::setShouldListenToVoiceActivity):
* Source/WebKit/GPUProcess/GPUProcess.h:
* Source/WebKit/GPUProcess/GPUProcess.messages.in:
* Source/WebKit/UIProcess/GPU/GPUProcessProxy.cpp:
(WebKit::GPUProcessProxy::setShouldListenToVoiceActivity):
(WebKit::GPUProcessProxy::voiceActivityDetected):
* Source/WebKit/UIProcess/GPU/GPUProcessProxy.h:
* Source/WebKit/UIProcess/GPU/GPUProcessProxy.messages.in:
* Source/WebKit/UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::resetState):
(WebKit::WebPageProxy::setShouldListenToVoiceActivity):
(WebKit::WebPageProxy::voiceActivityDetected):
(WebKit::WebPageProxy::gpuProcessExited):
* Source/WebKit/UIProcess/WebPageProxy.h:
* Source/WebKit/UIProcess/WebPageProxy.messages.in:
* Source/WebKit/WebProcess/WebCoreSupport/WebUserMediaClient.cpp:
(WebKit::WebUserMediaClient::setShouldListenToVoiceActivity):
* Source/WebKit/WebProcess/WebCoreSupport/WebUserMediaClient.h:
* Source/WebKit/WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::voiceActivityDetected):
* Source/WebKit/WebProcess/WebPage/WebPage.h:
* Source/WebKit/WebProcess/WebPage/WebPage.messages.in:

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