Branch: refs/heads/main Home: https://github.com/WebKit/WebKit Commit: 40e8bb366e26f1a831b3c539c8f6e908062f8027 https://github.com/WebKit/WebKit/commit/40e8bb366e26f1a831b3c539c8f6e908062f8027 Author: Jean-Yves Avenard <j...@apple.com> Date: 2025-04-24 (Thu, 24 Apr 2025)
Changed paths: M Source/WebCore/PAL/pal/cf/CoreMediaSoftLink.cpp M Source/WebCore/PAL/pal/cf/CoreMediaSoftLink.h M Source/WebCore/platform/graphics/cocoa/VideoMediaSampleRenderer.h M Source/WebCore/platform/graphics/cocoa/VideoMediaSampleRenderer.mm Log Message: ----------- Decoding should continue until we have set time ahead. https://bugs.webkit.org/show_bug.cgi?id=291894 rdar://149756577 Reviewed by Jer Noble. In 293860@main we decoded 3 or 10 frames ahead of currentTime depending on the video decoder being hardware accelerated. We now use a time (133ms) base instead, similar to what CoreMedia does but with a minimum of 3 frames. Additionally, we immediately enqueue the decoded video frame in the AVSampleBufferDisplayLayer or AVSampleBufferVideoRenderer as soon as it is available, letting it handle frame re-ordering as needed. The time accuracy required for requestVideoFrameCallback and readbacks is now only approximated so that we can preserve smoother video delivery under heavy load. The requirement for accurate timers as such is reduced and when the purge task is enqueued become less important as it is no longer responsible for ensuring that the next frame is displayed on time. In order to ensure that frames are re-ordered accurately, the decode ahead limit is ignored if B-frame are found in the incoming compressed samples queue. Dropped frame calculation continues to be based on our own internal timers rather than what the AVSampleBufferDisplayLayer did or did not drop due to: 1- We don't have an accurate way to properly determine if it did. 2- Dropped frames report is used by web sites to determine if the user machine is under heavy load and reduce or increase the content resolution accordingly. This goal is achieved as scheduling our purge tasks are more likely to be impacted by heavy usage. Covered by existing tests. * Source/WebCore/PAL/pal/cf/CoreMediaSoftLink.cpp: * Source/WebCore/PAL/pal/cf/CoreMediaSoftLink.h: * Source/WebCore/platform/graphics/cocoa/VideoMediaSampleRenderer.h: * Source/WebCore/platform/graphics/cocoa/VideoMediaSampleRenderer.mm: (WebCore::VideoMediaSampleRenderer::lastDecodedSampleTime const): (WebCore::VideoMediaSampleRenderer::hasIncomingOutOfOrderFrame const): (WebCore::VideoMediaSampleRenderer::setTimebase): (WebCore::VideoMediaSampleRenderer::decodeNextSampleIfNeeded): (WebCore::VideoMediaSampleRenderer::decodedFrameAvailable): (WebCore::VideoMediaSampleRenderer::maybeQueueFrameForDisplay): (WebCore::VideoMediaSampleRenderer::cancelTimer): (WebCore::VideoMediaSampleRenderer::purgeDecodedSampleQueue): (WebCore::VideoMediaSampleRenderer::purgeDecodedSampleQueueUntilTime): (WebCore::VideoMediaSampleRenderer::schedulePurgeAtTime): (WebCore::VideoMediaSampleRenderer::maybeReschedulePurge): (WebCore::VideoMediaSampleRenderer::copyDisplayedPixelBuffer): (WebCore::VideoMediaSampleRenderer::maximumDecodedSampleCount const): Deleted. (WebCore::VideoMediaSampleRenderer::purgeDecodedSampleQueueAndDisplay): Deleted. (WebCore::VideoMediaSampleRenderer::schedulePurgeAndDisplayAtTime): Deleted. (WebCore::VideoMediaSampleRenderer::maybeReschedulePurgeAndDisplay): Deleted. Canonical link: https://commits.webkit.org/294084@main To unsubscribe from these emails, change your notification settings at https://github.com/WebKit/WebKit/settings/notifications _______________________________________________ webkit-changes mailing list webkit-changes@lists.webkit.org https://lists.webkit.org/mailman/listinfo/webkit-changes