Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 3664d7d244e0924b68bd6fd9b24f0f6aa3a7821a
https://github.com/WebKit/WebKit/commit/3664d7d244e0924b68bd6fd9b24f0f6aa3a7821a
Author: Youenn Fablet <[email protected]>
Date: 2024-06-14 (Fri, 14 Jun 2024)
Changed paths:
M
LayoutTests/fast/mediastream/MediaDevices-getSupportedConstraints-expected.txt
A LayoutTests/fast/mediastream/camera-powerEfficient-track-expected.txt
A LayoutTests/fast/mediastream/camera-powerEfficient-track.html
M LayoutTests/fast/mediastream/getUserMedia-video-rescaling.html
M LayoutTests/platform/glib/TestExpectations
M Source/WebCore/Modules/mediastream/MediaDevices.cpp
M Source/WebCore/Modules/mediastream/MediaTrackConstraints.cpp
M Source/WebCore/Modules/mediastream/MediaTrackConstraints.h
M Source/WebCore/Modules/mediastream/MediaTrackConstraints.idl
M Source/WebCore/Modules/mediastream/MediaTrackSupportedConstraints.h
M Source/WebCore/Modules/mediastream/MediaTrackSupportedConstraints.idl
M Source/WebCore/platform/mediastream/MediaConstraintType.cpp
M Source/WebCore/platform/mediastream/MediaConstraintType.h
M Source/WebCore/platform/mediastream/MediaConstraints.cpp
M Source/WebCore/platform/mediastream/MediaConstraints.h
M Source/WebCore/platform/mediastream/RealtimeMediaSource.cpp
M Source/WebCore/platform/mediastream/RealtimeMediaSource.h
M
Source/WebCore/platform/mediastream/RealtimeMediaSourceSupportedConstraints.cpp
M Source/WebCore/platform/mediastream/RealtimeVideoCaptureSource.cpp
M Source/WebCore/platform/mediastream/RealtimeVideoCaptureSource.h
M Source/WebCore/platform/mediastream/VideoPreset.h
M Source/WebCore/platform/mediastream/mac/AVVideoCaptureSource.h
M Source/WebCore/platform/mediastream/mac/AVVideoCaptureSource.mm
M Source/WebCore/platform/mock/MockMediaDevice.h
M Source/WebCore/platform/mock/MockRealtimeMediaSourceCenter.cpp
M Source/WebCore/testing/Internals.cpp
M Source/WebCore/testing/Internals.h
M Source/WebCore/testing/Internals.idl
M Source/WebKit/GPUProcess/GPUConnectionToWebProcess.cpp
M Source/WebKit/Shared/WebCoreArgumentCoders.serialization.in
M Source/WebKit/UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp
M Source/WebKit/UIProcess/Cocoa/UserMediaCaptureManagerProxy.h
M Source/WebKit/UIProcess/Cocoa/UserMediaCaptureManagerProxy.messages.in
M Source/WebKit/WebProcess/cocoa/RemoteRealtimeMediaSource.h
M Source/WebKit/WebProcess/cocoa/RemoteRealtimeMediaSourceProxy.cpp
M Source/WebKit/WebProcess/cocoa/RemoteRealtimeMediaSourceProxy.h
Log Message:
-----------
Prefer videoBinned camera presets in case resizing is needed
https://bugs.webkit.org/show_bug.cgi?id=275317
rdar://129506159
Reviewed by Eric Carlson.
In case we select a preset that might require downsampling, it is good to favor
binned presets as this is better for power efficiency.
Previously, we were favoring videoBinned presets if they were closer to the
final size.
We can be more aggressive than that and favor videoBinned presets even if they
are further from the final size.
We still try to select the smallest possible videoBinned preset.
This is implemented in RealtimeVideoCaptureSource.
As video binned format may not always be the best preset, we use the
powerEfficientPixelFormat as a constraint that can be given to
getUserMedia/applyConstraints
to aggressively select binned presets.
We do not expose settings and capabilities for this constraint since we only
use it as a hint that the web application is wanting power efficiency.
We update some code to allow testing this feature.
We add a isEfficient field to VideoPreset so that we can mock efficient presets.
We have one such mock preset (environment camera, 1920 x 1080) that we use for
testing.
We add the infrastructure to check whether a given capture track is power
efficient or not.
We have to update
LayoutTests/fast/mediastream/getUserMedia-video-rescaling.html given it will
now favor 1920x1080 preset, which is 16/9.
*
LayoutTests/fast/mediastream/MediaDevices-getSupportedConstraints-expected.txt:
* LayoutTests/fast/mediastream/camera-powerEfficient-track-expected.txt: Added.
* LayoutTests/fast/mediastream/camera-powerEfficient-track.html: Added.
* LayoutTests/fast/mediastream/getUserMedia-video-rescaling.html:
* LayoutTests/platform/glib/TestExpectations:
* Source/WebCore/Modules/mediastream/MediaDevices.cpp:
(WebCore::hasInvalidGetDisplayMediaConstraint):
* Source/WebCore/Modules/mediastream/MediaTrackConstraints.cpp:
(WebCore::convertToInternalForm):
* Source/WebCore/Modules/mediastream/MediaTrackConstraints.h:
* Source/WebCore/Modules/mediastream/MediaTrackConstraints.idl:
* Source/WebCore/Modules/mediastream/MediaTrackSupportedConstraints.h:
* Source/WebCore/Modules/mediastream/MediaTrackSupportedConstraints.idl:
* Source/WebCore/platform/mediastream/MediaConstraintType.cpp:
(WebCore::convertToString):
* Source/WebCore/platform/mediastream/MediaConstraintType.h:
* Source/WebCore/platform/mediastream/MediaConstraints.cpp:
(WebCore::MediaTrackConstraintSetMap::filter const):
(WebCore::MediaTrackConstraintSetMap::set):
(WebCore::MediaTrackConstraintSetMap::merge):
(WebCore::MediaTrackConstraintSetMap::isValid const):
(WebCore::MediaConstraints::setDefaultVideoConstraints):
(WebCore::MediaTrackConstraintSetMap::isolatedCopy const):
* Source/WebCore/platform/mediastream/MediaConstraints.h:
(WebCore::MediaTrackConstraintSetMap::MediaTrackConstraintSetMap):
(WebCore::MediaTrackConstraintSetMap::powerEfficientPixelFormat const):
* Source/WebCore/platform/mediastream/RealtimeMediaSource.cpp:
(WebCore::RealtimeMediaSource::fitnessDistance):
(WebCore::RealtimeMediaSource::applyConstraint):
(WebCore::RealtimeMediaSource::selectSettings):
(WebCore::RealtimeMediaSource::supportsConstraint):
(WebCore::RealtimeMediaSource::hasAnyInvalidConstraint):
(WebCore::RealtimeMediaSource::extractVideoPresetConstraints):
* Source/WebCore/platform/mediastream/RealtimeMediaSource.h:
*
Source/WebCore/platform/mediastream/RealtimeMediaSourceSupportedConstraints.cpp:
(WebCore::RealtimeMediaSourceSupportedConstraints::supportsConstraint const):
* Source/WebCore/platform/mediastream/RealtimeVideoCaptureSource.cpp:
(WebCore::shouldUsePreset):
(WebCore::computePresetToUse):
(WebCore::RealtimeVideoCaptureSource::bestSupportedSizeFrameRateAndZoom):
(WebCore::RealtimeVideoCaptureSource::isPowerEfficient const):
(WebCore::RealtimeVideoCaptureSource::shouldUsePreset): Deleted.
* Source/WebCore/platform/mediastream/RealtimeVideoCaptureSource.h:
* Source/WebCore/platform/mediastream/VideoPreset.h:
(WebCore::VideoPreset::VideoPreset):
(WebCore::VideoPreset::isEfficient const):
* Source/WebCore/platform/mediastream/mac/AVVideoCaptureSource.h:
* Source/WebCore/platform/mediastream/mac/AVVideoCaptureSource.mm:
(WebCore::isFormatPowerEfficient):
(WebCore::AVVideoCaptureSource::generatePresets):
(WebCore::AVVideoCaptureSource::prefersPreset): Deleted.
* Source/WebCore/platform/mock/MockMediaDevice.h:
* Source/WebCore/platform/mock/MockRealtimeMediaSourceCenter.cpp:
(WebCore::defaultDevices):
* Source/WebCore/testing/Internals.cpp:
(WebCore::Internals::isMediaStreamTrackPowerEfficient const):
* Source/WebCore/testing/Internals.h:
* Source/WebCore/testing/Internals.idl:
* Source/WebKit/GPUProcess/GPUConnectionToWebProcess.cpp:
(WebKit::GPUConnectionToWebProcess::dispatchSyncMessage):
* Source/WebKit/Shared/WebCoreArgumentCoders.serialization.in:
* Source/WebKit/UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp:
(WebKit::UserMediaCaptureManagerProxy::isPowerEfficient):
* Source/WebKit/UIProcess/Cocoa/UserMediaCaptureManagerProxy.h:
* Source/WebKit/UIProcess/Cocoa/UserMediaCaptureManagerProxy.messages.in:
* Source/WebKit/WebProcess/cocoa/RemoteRealtimeMediaSource.h:
* Source/WebKit/WebProcess/cocoa/RemoteRealtimeMediaSourceProxy.cpp:
(WebKit::RemoteRealtimeMediaSourceProxy::isPowerEfficient const):
* Source/WebKit/WebProcess/cocoa/RemoteRealtimeMediaSourceProxy.h:
Canonical link: https://commits.webkit.org/280024@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