Changeset 278740 in webkit
- Timestamp:
- Jun 10, 2021, 4:51:37 PM (4 years ago)
- Location:
- trunk/Source/WebKit
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit/ChangeLog
r278738 r278740 1 2021-06-10 Eric Carlson <eric.carlson@apple.com> 2 3 [Cocoa] Remote video layer should respect video gravity when resizing 4 https://bugs.webkit.org/show_bug.cgi?id=226784 5 6 Reviewed by Jer Noble. 7 8 Tested manually. 9 10 * WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp: 11 (WebKit::MediaPlayerPrivateRemote::prepareForPlayback): Pass specify video gravity 12 when creating remote layer. 13 (WebKit::MediaPlayerPrivateRemote::setVideoFullscreenGravity): Remember gravity. 14 * WebProcess/GPU/media/MediaPlayerPrivateRemote.h: 15 16 * WebProcess/GPU/media/VideoLayerRemote.h: 17 * WebProcess/GPU/media/cocoa/VideoLayerRemoteCocoa.h: 18 * WebProcess/GPU/media/cocoa/VideoLayerRemoteCocoa.mm: 19 (-[WKVideoLayerRemote videoGravity]): 20 (-[WKVideoLayerRemote setVideoGravity:]): 21 (-[WKVideoLayerRemote resizePreservingGravity]): Return true when in PiP, fullscreen, 22 or when video gravity is not "resize". 23 (-[WKVideoLayerRemote layoutSublayers]): Preserve aspect ration when appropriate. 24 (WebKit::createVideoLayerRemote): 25 1 26 2021-06-10 Alex Christensen <achristensen@webkit.org> 2 27 -
trunk/Source/WebKit/WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp
r278646 r278740 152 152 return; 153 153 154 m_videoLayer = createVideoLayerRemote(this, inlineLayerHostingContextId.value() );154 m_videoLayer = createVideoLayerRemote(this, inlineLayerHostingContextId.value(), m_videoFullscreenGravity); 155 155 #if PLATFORM(COCOA) 156 156 m_videoLayerManager->setVideoLayer(m_videoLayer.get(), snappedIntRect(player->playerContentBoxRect()).size()); … … 816 816 void MediaPlayerPrivateRemote::setVideoFullscreenGravity(WebCore::MediaPlayerEnums::VideoGravity gravity) 817 817 { 818 m_videoFullscreenGravity = gravity; 818 819 connection().send(Messages::RemoteMediaPlayerProxy::SetVideoFullscreenGravity(gravity), m_id); 819 820 } -
trunk/Source/WebKit/WebProcess/GPU/media/MediaPlayerPrivateRemote.h
r278646 r278740 427 427 MonotonicTime m_cachedMediaTimeQueryTime; 428 428 429 WebCore::MediaPlayer::VideoGravity m_videoFullscreenGravity { WebCore::MediaPlayer::VideoGravity::ResizeAspect }; 429 430 MonotonicTime m_lastPlaybackQualityMetricsQueryTime; 430 431 Seconds m_videoPlaybackMetricsUpdateInterval; -
trunk/Source/WebKit/WebProcess/GPU/media/VideoLayerRemote.h
r258781 r278740 29 29 30 30 #include "LayerHostingContext.h" 31 #include <WebCore/MediaPlayerEnums.h> 31 32 #include <WebCore/PlatformLayer.h> 32 33 … … 35 36 class MediaPlayerPrivateRemote; 36 37 37 PlatformLayerContainer createVideoLayerRemote(MediaPlayerPrivateRemote*, LayerHostingContextID );38 PlatformLayerContainer createVideoLayerRemote(MediaPlayerPrivateRemote*, LayerHostingContextID, WebCore::MediaPlayerEnums::VideoGravity); 38 39 39 40 } // namespace WebKit -
trunk/Source/WebKit/WebProcess/GPU/media/cocoa/VideoLayerRemoteCocoa.h
r260366 r278740 27 27 28 28 #import <QuartzCore/CALayer.h> 29 #import <WebCore/MediaPlayerEnums.h> 29 30 30 31 namespace WebKit { … … 35 36 @property (nonatomic) WebKit::MediaPlayerPrivateRemote* mediaPlayerPrivateRemote; 36 37 @property (nonatomic) CGRect videoLayerFrame; 38 @property (nonatomic) WebCore::MediaPlayerEnums::VideoGravity videoGravity; 37 39 @end 38 40 -
trunk/Source/WebKit/WebProcess/GPU/media/cocoa/VideoLayerRemoteCocoa.mm
r277242 r278740 46 46 WeakPtr<WebKit::MediaPlayerPrivateRemote> _mediaPlayerPrivateRemote; 47 47 RetainPtr<CAContext> _context; 48 WebCore::MediaPlayerEnums::VideoGravity _videoGravity; 48 49 49 50 std::unique_ptr<WebCore::Timer> _resolveBoundsTimer; … … 81 82 } 82 83 84 - (WebCore::MediaPlayerEnums::VideoGravity)videoGravity 85 { 86 return _videoGravity; 87 } 88 89 - (void)setVideoGravity:(WebCore::MediaPlayerEnums::VideoGravity)videoGravity 90 { 91 _videoGravity = videoGravity; 92 } 93 94 - (bool)resizePreservingGravity 95 { 96 auto* player = self.mediaPlayerPrivateRemote; 97 if (player && player->inVideoFullscreenOrPictureInPicture()) 98 return true; 99 100 return _videoGravity != WebCore::MediaPlayer::VideoGravity::Resize; 101 } 102 83 103 - (void)layoutSublayers 84 104 { … … 94 114 CGAffineTransform transform = CGAffineTransformIdentity; 95 115 if (!sourceVideoFrame.isEmpty()) { 96 if ( auto* mediaPlayerPrivateRemote = self.mediaPlayerPrivateRemote; mediaPlayerPrivateRemote && mediaPlayerPrivateRemote->inVideoFullscreenOrPictureInPicture()) {116 if ([self resizePreservingGravity]) { 97 117 auto scale = std::fmax(targetVideoFrame.width() / sourceVideoFrame.width(), targetVideoFrame.height() / sourceVideoFrame.height()); 98 118 transform = CGAffineTransformMakeScale(scale, scale); … … 159 179 namespace WebKit { 160 180 161 PlatformLayerContainer createVideoLayerRemote(MediaPlayerPrivateRemote* mediaPlayerPrivateRemote, LayerHostingContextID contextId )181 PlatformLayerContainer createVideoLayerRemote(MediaPlayerPrivateRemote* mediaPlayerPrivateRemote, LayerHostingContextID contextId, WebCore::MediaPlayerEnums::VideoGravity videoGravity) 162 182 { 163 183 // Initially, all the layers will be empty (both width and height are 0) and invisible. … … 165 185 auto videoLayerRemote = adoptNS([[WKVideoLayerRemote alloc] init]); 166 186 [videoLayerRemote setName:@"WKVideoLayerRemote"]; 187 [videoLayerRemote setVideoGravity:videoGravity]; 167 188 [videoLayerRemote setMediaPlayerPrivateRemote:mediaPlayerPrivateRemote]; 168 189 [videoLayerRemote addSublayer:LayerHostingContext::createPlatformLayerForHostingContext(contextId).get()]; -
trunk/Source/WebKit/WebProcess/GPU/media/win/VideoLayerRemoteWin.cpp
r270175 r278740 34 34 namespace WebKit { 35 35 36 PlatformLayerContainer createVideoLayerRemote(MediaPlayerPrivateRemote* mediaPlayerPrivateRemote, LayerHostingContextID contextId)36 PlatformLayerContainer createVideoLayerRemote(MediaPlayerPrivateRemote*, LayerHostingContextID, WebCore::MediaPlayerEnums::VideoGravity) 37 37 { 38 38 notImplemented();
Note:
See TracChangeset
for help on using the changeset viewer.