diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/CompositingVideoSinkProvider.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/CompositingVideoSinkProvider.java index 47015eff74..b563676b81 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/CompositingVideoSinkProvider.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/CompositingVideoSinkProvider.java @@ -552,7 +552,9 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; private void releaseProcessedFrameInternal(long releaseTimeNs, boolean isLastFrame) { videoFrameProcessor.renderOutputFrame(releaseTimeNs); processedFramesBufferTimestampsUs.remove(); - if (releaseTimeNs != VideoFrameProcessor.DROP_OUTPUT_FRAME) { + if (releaseTimeNs == VideoFrameProcessor.DROP_OUTPUT_FRAME) { + renderControl.onFrameDropped(); + } else { renderControl.onFrameRendered(); if (!renderedFirstFrame) { if (listener != null) { 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 86b5ca2b5d..8c45615ba3 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 @@ -564,6 +564,12 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer implements Video lastRenderRealtimeUs = Util.msToUs(getClock().elapsedRealtime()); } + @Override + public void onFrameDropped() { + updateDroppedBufferCounters( + /* droppedInputBufferCount= */ 0, /* droppedDecoderBufferCount= */ 1); + } + // Other methods /** diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/VideoSink.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/VideoSink.java index 69969fe8e1..ce43566b22 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/VideoSink.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/VideoSink.java @@ -100,6 +100,9 @@ import java.util.concurrent.Executor; /** Informs the rendering control that a video frame was rendered. */ void onFrameRendered(); + + /** Informs the rendering control that a video frame was dropped. */ + void onFrameDropped(); } /** diff --git a/libraries/exoplayer/src/test/java/androidx/media3/exoplayer/video/CompositingVideoSinkProviderTest.java b/libraries/exoplayer/src/test/java/androidx/media3/exoplayer/video/CompositingVideoSinkProviderTest.java index 79eeb6c17f..871425451c 100644 --- a/libraries/exoplayer/src/test/java/androidx/media3/exoplayer/video/CompositingVideoSinkProviderTest.java +++ b/libraries/exoplayer/src/test/java/androidx/media3/exoplayer/video/CompositingVideoSinkProviderTest.java @@ -175,5 +175,8 @@ public final class CompositingVideoSinkProviderTest { @Override public void onFrameRendered() {} + + @Override + public void onFrameDropped() {} } }