Diff
Modified: trunk/Source/WebCore/ChangeLog (264709 => 264710)
--- trunk/Source/WebCore/ChangeLog 2020-07-22 18:00:35 UTC (rev 264709)
+++ trunk/Source/WebCore/ChangeLog 2020-07-22 18:12:11 UTC (rev 264710)
@@ -1,3 +1,45 @@
+2020-07-22 Jer Noble <jer.no...@apple.com>
+
+ [macOS] Adopt AVPlayer.videoRangeOverride
+ https://bugs.webkit.org/show_bug.cgi?id=213902
+ <rdar://problem/63953509>
+
+ Reviewed by Youenn Fablet.
+
+ AVPlayer.videoRangeOverride and also +[AVPlayer preferredVideoRangeForDisplays:] are replacements for the
+ process-global MTShouldPlayHDR() and MTOverrideShouldPlayHDRVideo() and should be used preferentially if
+ present.
+
+ * html/HTMLMediaElement.cpp:
+ (WebCore::HTMLMediaElement::createMediaPlayer):
+ (WebCore::HTMLMediaElement::setPreferredDynamicRangeMode):
+ * html/HTMLMediaElement.h:
+ * page/Page.cpp:
+ (WebCore::Page::screenPropertiesDidChange):
+ (WebCore::Page::windowScreenDidChange):
+ * page/Page.h:
+ * platform/PlatformScreen.h:
+ (WebCore::preferredDynamicRangeMode):
+ * platform/ScreenProperties.h:
+ (WebCore::ScreenData::encode const):
+ (WebCore::ScreenData::decode):
+ * platform/graphics/MediaPlayer.cpp:
+ (WebCore::MediaPlayer::setPreferredDynamicRangeMode):
+ * platform/graphics/MediaPlayer.h:
+ * platform/graphics/MediaPlayerPrivate.h:
+ (WebCore::MediaPlayerPrivateInterface::setPreferredDynamicRangeMode):
+ * platform/graphics/avfoundation/objc/CDMSessionAVStreamSession.mm:
+ (WebCore::CDMSessionAVStreamSession::update):
+ * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
+ * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
+ (WebCore::convertDynamicRangeModeEnumToAVVideoRange):
+ (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayer):
+ (WebCore::MediaPlayerPrivateAVFoundationObjC::setPreferredDynamicRangeMode):
+ * platform/mac/PlatformScreenMac.mm:
+ (WebCore::convertAVVideoRangeToEnum):
+ (WebCore::collectScreenProperties):
+ (WebCore::preferredDynamicRangeMode):
+
2020-07-22 Jon Davis <j...@apple.com>
Update status for Web App Manifest
Modified: trunk/Source/WebCore/PAL/ChangeLog (264709 => 264710)
--- trunk/Source/WebCore/PAL/ChangeLog 2020-07-22 18:00:35 UTC (rev 264709)
+++ trunk/Source/WebCore/PAL/ChangeLog 2020-07-22 18:12:11 UTC (rev 264710)
@@ -1,3 +1,15 @@
+2020-07-22 Jer Noble <jer.no...@apple.com>
+
+ [macOS] Adopt AVPlayer.videoRangeOverride
+ https://bugs.webkit.org/show_bug.cgi?id=213902
+ <rdar://problem/63953509>
+
+ Reviewed by Youenn Fablet.
+
+ * pal/cocoa/AVFoundationSoftLink.h:
+ * pal/cocoa/AVFoundationSoftLink.mm:
+ * pal/spi/cocoa/AVFoundationSPI.h:
+
2020-07-21 Eric Carlson <eric.carl...@apple.com>
Use AVRoutePickerView when available for choosing AirPlay devices
Modified: trunk/Source/WebCore/PAL/pal/cocoa/AVFoundationSoftLink.h (264709 => 264710)
--- trunk/Source/WebCore/PAL/pal/cocoa/AVFoundationSoftLink.h 2020-07-22 18:00:35 UTC (rev 264709)
+++ trunk/Source/WebCore/PAL/pal/cocoa/AVFoundationSoftLink.h 2020-07-22 18:12:11 UTC (rev 264710)
@@ -249,10 +249,11 @@
SOFT_LINK_CONSTANT_FOR_HEADER(PAL, AVFoundation, AVMetadataKeySpaceHLSDateRange, NSString *)
#define AVMetadataKeySpaceHLSDateRange PAL::get_AVFoundation_AVMetadataKeySpaceHLSDateRange()
-#if PLATFORM(MAC)
SOFT_LINK_CONSTANT_FOR_HEADER(PAL, AVFoundation, AVStreamDataParserContentKeyRequestProtocolVersionsKey, NSString *)
-#define AVStreamDataParserContentKeyRequestProtocolVersionsKey PAL::get_AVFoundation_AVStreamDataParserContentKeyRequestProtocolVersionsKey()
-#endif
+SOFT_LINK_CONSTANT_MAY_FAIL_FOR_HEADER(PAL, AVFoundation, AVVideoRangeSDR, NSString *)
+SOFT_LINK_CONSTANT_MAY_FAIL_FOR_HEADER(PAL, AVFoundation, AVVideoRangeHLG, NSString *)
+SOFT_LINK_CONSTANT_MAY_FAIL_FOR_HEADER(PAL, AVFoundation, AVVideoRangeHDR10, NSString *)
+SOFT_LINK_CONSTANT_MAY_FAIL_FOR_HEADER(PAL, AVFoundation, AVVideoRangeDolbyVisionPQ, NSString *)
#if PLATFORM(IOS_FAMILY)
SOFT_LINK_CONSTANT_FOR_HEADER(PAL, AVFoundation, AVURLAssetBoundNetworkInterfaceName, NSString *)
Modified: trunk/Source/WebCore/PAL/pal/cocoa/AVFoundationSoftLink.mm (264709 => 264710)
--- trunk/Source/WebCore/PAL/pal/cocoa/AVFoundationSoftLink.mm 2020-07-22 18:00:35 UTC (rev 264709)
+++ trunk/Source/WebCore/PAL/pal/cocoa/AVFoundationSoftLink.mm 2020-07-22 18:12:11 UTC (rev 264710)
@@ -199,6 +199,10 @@
SOFT_LINK_CONSTANT_MAY_FAIL_FOR_SOURCE_WITH_EXPORT(PAL, AVFoundation, AVURLAssetOutOfBandMIMETypeKey, NSString *, PAL_EXPORT)
SOFT_LINK_CONSTANT_MAY_FAIL_FOR_SOURCE_WITH_EXPORT(PAL, AVFoundation, AVURLAssetUseClientURLLoadingExclusively, NSString *, PAL_EXPORT)
SOFT_LINK_CONSTANT_MAY_FAIL_FOR_SOURCE_WITH_EXPORT(PAL, AVFoundation, AVVideoCodecTypeHEVCWithAlpha, NSString *, PAL_EXPORT)
+SOFT_LINK_CONSTANT_MAY_FAIL_FOR_SOURCE_WITH_EXPORT(PAL, AVFoundation, AVVideoRangeSDR, NSString *, PAL_EXPORT)
+SOFT_LINK_CONSTANT_MAY_FAIL_FOR_SOURCE_WITH_EXPORT(PAL, AVFoundation, AVVideoRangeHLG, NSString *, PAL_EXPORT)
+SOFT_LINK_CONSTANT_MAY_FAIL_FOR_SOURCE_WITH_EXPORT(PAL, AVFoundation, AVVideoRangeHDR10, NSString *, PAL_EXPORT)
+SOFT_LINK_CONSTANT_MAY_FAIL_FOR_SOURCE_WITH_EXPORT(PAL, AVFoundation, AVVideoRangeDolbyVisionPQ, NSString *, PAL_EXPORT)
#if PLATFORM(IOS_FAMILY)
SOFT_LINK_CONSTANT_FOR_SOURCE_WITH_EXPORT(PAL, AVFoundation, AVAudioSessionCategoryAmbient, NSString *, PAL_EXPORT)
Modified: trunk/Source/WebCore/PAL/pal/spi/cocoa/AVFoundationSPI.h (264709 => 264710)
--- trunk/Source/WebCore/PAL/pal/spi/cocoa/AVFoundationSPI.h 2020-07-22 18:00:35 UTC (rev 264709)
+++ trunk/Source/WebCore/PAL/pal/spi/cocoa/AVFoundationSPI.h 2020-07-22 18:12:11 UTC (rev 264710)
@@ -64,6 +64,12 @@
@end
NS_ASSUME_NONNULL_END
+typedef NSString * AVVideoRange NS_TYPED_ENUM;
+@interface AVPlayer (AVPlayerVideoRangeOverride)
+@property (nonatomic, copy, nullable) AVVideoRange videoRangeOverride;
++ (nullable AVVideoRange)preferredVideoRangeForDisplays:(nonnull NSArray <NSNumber *>*)displays;
+@end
+
#if ENABLE(WIRELESS_PLAYBACK_TARGET) || PLATFORM(IOS_FAMILY)
NS_ASSUME_NONNULL_BEGIN
Modified: trunk/Source/WebCore/html/HTMLMediaElement.cpp (264709 => 264710)
--- trunk/Source/WebCore/html/HTMLMediaElement.cpp 2020-07-22 18:00:35 UTC (rev 264709)
+++ trunk/Source/WebCore/html/HTMLMediaElement.cpp 2020-07-22 18:12:11 UTC (rev 264710)
@@ -6532,6 +6532,7 @@
m_player = MediaPlayer::create(*this);
m_player->setBufferingPolicy(m_bufferingPolicy);
+ m_player->setPreferredDynamicRangeMode(preferredDynamicRangeMode(document().view()));
schedulePlaybackControlsManagerUpdate();
#if ENABLE(WEB_AUDIO)
@@ -6944,6 +6945,12 @@
return emptyString();
}
+void HTMLMediaElement::setPreferredDynamicRangeMode(DynamicRangeMode mode)
+{
+ if (m_player)
+ m_player->setPreferredDynamicRangeMode(mode);
+}
+
Vector<String> HTMLMediaElement::mediaPlayerPreferredAudioCharacteristics() const
{
if (Page* page = document().page())
Modified: trunk/Source/WebCore/html/HTMLMediaElement.h (264709 => 264710)
--- trunk/Source/WebCore/html/HTMLMediaElement.h 2020-07-22 18:00:35 UTC (rev 264709)
+++ trunk/Source/WebCore/html/HTMLMediaElement.h 2020-07-22 18:12:11 UTC (rev 264710)
@@ -96,6 +96,8 @@
class VideoTrackPrivate;
class WebKitMediaKeys;
+enum class DynamicRangeMode : uint8_t;
+
template<typename> class DOMPromiseDeferred;
template<typename, typename> class PODInterval;
@@ -575,6 +577,8 @@
String mediaSessionTitle() const;
String sourceApplicationIdentifier() const;
+ void setPreferredDynamicRangeMode(DynamicRangeMode);
+
protected:
HTMLMediaElement(const QualifiedName&, Document&, bool createdByParser);
virtual void finishInitialization();
Modified: trunk/Source/WebCore/page/Page.cpp (264709 => 264710)
--- trunk/Source/WebCore/page/Page.cpp 2020-07-22 18:00:35 UTC (rev 264709)
+++ trunk/Source/WebCore/page/Page.cpp 2020-07-22 18:12:11 UTC (rev 264710)
@@ -1157,6 +1157,18 @@
pageOverlayController().didChangeDeviceScaleFactor();
}
+void Page::screenPropertiesDidChange()
+{
+#if ENABLE(VIDEO)
+ auto mode = preferredDynamicRangeMode(mainFrame().view());
+ forEachMediaElement([mode] (auto& element) {
+ element.setPreferredDynamicRangeMode(mode);
+ });
+#endif
+
+ setNeedsRecalcStyleInAllFrames();
+}
+
void Page::windowScreenDidChange(PlatformDisplayID displayID, Optional<unsigned> nominalFramesPerSecond)
{
if (displayID == m_displayID && nominalFramesPerSecond == m_displayNominalFramesPerSecond)
@@ -1170,6 +1182,13 @@
frame->document()->windowScreenDidChange(displayID);
}
+#if ENABLE(VIDEO)
+ auto mode = preferredDynamicRangeMode(mainFrame().view());
+ forEachMediaElement([mode] (auto& element) {
+ element.setPreferredDynamicRangeMode(mode);
+ });
+#endif
+
if (m_scrollingCoordinator)
m_scrollingCoordinator->windowScreenDidChange(displayID, nominalFramesPerSecond);
Modified: trunk/Source/WebCore/page/Page.h (264709 => 264710)
--- trunk/Source/WebCore/page/Page.h 2020-07-22 18:00:35 UTC (rev 264709)
+++ trunk/Source/WebCore/page/Page.h 2020-07-22 18:12:11 UTC (rev 264710)
@@ -362,6 +362,7 @@
float initialScaleIgnoringContentSize() const { return m_initialScaleIgnoringContentSize; }
WEBCORE_EXPORT void setInitialScaleIgnoringContentSize(float);
+ WEBCORE_EXPORT void screenPropertiesDidChange();
void windowScreenDidChange(PlatformDisplayID, Optional<unsigned> nominalFramesPerSecond);
PlatformDisplayID displayID() const { return m_displayID; }
Optional<unsigned> displayNominalFramesPerSecond() const { return m_displayNominalFramesPerSecond; }
Modified: trunk/Source/WebCore/platform/PlatformScreen.h (264709 => 264710)
--- trunk/Source/WebCore/platform/PlatformScreen.h 2020-07-22 18:00:35 UTC (rev 264709)
+++ trunk/Source/WebCore/platform/PlatformScreen.h 2020-07-22 18:12:11 UTC (rev 264710)
@@ -29,6 +29,8 @@
#include <wtf/Function.h>
#endif
+#include <wtf/EnumTraits.h>
+
#if PLATFORM(MAC)
OBJC_CLASS NSScreen;
OBJC_CLASS NSWindow;
@@ -79,6 +81,19 @@
WEBCORE_EXPORT bool screenSupportsExtendedColor(Widget* = nullptr);
+enum class DynamicRangeMode : uint8_t {
+ None,
+ Standard,
+ HLG,
+ HDR10,
+ DolbyVisionPQ,
+};
+#if PLATFORM(MAC)
+WEBCORE_EXPORT DynamicRangeMode preferredDynamicRangeMode(Widget* = nullptr);
+#else
+constexpr DynamicRangeMode preferredDynamicRangeMode(Widget* = nullptr) { return DynamicRangeMode::Standard; }
+#endif
+
#if PLATFORM(MAC) || PLATFORM(IOS_FAMILY)
WEBCORE_EXPORT bool screenSupportsHighDynamicRange(Widget* = nullptr);
#else
@@ -146,3 +161,18 @@
#endif
} // namespace WebCore
+
+namespace WTF {
+
+template<> struct EnumTraits<WebCore::DynamicRangeMode> {
+ using values = EnumValues<
+ WebCore::DynamicRangeMode,
+ WebCore::DynamicRangeMode::None,
+ WebCore::DynamicRangeMode::Standard,
+ WebCore::DynamicRangeMode::HLG,
+ WebCore::DynamicRangeMode::HDR10,
+ WebCore::DynamicRangeMode::DolbyVisionPQ
+ >;
+};
+
+} // namespace WTF
Modified: trunk/Source/WebCore/platform/ScreenProperties.h (264709 => 264710)
--- trunk/Source/WebCore/platform/ScreenProperties.h 2020-07-22 18:00:35 UTC (rev 264709)
+++ trunk/Source/WebCore/platform/ScreenProperties.h 2020-07-22 18:12:11 UTC (rev 264710)
@@ -49,6 +49,7 @@
bool screenIsMonochrome { false };
uint32_t displayMask { 0 };
IORegistryGPUID gpuID { 0 };
+ DynamicRangeMode preferredDynamicRangeMode { DynamicRangeMode::Standard };
#endif
#if PLATFORM(MAC) || PLATFORM(IOS_FAMILY)
@@ -99,7 +100,7 @@
encoder << screenAvailableRect << screenRect << screenDepth << screenDepthPerComponent << screenSupportsExtendedColor << screenHasInvertedColors << screenSupportsHighDynamicRange;
#if PLATFORM(MAC)
- encoder << screenIsMonochrome << displayMask << gpuID;
+ encoder << screenIsMonochrome << displayMask << gpuID << preferredDynamicRangeMode;
#endif
#if PLATFORM(MAC) || PLATFORM(IOS_FAMILY)
@@ -182,6 +183,11 @@
decoder >> gpuID;
if (!gpuID)
return WTF::nullopt;
+
+ Optional<DynamicRangeMode> preferredDynamicRangeMode;
+ decoder >> preferredDynamicRangeMode;
+ if (!preferredDynamicRangeMode)
+ return WTF::nullopt;
#endif
#if PLATFORM(MAC) || PLATFORM(IOS_FAMILY)
@@ -235,6 +241,7 @@
WTFMove(*screenIsMonochrome),
WTFMove(*displayMask),
WTFMove(*gpuID),
+ WTFMove(*preferredDynamicRangeMode),
#endif
#if PLATFORM(MAC) || PLATFORM(IOS_FAMILY)
WTFMove(*scaleFactor),
Modified: trunk/Source/WebCore/platform/graphics/MediaPlayer.cpp (264709 => 264710)
--- trunk/Source/WebCore/platform/graphics/MediaPlayer.cpp 2020-07-22 18:00:35 UTC (rev 264709)
+++ trunk/Source/WebCore/platform/graphics/MediaPlayer.cpp 2020-07-22 18:12:11 UTC (rev 264710)
@@ -1598,6 +1598,10 @@
return client().documentSecurityOrigin();
}
+void MediaPlayer::setPreferredDynamicRangeMode(DynamicRangeMode mode)
+{
+ m_private->setPreferredDynamicRangeMode(mode);
+}
#if !RELEASE_LOG_DISABLED
const Logger& MediaPlayer::mediaPlayerLogger()
Modified: trunk/Source/WebCore/platform/graphics/MediaPlayer.h (264709 => 264710)
--- trunk/Source/WebCore/platform/graphics/MediaPlayer.h 2020-07-22 18:00:35 UTC (rev 264709)
+++ trunk/Source/WebCore/platform/graphics/MediaPlayer.h 2020-07-22 18:12:11 UTC (rev 264710)
@@ -37,6 +37,7 @@
#include "PlatformLayer.h"
#include "PlatformMediaResourceLoader.h"
#include "PlatformMediaSession.h"
+#include "PlatformScreen.h"
#include "SecurityOriginHash.h"
#include "Timer.h"
#include <wtf/URL.h>
@@ -627,6 +628,9 @@
const MediaPlayerPrivateInterface* playerPrivate() const { return m_private.get(); }
+ DynamicRangeMode preferredDynamicRangeMode() const { return m_preferredDynamicRangeMode; }
+ void setPreferredDynamicRangeMode(DynamicRangeMode);
+
private:
MediaPlayer(MediaPlayerClient&);
MediaPlayer(MediaPlayerClient&, MediaPlayerEnums::MediaEngineIdentifier);
@@ -656,6 +660,7 @@
bool m_shouldPrepareToRender { false };
bool m_contentMIMETypeWasInferredFromExtension { false };
bool m_initializingMediaEngine { false };
+ DynamicRangeMode m_preferredDynamicRangeMode { DynamicRangeMode::Standard };
#if ENABLE(MEDIA_SOURCE)
RefPtr<MediaSourcePrivateClient> m_mediaSource;
Modified: trunk/Source/WebCore/platform/graphics/MediaPlayerPrivate.h (264709 => 264710)
--- trunk/Source/WebCore/platform/graphics/MediaPlayerPrivate.h 2020-07-22 18:00:35 UTC (rev 264709)
+++ trunk/Source/WebCore/platform/graphics/MediaPlayerPrivate.h 2020-07-22 18:12:11 UTC (rev 264710)
@@ -287,6 +287,8 @@
virtual bool performTaskAtMediaTime(Function<void()>&&, const MediaTime&) { return false; }
virtual bool shouldIgnoreIntrinsicSize() { return false; }
+
+ virtual void setPreferredDynamicRangeMode(DynamicRangeMode) { }
};
}
Modified: trunk/Source/WebCore/platform/graphics/avfoundation/objc/CDMSessionAVStreamSession.mm (264709 => 264710)
--- trunk/Source/WebCore/platform/graphics/avfoundation/objc/CDMSessionAVStreamSession.mm 2020-07-22 18:00:35 UTC (rev 264709)
+++ trunk/Source/WebCore/platform/graphics/avfoundation/objc/CDMSessionAVStreamSession.mm 2020-07-22 18:12:11 UTC (rev 264710)
@@ -227,7 +227,7 @@
RetainPtr<NSDictionary> options;
if (!m_protocolVersions.isEmpty()) {
- options = @{ AVStreamDataParserContentKeyRequestProtocolVersionsKey: createNSArray(m_protocolVersions, [] (int version) -> NSNumber * {
+ options = @{ PAL::get_AVFoundation_AVStreamDataParserContentKeyRequestProtocolVersionsKey(): createNSArray(m_protocolVersions, [] (int version) -> NSNumber * {
return version ? @(version) : nil;
}).get() };
}
Modified: trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h (264709 => 264710)
--- trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h 2020-07-22 18:00:35 UTC (rev 264709)
+++ trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h 2020-07-22 18:12:11 UTC (rev 264710)
@@ -317,6 +317,8 @@
bool performTaskAtMediaTime(Function<void()>&&, const MediaTime&) final;
void setShouldObserveTimeControlStatus(bool);
+ void setPreferredDynamicRangeMode(DynamicRangeMode) final;
+
RetainPtr<AVURLAsset> m_avAsset;
RetainPtr<AVPlayer> m_avPlayer;
RetainPtr<AVPlayerItem> m_avPlayerItem;
Modified: trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm (264709 => 264710)
--- trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm 2020-07-22 18:00:35 UTC (rev 264709)
+++ trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm 2020-07-22 18:12:11 UTC (rev 264710)
@@ -877,6 +877,25 @@
});
}
+static NSString* convertDynamicRangeModeEnumToAVVideoRange(DynamicRangeMode mode)
+{
+ switch (mode) {
+ case DynamicRangeMode::None:
+ return nil;
+ case DynamicRangeMode::Standard:
+ return PAL::canLoad_AVFoundation_AVVideoRangeSDR() ? PAL::get_AVFoundation_AVVideoRangeSDR() : nil;
+ case DynamicRangeMode::HLG:
+ return PAL::canLoad_AVFoundation_AVVideoRangeHLG() ? PAL::get_AVFoundation_AVVideoRangeHLG() : nil;
+ case DynamicRangeMode::HDR10:
+ return PAL::canLoad_AVFoundation_AVVideoRangeHDR10() ? PAL::get_AVFoundation_AVVideoRangeHDR10() : nil;
+ case DynamicRangeMode::DolbyVisionPQ:
+ return PAL::canLoad_AVFoundation_AVVideoRangeDolbyVisionPQ() ? PAL::get_AVFoundation_AVVideoRangeDolbyVisionPQ() : nil;
+ }
+
+ ASSERT_NOT_REACHED();
+ return nil;
+}
+
void MediaPlayerPrivateAVFoundationObjC::createAVPlayer()
{
if (m_avPlayer)
@@ -892,7 +911,9 @@
setShouldObserveTimeControlStatus(true);
- [m_avPlayer.get() setAppliesMediaSelectionCriteriaAutomatically:NO];
+ m_avPlayer.get().appliesMediaSelectionCriteriaAutomatically = NO;
+ if ([m_avPlayer respondsToSelector:@selector(setVideoRangeOverride:)])
+ m_avPlayer.get().videoRangeOverride = convertDynamicRangeModeEnumToAVVideoRange(player()->preferredDynamicRangeMode());
#if ENABLE(WIRELESS_PLAYBACK_TARGET)
updateDisableExternalPlayback();
@@ -3248,6 +3269,12 @@
}
}
+void MediaPlayerPrivateAVFoundationObjC::setPreferredDynamicRangeMode(DynamicRangeMode mode)
+{
+ if (m_avPlayer && [m_avPlayer respondsToSelector:@selector(setVideoRangeOverride:)])
+ m_avPlayer.get().videoRangeOverride = convertDynamicRangeModeEnumToAVVideoRange(mode);
+}
+
NSArray* assetMetadataKeyNames()
{
static NSArray* keys = [[NSArray alloc] initWithObjects:
Modified: trunk/Source/WebCore/platform/mac/PlatformScreenMac.mm (264709 => 264710)
--- trunk/Source/WebCore/platform/mac/PlatformScreenMac.mm 2020-07-22 18:00:35 UTC (rev 264709)
+++ trunk/Source/WebCore/platform/mac/PlatformScreenMac.mm 2020-07-22 18:12:11 UTC (rev 264710)
@@ -34,8 +34,11 @@
#import "ScreenProperties.h"
#import <ColorSync/ColorSync.h>
#import <pal/spi/cg/CoreGraphicsSPI.h>
+#import <pal/spi/cocoa/AVFoundationSPI.h>
#import <wtf/ProcessPrivilege.h>
+#import <pal/cocoa/AVFoundationSoftLink.h>
+
#if USE(MEDIATOOLBOX)
#import <pal/cocoa/MediaToolboxSoftLink.h>
#endif
@@ -95,6 +98,23 @@
return screen(displayID(widget));
}
+static DynamicRangeMode convertAVVideoRangeToEnum(NSString* range)
+{
+ if (!range)
+ return DynamicRangeMode::None;
+ if (PAL::canLoad_AVFoundation_AVVideoRangeSDR() && [range isEqualTo:PAL::get_AVFoundation_AVVideoRangeSDR()])
+ return DynamicRangeMode::Standard;
+ if (PAL::canLoad_AVFoundation_AVVideoRangeHLG() && [range isEqualTo:PAL::get_AVFoundation_AVVideoRangeHLG()])
+ return DynamicRangeMode::HLG;
+ if (PAL::canLoad_AVFoundation_AVVideoRangeHDR10() && [range isEqualTo:PAL::get_AVFoundation_AVVideoRangeHDR10()])
+ return DynamicRangeMode::HDR10;
+ if (PAL::canLoad_AVFoundation_AVVideoRangeDolbyVisionPQ() && [range isEqualTo:PAL::get_AVFoundation_AVVideoRangeDolbyVisionPQ()])
+ return DynamicRangeMode::DolbyVisionPQ;
+
+ ASSERT_NOT_REACHED();
+ return DynamicRangeMode::None;
+}
+
ScreenProperties collectScreenProperties()
{
ASSERT(hasProcessPrivilege(ProcessPrivilege::CanCommunicateWithWindowServer));
@@ -118,16 +138,24 @@
IORegistryGPUID gpuID = 0;
bool screenSupportsHighDynamicRange = false;
float scaleFactor = screen.backingScaleFactor;
+ DynamicRangeMode dynamicRangeMode = DynamicRangeMode::None;
+ if (PAL::isAVFoundationFrameworkAvailable() && [PAL::getAVPlayerClass() respondsToSelector:@selector(preferredVideoRangeForDisplays:)]) {
+ dynamicRangeMode = convertAVVideoRangeToEnum([PAL::getAVPlayerClass() preferredVideoRangeForDisplays:@[ @(displayID) ]]);
+ screenSupportsHighDynamicRange = dynamicRangeMode > DynamicRangeMode::Standard;
+ }
#if USE(MEDIATOOLBOX)
- if (PAL::isMediaToolboxFrameworkAvailable() && PAL::canLoad_MediaToolbox_MTShouldPlayHDRVideo())
+ else if (PAL::isMediaToolboxFrameworkAvailable() && PAL::canLoad_MediaToolbox_MTShouldPlayHDRVideo())
screenSupportsHighDynamicRange = PAL::softLink_MediaToolbox_MTShouldPlayHDRVideo((__bridge CFArrayRef)@[ @(displayID) ]);
#endif
+ if (!screenSupportsHighDynamicRange && dynamicRangeMode > DynamicRangeMode::Standard)
+ dynamicRangeMode = DynamicRangeMode::Standard;
+
if (displayMask)
gpuID = gpuIDForDisplayMask(displayMask);
- screenProperties.screenDataMap.set(displayID, ScreenData { screenAvailableRect, screenRect, colorSpace, screenDepth, screenDepthPerComponent, screenSupportsExtendedColor, screenHasInvertedColors, screenSupportsHighDynamicRange, screenIsMonochrome, displayMask, gpuID, scaleFactor });
+ screenProperties.screenDataMap.set(displayID, ScreenData { screenAvailableRect, screenRect, colorSpace, screenDepth, screenDepthPerComponent, screenSupportsExtendedColor, screenHasInvertedColors, screenSupportsHighDynamicRange, screenIsMonochrome, displayMask, gpuID, dynamicRangeMode, scaleFactor });
if (!screenProperties.primaryDisplayID)
screenProperties.primaryDisplayID = displayID;
@@ -340,6 +368,20 @@
return false;
}
+DynamicRangeMode preferredDynamicRangeMode(Widget* widget)
+{
+ if (auto data = ""
+ return data->preferredDynamicRangeMode;
+
+ ASSERT(hasProcessPrivilege(ProcessPrivilege::CanCommunicateWithWindowServer));
+ if (PAL::isAVFoundationFrameworkAvailable() && [PAL::getAVPlayerClass() respondsToSelector:@selector(preferredVideoRangeForDisplays:)]) {
+ auto displayID = WebCore::displayID(screen(widget));
+ return convertAVVideoRangeToEnum([PAL::getAVPlayerClass() preferredVideoRangeForDisplays:@[ @(displayID) ]]);
+ }
+
+ return DynamicRangeMode::Standard;
+}
+
FloatRect toUserSpace(const NSRect& rect, NSWindow *destination)
{
FloatRect userRect = rect;
Modified: trunk/Source/WebKit/ChangeLog (264709 => 264710)
--- trunk/Source/WebKit/ChangeLog 2020-07-22 18:00:35 UTC (rev 264709)
+++ trunk/Source/WebKit/ChangeLog 2020-07-22 18:12:11 UTC (rev 264710)
@@ -1,3 +1,16 @@
+2020-07-22 Jer Noble <jer.no...@apple.com>
+
+ [macOS] Adopt AVPlayer.videoRangeOverride
+ https://bugs.webkit.org/show_bug.cgi?id=213902
+ <rdar://problem/63953509>
+
+ Reviewed by Youenn Fablet.
+
+ * WebProcess/WebPage/WebPage.cpp:
+ (WebKit::WebPage::screenPropertiesDidChange):
+ * WebProcess/cocoa/WebProcessCocoa.mm:
+ (WebKit::WebProcess::updatePageScreenProperties):
+
2020-07-21 Simon Fraser <simon.fra...@apple.com>
Scrolling tesla.com on iPad is not smooth
Modified: trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp (264709 => 264710)
--- trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp 2020-07-22 18:00:35 UTC (rev 264709)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp 2020-07-22 18:12:11 UTC (rev 264710)
@@ -2141,7 +2141,7 @@
void WebPage::screenPropertiesDidChange()
{
- m_page->setNeedsRecalcStyleInAllFrames();
+ m_page->screenPropertiesDidChange();
}
void WebPage::setUseFixedLayout(bool fixed)
Modified: trunk/Source/WebKit/WebProcess/cocoa/WebProcessCocoa.mm (264709 => 264710)
--- trunk/Source/WebKit/WebProcess/cocoa/WebProcessCocoa.mm 2020-07-22 18:00:35 UTC (rev 264709)
+++ trunk/Source/WebKit/WebProcess/cocoa/WebProcessCocoa.mm 2020-07-22 18:12:11 UTC (rev 264710)
@@ -78,6 +78,7 @@
#import <pal/spi/cf/CFNetworkSPI.h>
#import <pal/spi/cf/CFUtilitiesSPI.h>
#import <pal/spi/cg/CoreGraphicsSPI.h>
+#import <pal/spi/cocoa/AVFoundationSPI.h>
#import <pal/spi/cocoa/CoreServicesSPI.h>
#import <pal/spi/cocoa/LaunchServicesSPI.h>
#import <pal/spi/cocoa/NSAccessibilitySPI.h>
@@ -133,6 +134,8 @@
#import <os/state_private.h>
#endif
+#import <pal/cocoa/AVFoundationSoftLink.h>
+
SOFT_LINK_FRAMEWORK(CoreServices)
SOFT_LINK_CLASS(CoreServices, _LSDService)
SOFT_LINK_CLASS(CoreServices, _LSDOpenService)
@@ -1011,6 +1014,12 @@
#if PLATFORM(MAC)
void WebProcess::updatePageScreenProperties()
{
+ // If AVPlayer.videoRangeOverride support is present, there's no need to override HDR mode
+ // at the MediaToolbox level, as the MediaToolbox override functionality is both duplicative
+ // and process global.
+ if (PAL::isAVFoundationFrameworkAvailable() && [PAL::getAVPlayerClass() instancesRespondToSelector:@selector(setVideoRangeOverride:)])
+ return;
+
if (hasProcessPrivilege(ProcessPrivilege::CanCommunicateWithWindowServer)) {
setShouldOverrideScreenSupportsHighDynamicRange(false, false);
return;
Modified: trunk/Tools/ChangeLog (264709 => 264710)
--- trunk/Tools/ChangeLog 2020-07-22 18:00:35 UTC (rev 264709)
+++ trunk/Tools/ChangeLog 2020-07-22 18:12:11 UTC (rev 264710)
@@ -1,3 +1,14 @@
+2020-07-22 Jer Noble <jer.no...@apple.com>
+
+ [macOS] Adopt AVPlayer.videoRangeOverride
+ https://bugs.webkit.org/show_bug.cgi?id=213902
+ <rdar://problem/63953509>
+
+ Reviewed by Youenn Fablet.
+
+ * TestWebKitAPI/Tests/WebCore/cocoa/AVFoundationSoftLinkTest.mm:
+ (TestWebKitAPI::TEST):
+
2020-07-22 Jonathan Bedard <jbed...@apple.com>
[webkitpy] Remove version.py
Modified: trunk/Tools/TestWebKitAPI/Tests/WebCore/cocoa/AVFoundationSoftLinkTest.mm (264709 => 264710)
--- trunk/Tools/TestWebKitAPI/Tests/WebCore/cocoa/AVFoundationSoftLinkTest.mm 2020-07-22 18:00:35 UTC (rev 264709)
+++ trunk/Tools/TestWebKitAPI/Tests/WebCore/cocoa/AVFoundationSoftLinkTest.mm 2020-07-22 18:12:11 UTC (rev 264710)
@@ -167,7 +167,7 @@
#endif
#if PLATFORM(MAC)
- EXPECT_TRUE([AVStreamDataParserContentKeyRequestProtocolVersionsKey isEqualToString:@"AVContentKeyRequestProtocolVersionsKey"]);
+ EXPECT_TRUE([PAL::get_AVFoundation_AVStreamDataParserContentKeyRequestProtocolVersionsKey() isEqualToString:@"AVContentKeyRequestProtocolVersionsKey"]);
#endif
#if PLATFORM(IOS_FAMILY)