Changeset 280624 in webkit
- Timestamp:
- Aug 3, 2021, 6:10:53 PM (5 years ago)
- Location:
- trunk
- Files:
-
- 1 deleted
- 12 edited
-
LayoutTests/imported/w3c/ChangeLog (modified) (1 diff)
-
LayoutTests/imported/w3c/web-platform-tests/html/rendering/replaced-elements/attributes-for-embedded-content-and-images/video-aspect-ratio.html (modified) (2 diffs)
-
LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/video_loop_base.html (modified) (1 diff)
-
LayoutTests/imported/w3c/web-platform-tests/media/16x16-green.mp4 (deleted)
-
Source/WebCore/ChangeLog (modified) (1 diff)
-
Source/WebCore/html/HTMLMediaElement.cpp (modified) (2 diffs)
-
Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp (modified) (6 diffs)
-
Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h (modified) (3 diffs)
-
Source/WebCore/platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp (modified) (2 diffs)
-
Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h (modified) (1 diff)
-
Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm (modified) (12 diffs)
-
Source/WebKit/ChangeLog (modified) (1 diff)
-
Source/WebKit/WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/imported/w3c/ChangeLog
r280593 r280624 1 2021-08-03 Ryan Haddad <ryanhaddad@apple.com> 2 3 Unreviewed, reverting r280531 and r280589. 4 5 caused 6 7 Reverted changesets: 8 9 "[Cocoa] Remove support for AVAssetImageGenerator" 10 https://bugs.webkit.org/show_bug.cgi?id=228560 11 https://commits.webkit.org/r280531 12 13 "REGRESSION (r280531): multiple modern-media-controls tests 14 have become flaky timeouts" 15 https://bugs.webkit.org/show_bug.cgi?id=228714 16 https://commits.webkit.org/r280589 17 1 18 2021-08-03 Youenn Fablet <youenn@apple.com> 2 19 -
trunk/LayoutTests/imported/w3c/web-platform-tests/html/rendering/replaced-elements/attributes-for-embedded-content-and-images/video-aspect-ratio.html
r280531 r280624 27 27 t.step(function() { 28 28 var video = document.getElementById("contained"); 29 video.src = getVideoURI('/media/ 16x16-green');29 video.src = getVideoURI('/media/2x2-green'); 30 30 assert_ratio(video, 2.5); 31 31 }, "contain:size aspect ratio"); … … 38 38 video.setAttribute("width", "250"); 39 39 video.setAttribute("height", "100"); 40 video.src = getVideoURI('/media/ 16x16-green');40 video.src = getVideoURI('/media/2x2-green'); 41 41 document.body.appendChild(video); 42 42 // Videos default to a size of 300x150px and calculate their aspect ratio -
trunk/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/video_loop_base.html
r280531 r280624 34 34 media.addEventListener("seeking", startTest, false); 35 35 media.loop = true; 36 media.src = getVideoURI("/media/ 16x16-green") + "?" + new Date() + Math.random();36 media.src = getVideoURI("/media/2x2-green") + "?" + new Date() + Math.random(); 37 37 media.play(); 38 38 </script> -
trunk/Source/WebCore/ChangeLog
r280623 r280624 1 2021-08-03 Ryan Haddad <ryanhaddad@apple.com> 2 3 Unreviewed, reverting r280531 and r280589. 4 5 caused 6 7 Reverted changesets: 8 9 "[Cocoa] Remove support for AVAssetImageGenerator" 10 https://bugs.webkit.org/show_bug.cgi?id=228560 11 https://commits.webkit.org/r280531 12 13 "REGRESSION (r280531): multiple modern-media-controls tests 14 have become flaky timeouts" 15 https://bugs.webkit.org/show_bug.cgi?id=228714 16 https://commits.webkit.org/r280589 17 1 18 2021-08-03 Alex Christensen <achristensen@webkit.org> 2 19 -
trunk/Source/WebCore/html/HTMLMediaElement.cpp
r280584 r280624 820 820 return; 821 821 822 m_player->acceleratedRenderingStateChanged();823 824 822 size_t extraMemoryCost = m_player->extraMemoryCost(); 825 823 if (extraMemoryCost > m_reportedExtraMemoryCost) { … … 5057 5055 return true; 5058 5056 5059 if (!m_inActiveDocument)5060 return false;5061 5062 5057 auto* renderer = this->renderer(); 5063 5058 return is<RenderVideo>(renderer) -
trunk/Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp
r280589 r280624 106 106 MediaPlayerPrivateAVFoundation::MediaRenderingMode MediaPlayerPrivateAVFoundation::preferredRenderingMode() const 107 107 { 108 if ( assetStatus() == MediaPlayerAVAssetStatusUnknown)108 if (!m_visible || assetStatus() == MediaPlayerAVAssetStatusUnknown) 109 109 return MediaRenderingNone; 110 110 … … 126 126 preferredMode = MediaRenderingToContext; 127 127 128 if (currentMode == preferredMode) 129 return; 130 131 ALWAYS_LOG(LOGIDENTIFIER, "preferredMode: ", preferredMode, ", currentMode: ", currentMode); 132 133 if (currentMode == MediaRenderingToLayer) 134 destroyVideoLayer(); 128 if (currentMode == preferredMode && currentMode != MediaRenderingNone) 129 return; 130 131 if (currentMode != MediaRenderingNone) 132 tearDownVideoRendering(); 135 133 136 134 switch (preferredMode) { … … 144 142 break; 145 143 } 144 145 // If using a movie layer, inform the client so the compositing tree is updated. 146 if (currentMode == MediaRenderingToLayer || preferredMode == MediaRenderingToLayer) 147 m_player->renderingModeChanged(); 146 148 } 147 149 … … 442 444 443 445 setUpVideoRendering(); 446 447 if (currentRenderingMode() == MediaRenderingToLayer || preferredRenderingMode() == MediaRenderingToLayer) 448 m_player->renderingModeChanged(); 444 449 } 445 450 … … 465 470 m_resolvedURL = WTFMove(resolvedURL); 466 471 m_resolvedOrigin = SecurityOrigin::create(m_resolvedURL); 467 }468 469 void MediaPlayerPrivateAVFoundation::renderingModeChanged()470 {471 scheduleUpdateStates();472 m_player->renderingModeChanged();473 }474 475 void MediaPlayerPrivateAVFoundation::scheduleUpdateStates()476 {477 queueTaskOnEventLoop([weakThis = makeWeakPtr(*this)] {478 if (weakThis)479 weakThis->updateStates();480 });481 472 } 482 473 … … 553 544 } 554 545 555 // Do not advance to HaveCurrentData unless there is a decoded frame available for display556 if (newReadyState >= MediaPlayer::ReadyState::HaveCurrentData557 && m_readyState < MediaPlayer::ReadyState::HaveCurrentData558 && m_cachedHasVideo && !hasAvailableVideoFrame()) {559 newReadyState = MediaPlayer::ReadyState::HaveMetadata;560 m_delayingReadyState = true;561 ALWAYS_LOG(LOGIDENTIFIER, "!hasAvailableVideoFrame(), lowering readyState to ", newReadyState);562 } else563 m_delayingReadyState = false;564 565 546 if (isReadyForVideoSetup() && currentRenderingMode() != preferredRenderingMode()) 566 547 setUpVideoRendering(); 567 548 568 549 if (!m_haveReportedFirstVideoFrame && m_cachedHasVideo && hasAvailableVideoFrame()) { 569 if ( newReadyState < MediaPlayer::ReadyState::HaveCurrentData)550 if (m_readyState < MediaPlayer::ReadyState::HaveCurrentData) 570 551 newReadyState = MediaPlayer::ReadyState::HaveCurrentData; 571 552 m_haveReportedFirstVideoFrame = true; -
trunk/Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h
r280531 r280624 272 272 273 273 protected: 274 void scheduleUpdateStates();275 274 void updateStates(); 276 275 … … 321 320 void setResolvedURL(URL&&); 322 321 const URL& resolvedURL() const { return m_resolvedURL; } 323 324 void renderingModeChanged();325 322 326 323 private: … … 372 369 bool m_shouldMaintainAspectRatio; 373 370 bool m_seeking; 374 bool m_delayingReadyState { false };375 371 }; 376 372 -
trunk/Source/WebCore/platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp
r280531 r280624 461 461 if (m_avfWrapper) 462 462 m_avfWrapper->createAVCFVideoLayer(); 463 464 renderingModeChanged();465 463 } 466 464 … … 471 469 if (m_avfWrapper) 472 470 m_avfWrapper->destroyVideoLayer(); 473 474 renderingModeChanged();475 471 } 476 472 -
trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h
r280531 r280624 118 118 119 119 MediaTime currentMediaTime() const final; 120 121 void outputMediaDataWillChange();122 120 123 121 private: -
trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm
r280531 r280624 68 68 #import "WebCoreNSURLExtras.h" 69 69 #import "WebCoreNSURLSession.h" 70 #import <AVFoundation/AVAssetImageGenerator.h> 70 71 #import <AVFoundation/AVAssetTrack.h> 71 72 #import <AVFoundation/AVMediaSelectionGroup.h> … … 196 197 BinarySemaphore m_semaphore; 197 198 } 198 - (void)setParent:(WebCore::MediaPlayerPrivateAVFoundationObjC&)parent;199 199 - (void)outputMediaDataWillChange:(AVPlayerItemOutput *)sender; 200 200 - (void)outputSequenceWasFlushed:(AVPlayerItemOutput *)output; … … 562 562 bool MediaPlayerPrivateAVFoundationObjC::hasContextRenderer() const 563 563 { 564 return m_videoOutput ;564 return m_videoOutput || m_imageGenerator; 565 565 } 566 566 … … 570 570 } 571 571 572 void MediaPlayerPrivateAVFoundationObjC::createImageGenerator() 573 { 574 INFO_LOG(LOGIDENTIFIER); 575 576 if (!m_avAsset || m_imageGenerator) 577 return; 578 579 m_imageGenerator = [PAL::getAVAssetImageGeneratorClass() assetImageGeneratorWithAsset:m_avAsset.get()]; 580 581 [m_imageGenerator.get() setApertureMode:AVAssetImageGeneratorApertureModeCleanAperture]; 582 [m_imageGenerator.get() setAppliesPreferredTrackTransform:YES]; 583 [m_imageGenerator.get() setRequestedTimeToleranceBefore:PAL::kCMTimeZero]; 584 [m_imageGenerator.get() setRequestedTimeToleranceAfter:PAL::kCMTimeZero]; 585 } 586 572 587 void MediaPlayerPrivateAVFoundationObjC::destroyContextVideoRenderer() 573 588 { 574 589 destroyVideoOutput(); 590 destroyImageGenerator(); 591 } 592 593 void MediaPlayerPrivateAVFoundationObjC::destroyImageGenerator() 594 { 595 if (!m_imageGenerator) 596 return; 597 598 INFO_LOG(LOGIDENTIFIER); 599 600 m_imageGenerator = 0; 575 601 } 576 602 … … 594 620 createVideoOutput(); 595 621 596 renderingModeChanged();622 player()->renderingModeChanged(); 597 623 }); 598 624 } … … 633 659 634 660 m_videoLayer = nil; 635 636 renderingModeChanged();637 661 } 638 662 … … 1790 1814 if (videoOutputHasAvailableFrame() || (m_videoOutput && m_lastPixelBuffer)) 1791 1815 paintWithVideoOutput(context, rect); 1816 else 1817 paintWithImageGenerator(context, rect); 1792 1818 1793 1819 END_BLOCK_OBJC_EXCEPTIONS … … 1811 1837 1812 1838 paintCurrentFrameInContext(context, rect); 1839 } 1840 1841 void MediaPlayerPrivateAVFoundationObjC::paintWithImageGenerator(GraphicsContext& context, const FloatRect& rect) 1842 { 1843 INFO_LOG(LOGIDENTIFIER); 1844 1845 RetainPtr<CGImageRef> image = createImageForTimeInRect(currentTime(), rect); 1846 if (image) { 1847 GraphicsContextStateSaver stateSaver(context); 1848 context.translate(rect.x(), rect.y() + rect.height()); 1849 context.scale(FloatSize(1.0f, -1.0f)); 1850 context.setImageInterpolationQuality(InterpolationQuality::Low); 1851 IntRect paintRect(IntPoint(0, 0), IntSize(rect.width(), rect.height())); 1852 CGContextDrawImage(context.platformContext(), CGRectMake(0, 0, paintRect.width(), paintRect.height()), image.get()); 1853 } 1854 } 1855 1856 RetainPtr<CGImageRef> MediaPlayerPrivateAVFoundationObjC::createImageForTimeInRect(float time, const FloatRect& rect) 1857 { 1858 if (!m_imageGenerator) 1859 createImageGenerator(); 1860 ASSERT(m_imageGenerator); 1861 1862 MonotonicTime start = MonotonicTime::now(); 1863 1864 [m_imageGenerator.get() setMaximumSize:CGSize(rect.size())]; 1865 RetainPtr<CGImageRef> rawImage = adoptCF([m_imageGenerator.get() copyCGImageAtTime:PAL::CMTimeMakeWithSeconds(time, 600) actualTime:nil error:nil]); 1866 RetainPtr<CGImageRef> image = adoptCF(CGImageCreateCopyWithColorSpace(rawImage.get(), sRGBColorSpaceRef())); 1867 1868 INFO_LOG(LOGIDENTIFIER, "creating image took ", (MonotonicTime::now() - start).seconds()); 1869 1870 return image; 1813 1871 } 1814 1872 … … 2383 2441 2384 2442 m_videoOutputDelegate = adoptNS([[WebCoreAVFPullDelegate alloc] init]); 2385 [m_videoOutputDelegate setParent:*this];2386 2443 [m_videoOutput setDelegate:m_videoOutputDelegate.get() queue:globalPullDelegateQueue()]; 2387 [m_videoOutput requestNotificationOfMediaDataChangeWithAdvanceInterval:0];2388 2444 2389 2445 [m_avPlayerItem.get() addOutput:m_videoOutput.get()]; 2390 }2391 2392 void MediaPlayerPrivateAVFoundationObjC::outputMediaDataWillChange()2393 {2394 updateStates();2395 2446 } 2396 2447 … … 2489 2540 FloatRect imageRect { FloatPoint::zero(), m_lastImage->size() }; 2490 2541 context.drawNativeImage(*m_lastImage, imageRect.size(), outputRect, imageRect); 2542 2543 // If we have created an AVAssetImageGenerator in the past due to m_videoOutput not having an available 2544 // video frame, destroy it now that it is no longer needed. 2545 if (m_imageGenerator) 2546 destroyImageGenerator(); 2547 2491 2548 } 2492 2549 … … 3843 3900 @end 3844 3901 3845 @implementation WebCoreAVFPullDelegate { 3846 WeakPtr<WebCore::MediaPlayerPrivateAVFoundationObjC> _parent; 3847 } 3902 @implementation WebCoreAVFPullDelegate 3848 3903 3849 3904 @synthesize semaphore = m_semaphore; 3850 3851 - (void)setParent:(WebCore::MediaPlayerPrivateAVFoundationObjC&)parent3852 {3853 _parent = makeWeakPtr(parent);3854 }3855 3905 3856 3906 - (void)outputMediaDataWillChange:(AVPlayerItemVideoOutput *)output … … 3858 3908 UNUSED_PARAM(output); 3859 3909 m_semaphore.signal(); 3860 RunLoop::main().dispatch([parent = _parent] {3861 if (parent)3862 parent->outputMediaDataWillChange();3863 });3864 3910 } 3865 3911 -
trunk/Source/WebKit/ChangeLog
r280620 r280624 1 2021-08-03 Ryan Haddad <ryanhaddad@apple.com> 2 3 Unreviewed, reverting r280531 and r280589. 4 5 caused 6 7 Reverted changesets: 8 9 "[Cocoa] Remove support for AVAssetImageGenerator" 10 https://bugs.webkit.org/show_bug.cgi?id=228560 11 https://commits.webkit.org/r280531 12 13 "REGRESSION (r280531): multiple modern-media-controls tests 14 have become flaky timeouts" 15 https://bugs.webkit.org/show_bug.cgi?id=228714 16 https://commits.webkit.org/r280589 17 1 18 2021-08-03 Brent Fulgham <bfulgham@apple.com> 2 19 -
trunk/Source/WebKit/WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp
r280531 r280624 456 456 { 457 457 if (auto player = makeRefPtr(m_player.get())) 458 connection().send(Messages::RemoteMediaPlayerProxy::AcceleratedRenderingStateChanged(player-> renderingCanBeAccelerated()), m_id);458 connection().send(Messages::RemoteMediaPlayerProxy::AcceleratedRenderingStateChanged(player->supportsAcceleratedRendering()), m_id); 459 459 } 460 460
Note:
See TracChangeset
for help on using the changeset viewer.