From f7669361407ad0b1fe536a8fb5d78e3f4e77026c Mon Sep 17 00:00:00 2001 From: tonihei Date: Wed, 26 Jul 2023 09:43:03 +0100 Subject: [PATCH] Fix ms to us conversion bug in DecoderVideoRenderer The current code multiplies the value by 1000 twice, effectively converting to nanoseconds. #minor-release PiperOrigin-RevId: 551129750 --- .../media3/exoplayer/video/DecoderVideoRenderer.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/DecoderVideoRenderer.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/DecoderVideoRenderer.java index f263d19d20..330d35a1ec 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/DecoderVideoRenderer.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/DecoderVideoRenderer.java @@ -15,6 +15,7 @@ */ package androidx.media3.exoplayer.video; +import static androidx.media3.common.util.Util.msToUs; import static androidx.media3.exoplayer.DecoderReuseEvaluation.DISCARD_REASON_DRM_SESSION_CHANGED; import static androidx.media3.exoplayer.DecoderReuseEvaluation.DISCARD_REASON_REUSE_NOT_IMPLEMENTED; import static androidx.media3.exoplayer.DecoderReuseEvaluation.REUSE_RESULT_NO; @@ -38,7 +39,6 @@ import androidx.media3.common.util.Log; import androidx.media3.common.util.TimedValueQueue; import androidx.media3.common.util.TraceUtil; import androidx.media3.common.util.UnstableApi; -import androidx.media3.common.util.Util; import androidx.media3.decoder.CryptoConfig; import androidx.media3.decoder.Decoder; import androidx.media3.decoder.DecoderException; @@ -307,7 +307,7 @@ public abstract class DecoderVideoRenderer extends BaseRenderer { protected void onStarted() { droppedFrames = 0; droppedFrameAccumulationStartTimeMs = SystemClock.elapsedRealtime(); - lastRenderTimeUs = SystemClock.elapsedRealtime() * 1000; + lastRenderTimeUs = msToUs(SystemClock.elapsedRealtime()); } @Override @@ -580,7 +580,7 @@ public abstract class DecoderVideoRenderer extends BaseRenderer { frameMetadataListener.onVideoFrameAboutToBeRendered( presentationTimeUs, getClock().nanoTime(), outputFormat, /* mediaFormat= */ null); } - lastRenderTimeUs = Util.msToUs(SystemClock.elapsedRealtime() * 1000); + lastRenderTimeUs = msToUs(SystemClock.elapsedRealtime()); int bufferMode = outputBuffer.mode; boolean renderSurface = bufferMode == C.VIDEO_OUTPUT_MODE_SURFACE_YUV && outputSurface != null; boolean renderYuv = bufferMode == C.VIDEO_OUTPUT_MODE_YUV && outputBufferRenderer != null; @@ -854,7 +854,7 @@ public abstract class DecoderVideoRenderer extends BaseRenderer { outputFormat = format; } - long elapsedRealtimeNowUs = SystemClock.elapsedRealtime() * 1000; + long elapsedRealtimeNowUs = msToUs(SystemClock.elapsedRealtime()); long elapsedSinceLastRenderUs = elapsedRealtimeNowUs - lastRenderTimeUs; boolean isStarted = getState() == STATE_STARTED; boolean shouldRenderFirstFrame =