diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/MediaCodecVideoRenderer.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/MediaCodecVideoRenderer.java index 5900dc5067..d65e4da7cf 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/MediaCodecVideoRenderer.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/MediaCodecVideoRenderer.java @@ -1287,7 +1287,8 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer { if (Util.SDK_INT >= 21) { // Let the underlying framework time the release. if (earlyUs < 50000) { - if (adjustedReleaseTimeNs == lastFrameReleaseTimeNs) { + if (shouldSkipBuffersWithIdenticalReleaseTime() + && adjustedReleaseTimeNs == lastFrameReleaseTimeNs) { // This frame should be displayed on the same vsync with the previous released frame. We // are likely rendering frames at a rate higher than the screen refresh rate. Skip // this buffer so that it's returned to MediaCodec sooner otherwise MediaCodec may not @@ -1443,6 +1444,14 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer { return isBufferVeryLate(earlyUs) && !isLastBuffer; } + /** + * Returns whether to skip buffers that have an identical release time as the previous released + * buffer. + */ + protected boolean shouldSkipBuffersWithIdenticalReleaseTime() { + return true; + } + /** * Returns whether to force rendering an output buffer. *