From bc9a0860e0119957ecbe970fb62554b143b31a7f Mon Sep 17 00:00:00 2001 From: tonihei Date: Wed, 2 Oct 2019 15:40:58 +0100 Subject: [PATCH] Clear renderedFirstFrame at stream changes even if no reconfiguration is needed This ensures a more consistent playback behavior no matter if an item is the first playlist item or a later one. For example, each playlist item gets its own onRenderedFirstFrame callback and other logic within the renderer that force renders the first frame more quickly is also triggered. PiperOrigin-RevId: 272434814 --- .../android/exoplayer2/video/MediaCodecVideoRenderer.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/library/core/src/main/java/com/google/android/exoplayer2/video/MediaCodecVideoRenderer.java b/library/core/src/main/java/com/google/android/exoplayer2/video/MediaCodecVideoRenderer.java index 035e3bfad8..c66ce82614 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/video/MediaCodecVideoRenderer.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/video/MediaCodecVideoRenderer.java @@ -802,9 +802,10 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer { long elapsedRealtimeNowUs = SystemClock.elapsedRealtime() * 1000; long elapsedSinceLastRenderUs = elapsedRealtimeNowUs - lastRenderTimeUs; boolean isStarted = getState() == STATE_STARTED; - // Don't force output until we joined and always render first frame if not joining. + // Don't force output until we joined and the position reached the current stream. boolean forceRenderOutputBuffer = joiningDeadlineMs == C.TIME_UNSET + && positionUs >= outputStreamOffsetUs && (!renderedFirstFrame || (isStarted && shouldForceRenderOutputBuffer(earlyUs, elapsedSinceLastRenderUs))); if (forceRenderOutputBuffer) { @@ -956,6 +957,7 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer { pendingOutputStreamSwitchTimesUs, /* destPos= */ 0, pendingOutputStreamOffsetCount); + clearRenderedFirstFrame(); } }