Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 9e81b99af3104473041f6334bc92810d5c66da8f
https://github.com/WebKit/WebKit/commit/9e81b99af3104473041f6334bc92810d5c66da8f
Author: Youenn Fablet <[email protected]>
Date: 2024-01-10 (Wed, 10 Jan 2024)
Changed paths:
M Source/WebCore/platform/mediarecorder/MediaRecorderPrivate.cpp
M Source/WebCore/platform/mediastream/MediaConstraints.cpp
M Source/WebCore/platform/mediastream/MediaConstraints.h
M Source/WebCore/platform/mediastream/MediaStreamPrivate.cpp
M Source/WebCore/platform/mediastream/MediaStreamTrackPrivate.cpp
M Source/WebCore/platform/mediastream/MediaStreamTrackPrivate.h
M Source/WebCore/platform/mediastream/RealtimeIncomingVideoSource.cpp
M Source/WebCore/platform/mediastream/RealtimeIncomingVideoSource.h
M Source/WebCore/platform/mediastream/RealtimeMediaSource.cpp
M Source/WebCore/platform/mediastream/RealtimeMediaSource.h
M Source/WebCore/platform/mediastream/RealtimeMediaSourceCapabilities.h
M Source/WebCore/platform/mediastream/RealtimeMediaSourceCenter.h
M Source/WebCore/platform/mediastream/RealtimeMediaSourceSettings.cpp
M Source/WebCore/platform/mediastream/RealtimeMediaSourceSettings.h
M Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp
M Source/WebCore/platform/mock/MockRealtimeVideoSource.cpp
M Source/WebKit/Shared/WebCoreArgumentCoders.serialization.in
M Source/WebKit/UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp
M Source/WebKit/WebProcess/cocoa/RemoteRealtimeVideoSource.cpp
Log Message:
-----------
Allow MediaStreamTrackPrivate to work out of main thread
https://bugs.webkit.org/show_bug.cgi?id=267230
rdar://120652619
Reviewed by Eric Carlson.
We want to allow MediaStreamTrack to live in worker contexts, to allow
MediaStreamTrackProcessor et al.
We do a refactoring of MediaStreamTrackPrivate so that it can handle a
RealtimeMediaSource even though interaction is happening in a worker.
We keep the RealtimeMediaSource model (everything is main thread, except for
media data delivery).
We introduce MediaStreamTrackPrivateSourceObserverWrapper which will observe
the RealtimeMediaSource so that:
- It hops to main thread whenever interacting with the source (for instance for
starting or muting a source).
- It hops back to MediaStreamTrackPrivate thread when being notified by
RealtimeMediaSource.
We thus have to store more state in MediaStreamTrackPrivate (muted, settings
and so on) and we update these states based on RealtimeMediaSource observing
callbacks.
We also start to update the code to more directly use track/privateTrack
instead of source wherever possible to better isolate sources from JS code.
We update RealtimeIncomingVideoSource so that clients are notified of settings
that change.
This was the case for width and height but not frame rate.
Drive-by fix in UserMediaCaptureManagerProxy::SourceProxy where we should grab
fresh settings whenever applyConstraints succeeds.
* Source/WebCore/platform/mediarecorder/MediaRecorderPrivate.cpp:
(WebCore::MediaRecorderPrivate::checkTrackState):
* Source/WebCore/platform/mediastream/MediaConstraints.cpp:
(WebCore::StringConstraint::isolatedCopy const):
(WebCore::MediaTrackConstraintSetMap::isolatedCopy const):
(WebCore::MediaConstraints::isolatedCopy const):
* Source/WebCore/platform/mediastream/MediaConstraints.h:
(WebCore::MediaTrackConstraintSetMap::MediaTrackConstraintSetMap):
* Source/WebCore/platform/mediastream/MediaStreamPrivate.cpp:
(WebCore::MediaStreamPrivate::monitorOrientation):
* Source/WebCore/platform/mediastream/MediaStreamTrackPrivate.cpp:
(WebCore::MediaStreamTrackPrivate::create):
(WebCore::MediaStreamTrackPrivateSourceObserverWrapper::create):
(WebCore::MediaStreamTrackPrivateSourceObserverWrapper::initialize):
(WebCore::MediaStreamTrackPrivateSourceObserverWrapper::std::function<void):
(WebCore::MediaStreamTrackPrivateSourceObserverWrapper::source):
(WebCore::MediaStreamTrackPrivateSourceObserverWrapper::start):
(WebCore::MediaStreamTrackPrivateSourceObserverWrapper::stop):
(WebCore::MediaStreamTrackPrivateSourceObserverWrapper::requestToEnd):
(WebCore::MediaStreamTrackPrivateSourceObserverWrapper::setMuted):
(WebCore::MediaStreamTrackPrivateSourceObserverWrapper::close):
(WebCore::MediaStreamTrackPrivateSourceObserverWrapper::applyConstraints):
(WebCore::MediaStreamTrackPrivateSourceObserverWrapper::MediaStreamTrackPrivateSourceObserverWrapper):
(WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate):
(WebCore::MediaStreamTrackPrivate::initialize):
(WebCore::MediaStreamTrackPrivate::~MediaStreamTrackPrivate):
(WebCore::MediaStreamTrackPrivate::isOnCreationThread):
(WebCore::MediaStreamTrackPrivate::forEachObserver):
(WebCore::MediaStreamTrackPrivate::addObserver):
(WebCore::MediaStreamTrackPrivate::removeObserver):
(WebCore::MediaStreamTrackPrivate::setContentHint):
(WebCore::MediaStreamTrackPrivate::startProducingData):
(WebCore::MediaStreamTrackPrivate::stopProducingData):
(WebCore::MediaStreamTrackPrivate::setIsInBackground):
(WebCore::MediaStreamTrackPrivate::setMuted):
(WebCore::MediaStreamTrackPrivate::setEnabled):
(WebCore::MediaStreamTrackPrivate::endTrack):
(WebCore::MediaStreamTrackPrivate::clone):
(WebCore::MediaStreamTrackPrivate::source):
(WebCore::MediaStreamTrackPrivate::hasSource const):
(WebCore::MediaStreamTrackPrivate::getPhotoCapabilities):
(WebCore::MediaStreamTrackPrivate::getPhotoSettings):
(WebCore::MediaStreamTrackPrivate::takePhoto):
(WebCore::MediaStreamTrackPrivate::applyConstraints):
(WebCore::MediaStreamTrackPrivate::createAudioSourceProvider):
(WebCore::MediaStreamTrackPrivate::sourceStarted):
(WebCore::MediaStreamTrackPrivate::sourceStopped):
(WebCore::MediaStreamTrackPrivate::sourceMutedChanged):
(WebCore::MediaStreamTrackPrivate::sourceSettingsChanged):
(WebCore::MediaStreamTrackPrivate::sourceConfigurationChanged):
(WebCore::MediaStreamTrackPrivate::hasStartedProducingData):
(WebCore::MediaStreamTrackPrivate::updateReadyState):
(WebCore::MediaStreamTrackPrivate::label const): Deleted.
(WebCore::MediaStreamTrackPrivate::muted const): Deleted.
(WebCore::MediaStreamTrackPrivate::interrupted const): Deleted.
(WebCore::MediaStreamTrackPrivate::isCaptureTrack const): Deleted.
(WebCore::MediaStreamTrackPrivate::settings const): Deleted.
(WebCore::MediaStreamTrackPrivate::capabilities const): Deleted.
(WebCore::MediaStreamTrackPrivate::preventSourceFromEnding): Deleted.
(WebCore::MediaStreamTrackPrivate::audioUnitWillStart): Deleted.
* Source/WebCore/platform/mediastream/MediaStreamTrackPrivate.h:
* Source/WebCore/platform/mediastream/RealtimeIncomingVideoSource.cpp:
(WebCore::RealtimeIncomingVideoSource::settings):
(WebCore::RealtimeIncomingVideoSource::settingsDidChange):
(WebCore::RealtimeIncomingVideoSource::notifyNewFrame):
* Source/WebCore/platform/mediastream/RealtimeIncomingVideoSource.h:
* Source/WebCore/platform/mediastream/RealtimeMediaSource.cpp:
(WebCore::RealtimeMediaSource::initializePersistentId):
(WebCore::RealtimeMediaSource::hashedId const):
* Source/WebCore/platform/mediastream/RealtimeMediaSource.h:
(WebCore::RealtimeMediaSource::setName):
(WebCore::RealtimeMediaSource::isVideoSource const): Deleted.
* Source/WebCore/platform/mediastream/RealtimeMediaSourceCapabilities.h:
(WebCore::RealtimeMediaSourceCapabilities::RealtimeMediaSourceCapabilities):
(WebCore::RealtimeMediaSourceCapabilities::deviceId const):
(WebCore::RealtimeMediaSourceCapabilities::setDeviceId):
(WebCore::RealtimeMediaSourceCapabilities::groupId const):
(WebCore::RealtimeMediaSourceCapabilities::setGroupId):
(WebCore::RealtimeMediaSourceCapabilities::isolatedCopy const):
* Source/WebCore/platform/mediastream/RealtimeMediaSourceCenter.h:
* Source/WebCore/platform/mediastream/RealtimeMediaSourceSettings.cpp:
(WebCore::RealtimeMediaSourceSettings::isolatedCopy const):
* Source/WebCore/platform/mediastream/RealtimeMediaSourceSettings.h:
(WebCore::RealtimeMediaSourceSettings::RealtimeMediaSourceSettings):
(WebCore::RealtimeMediaSourceSettings::deviceId const):
(WebCore::RealtimeMediaSourceSettings::setDeviceId):
(WebCore::RealtimeMediaSourceSettings::label const):
(WebCore::RealtimeMediaSourceSettings::setLabel):
* Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp:
(WebCore::CoreAudioCaptureSource::handleNewCurrentMicrophoneDevice):
* Source/WebCore/platform/mock/MockRealtimeVideoSource.cpp:
(WebCore::MockRealtimeVideoSource::drawText):
* Source/WebKit/Shared/WebCoreArgumentCoders.serialization.in:
* Source/WebKit/UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp:
(WebKit::UserMediaCaptureManagerProxy::SourceProxy::applyConstraints):
* Source/WebKit/WebProcess/cocoa/RemoteRealtimeVideoSource.cpp:
(WebKit::RemoteRealtimeVideoSource::clone):
Canonical link: https://commits.webkit.org/272844@main
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes