⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 280624 in webkit


Ignore:
Timestamp:
Aug 3, 2021, 6:10:53 PM (5 years ago)
Author:
Ryan Haddad
Message:

Unreviewed, reverting r280531 and r280589.

caused

Reverted changesets:

"[Cocoa] Remove support for AVAssetImageGenerator"
https://bugs.webkit.org/show_bug.cgi?id=228560
https://commits.webkit.org/r280531

"REGRESSION (r280531): multiple modern-media-controls tests
have become flaky timeouts"
https://bugs.webkit.org/show_bug.cgi?id=228714
https://commits.webkit.org/r280589

Location:
trunk
Files:
1 deleted
12 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/imported/w3c/ChangeLog

    r280593 r280624  
     12021-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
    1182021-08-03  Youenn Fablet  <youenn@apple.com>
    219
  • trunk/LayoutTests/imported/w3c/web-platform-tests/html/rendering/replaced-elements/attributes-for-embedded-content-and-images/video-aspect-ratio.html

    r280531 r280624  
    2727t.step(function() {
    2828  var video = document.getElementById("contained");
    29   video.src = getVideoURI('/media/16x16-green');
     29  video.src = getVideoURI('/media/2x2-green');
    3030  assert_ratio(video, 2.5);
    3131}, "contain:size aspect ratio");
     
    3838  video.setAttribute("width", "250");
    3939  video.setAttribute("height", "100");
    40   video.src = getVideoURI('/media/16x16-green');
     40  video.src = getVideoURI('/media/2x2-green');
    4141  document.body.appendChild(video);
    4242  // 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  
    3434        media.addEventListener("seeking", startTest, false);
    3535        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();
    3737        media.play();
    3838    </script>
  • trunk/Source/WebCore/ChangeLog

    r280623 r280624  
     12021-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
    1182021-08-03  Alex Christensen  <achristensen@webkit.org>
    219
  • trunk/Source/WebCore/html/HTMLMediaElement.cpp

    r280584 r280624  
    820820        return;
    821821
    822     m_player->acceleratedRenderingStateChanged();
    823 
    824822    size_t extraMemoryCost = m_player->extraMemoryCost();
    825823    if (extraMemoryCost > m_reportedExtraMemoryCost) {
     
    50575055        return true;
    50585056
    5059     if (!m_inActiveDocument)
    5060         return false;
    5061 
    50625057    auto* renderer = this->renderer();
    50635058    return is<RenderVideo>(renderer)
  • trunk/Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp

    r280589 r280624  
    106106MediaPlayerPrivateAVFoundation::MediaRenderingMode MediaPlayerPrivateAVFoundation::preferredRenderingMode() const
    107107{
    108     if (assetStatus() == MediaPlayerAVAssetStatusUnknown)
     108    if (!m_visible || assetStatus() == MediaPlayerAVAssetStatusUnknown)
    109109        return MediaRenderingNone;
    110110
     
    126126        preferredMode = MediaRenderingToContext;
    127127
    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();
    135133
    136134    switch (preferredMode) {
     
    144142        break;
    145143    }
     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();
    146148}
    147149
     
    442444
    443445    setUpVideoRendering();
     446
     447    if (currentRenderingMode() == MediaRenderingToLayer || preferredRenderingMode() == MediaRenderingToLayer)
     448        m_player->renderingModeChanged();
    444449}
    445450
     
    465470    m_resolvedURL = WTFMove(resolvedURL);
    466471    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     });
    481472}
    482473
     
    553544    }
    554545
    555     // Do not advance to HaveCurrentData unless there is a decoded frame available for display
    556     if (newReadyState >= MediaPlayer::ReadyState::HaveCurrentData
    557         && m_readyState < MediaPlayer::ReadyState::HaveCurrentData
    558         && m_cachedHasVideo && !hasAvailableVideoFrame()) {
    559         newReadyState = MediaPlayer::ReadyState::HaveMetadata;
    560         m_delayingReadyState = true;
    561         ALWAYS_LOG(LOGIDENTIFIER, "!hasAvailableVideoFrame(), lowering readyState to ", newReadyState);
    562     } else
    563         m_delayingReadyState = false;
    564 
    565546    if (isReadyForVideoSetup() && currentRenderingMode() != preferredRenderingMode())
    566547        setUpVideoRendering();
    567548
    568549    if (!m_haveReportedFirstVideoFrame && m_cachedHasVideo && hasAvailableVideoFrame()) {
    569         if (newReadyState < MediaPlayer::ReadyState::HaveCurrentData)
     550        if (m_readyState < MediaPlayer::ReadyState::HaveCurrentData)
    570551            newReadyState = MediaPlayer::ReadyState::HaveCurrentData;
    571552        m_haveReportedFirstVideoFrame = true;
  • trunk/Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h

    r280531 r280624  
    272272
    273273protected:
    274     void scheduleUpdateStates();
    275274    void updateStates();
    276275
     
    321320    void setResolvedURL(URL&&);
    322321    const URL& resolvedURL() const { return m_resolvedURL; }
    323 
    324     void renderingModeChanged();
    325322
    326323private:
     
    372369    bool m_shouldMaintainAspectRatio;
    373370    bool m_seeking;
    374     bool m_delayingReadyState { false };
    375371};
    376372
  • trunk/Source/WebCore/platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp

    r280531 r280624  
    461461    if (m_avfWrapper)
    462462        m_avfWrapper->createAVCFVideoLayer();
    463 
    464     renderingModeChanged();
    465463}
    466464
     
    471469    if (m_avfWrapper)
    472470        m_avfWrapper->destroyVideoLayer();
    473 
    474     renderingModeChanged();
    475471}
    476472
  • trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h

    r280531 r280624  
    118118
    119119    MediaTime currentMediaTime() const final;
    120 
    121     void outputMediaDataWillChange();
    122120
    123121private:
  • trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm

    r280531 r280624  
    6868#import "WebCoreNSURLExtras.h"
    6969#import "WebCoreNSURLSession.h"
     70#import <AVFoundation/AVAssetImageGenerator.h>
    7071#import <AVFoundation/AVAssetTrack.h>
    7172#import <AVFoundation/AVMediaSelectionGroup.h>
     
    196197    BinarySemaphore m_semaphore;
    197198}
    198 - (void)setParent:(WebCore::MediaPlayerPrivateAVFoundationObjC&)parent;
    199199- (void)outputMediaDataWillChange:(AVPlayerItemOutput *)sender;
    200200- (void)outputSequenceWasFlushed:(AVPlayerItemOutput *)output;
     
    562562bool MediaPlayerPrivateAVFoundationObjC::hasContextRenderer() const
    563563{
    564     return m_videoOutput;
     564    return m_videoOutput || m_imageGenerator;
    565565}
    566566
     
    570570}
    571571
     572void 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
    572587void MediaPlayerPrivateAVFoundationObjC::destroyContextVideoRenderer()
    573588{
    574589    destroyVideoOutput();
     590    destroyImageGenerator();
     591}
     592
     593void MediaPlayerPrivateAVFoundationObjC::destroyImageGenerator()
     594{
     595    if (!m_imageGenerator)
     596        return;
     597
     598    INFO_LOG(LOGIDENTIFIER);
     599
     600    m_imageGenerator = 0;
    575601}
    576602
     
    594620            createVideoOutput();
    595621
    596         renderingModeChanged();
     622        player()->renderingModeChanged();
    597623    });
    598624}
     
    633659
    634660    m_videoLayer = nil;
    635 
    636     renderingModeChanged();
    637661}
    638662
     
    17901814    if (videoOutputHasAvailableFrame() || (m_videoOutput && m_lastPixelBuffer))
    17911815        paintWithVideoOutput(context, rect);
     1816    else
     1817        paintWithImageGenerator(context, rect);
    17921818
    17931819    END_BLOCK_OBJC_EXCEPTIONS
     
    18111837
    18121838    paintCurrentFrameInContext(context, rect);
     1839}
     1840
     1841void 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
     1856RetainPtr<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;
    18131871}
    18141872
     
    23832441
    23842442    m_videoOutputDelegate = adoptNS([[WebCoreAVFPullDelegate alloc] init]);
    2385     [m_videoOutputDelegate setParent:*this];
    23862443    [m_videoOutput setDelegate:m_videoOutputDelegate.get() queue:globalPullDelegateQueue()];
    2387     [m_videoOutput requestNotificationOfMediaDataChangeWithAdvanceInterval:0];
    23882444
    23892445    [m_avPlayerItem.get() addOutput:m_videoOutput.get()];
    2390 }
    2391 
    2392 void MediaPlayerPrivateAVFoundationObjC::outputMediaDataWillChange()
    2393 {
    2394     updateStates();
    23952446}
    23962447
     
    24892540    FloatRect imageRect { FloatPoint::zero(), m_lastImage->size() };
    24902541    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
    24912548}
    24922549
     
    38433900@end
    38443901
    3845 @implementation WebCoreAVFPullDelegate {
    3846     WeakPtr<WebCore::MediaPlayerPrivateAVFoundationObjC> _parent;
    3847 }
     3902@implementation WebCoreAVFPullDelegate
    38483903
    38493904@synthesize semaphore = m_semaphore;
    3850 
    3851 - (void)setParent:(WebCore::MediaPlayerPrivateAVFoundationObjC&)parent
    3852 {
    3853     _parent = makeWeakPtr(parent);
    3854 }
    38553905
    38563906- (void)outputMediaDataWillChange:(AVPlayerItemVideoOutput *)output
     
    38583908    UNUSED_PARAM(output);
    38593909    m_semaphore.signal();
    3860     RunLoop::main().dispatch([parent = _parent] {
    3861         if (parent)
    3862             parent->outputMediaDataWillChange();
    3863     });
    38643910}
    38653911
  • trunk/Source/WebKit/ChangeLog

    r280620 r280624  
     12021-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
    1182021-08-03  Brent Fulgham  <bfulgham@apple.com>
    219
  • trunk/Source/WebKit/WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp

    r280531 r280624  
    456456{
    457457    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);
    459459}
    460460
Note: See TracChangeset for help on using the changeset viewer.