From 5ed0c12ff0b8c5bb99e9992f75fa5f3f955499d5 Mon Sep 17 00:00:00 2001 From: ibaker Date: Mon, 10 Aug 2020 09:26:00 +0100 Subject: [PATCH] Tweak how MediaCodecVideoRenderer renotifies the existing surface Use a dedicated boolean to track if we've notified the current surface, rather than re-using rendereredFirstFrameAfterReset. PiperOrigin-RevId: 325757948 --- .../android/exoplayer2/video/MediaCodecVideoRenderer.java | 6 +++++- 1 file changed, 5 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 ec536808bc..20cdadaee0 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 @@ -139,6 +139,7 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer { private Surface surface; private float surfaceFrameRate; private Surface dummySurface; + private boolean haveReportedFirstFrameRenderedForCurrentSurface; @VideoScalingMode private int scalingMode; private boolean renderedFirstFrameAfterReset; private boolean mayRenderFirstFrameAfterEnableIfNotStarted; @@ -446,6 +447,7 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer { protected void onDisabled() { clearReportedVideoSize(); clearRenderedFirstFrame(); + haveReportedFirstFrameRenderedForCurrentSurface = false; frameReleaseTimeHelper.disable(); tunnelingOnFrameRenderedListener = null; try { @@ -504,6 +506,7 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer { if (this.surface != surface) { clearSurfaceFrameRate(); this.surface = surface; + haveReportedFirstFrameRenderedForCurrentSurface = false; updateSurfaceFrameRate(/* isNewSurface= */ true); @State int state = getState(); @@ -1160,11 +1163,12 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer { if (!renderedFirstFrameAfterReset) { renderedFirstFrameAfterReset = true; eventDispatcher.renderedFirstFrame(surface); + haveReportedFirstFrameRenderedForCurrentSurface = true; } } private void maybeRenotifyRenderedFirstFrame() { - if (renderedFirstFrameAfterReset) { + if (haveReportedFirstFrameRenderedForCurrentSurface) { eventDispatcher.renderedFirstFrame(surface); } }