From f2a63e9ddf0b309e6b7af029d3d856d4321e9771 Mon Sep 17 00:00:00 2001 From: claincly Date: Tue, 15 Nov 2022 22:48:54 +0000 Subject: [PATCH] Fix availableFrameCount semantic `availableFrameCount` tracks the number of frames that is avilable on the `SurfaceTexture`, but haven't been used (by `updateTexImage()`) yet. Thus semantically this counter should only be decremented after calling `updateTexImage()`, not before it. Also reworded `getPendingFrameCount()` javadoc, "external texture" is an internal state that is not publicised anywhere. PiperOrigin-RevId: 488765174 --- .../exoplayer2/effect/ExternalTextureManager.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/library/effect/src/main/java/com/google/android/exoplayer2/effect/ExternalTextureManager.java b/library/effect/src/main/java/com/google/android/exoplayer2/effect/ExternalTextureManager.java index bfa7e16ee6..377c0b4d08 100644 --- a/library/effect/src/main/java/com/google/android/exoplayer2/effect/ExternalTextureManager.java +++ b/library/effect/src/main/java/com/google/android/exoplayer2/effect/ExternalTextureManager.java @@ -15,7 +15,7 @@ */ package com.google.android.exoplayer2.effect; -import static com.google.android.exoplayer2.util.Assertions.checkNotNull; +import static com.google.android.exoplayer2.util.Assertions.checkStateNotNull; import android.graphics.SurfaceTexture; import androidx.annotation.Nullable; @@ -118,7 +118,7 @@ import java.util.concurrent.atomic.AtomicInteger; /** * Returns the number of {@linkplain #registerInputFrame(FrameInfo) registered} frames that have - * not been rendered to the external texture yet. + * not been sent to the downstream {@link ExternalTextureProcessor} yet. * *

Can be called on any thread. */ @@ -151,11 +151,11 @@ import java.util.concurrent.atomic.AtomicInteger; return; } - availableFrameCount.getAndDecrement(); surfaceTexture.updateTexImage(); - this.currentFrame = pendingFrames.remove(); + availableFrameCount.getAndDecrement(); + this.currentFrame = pendingFrames.peek(); - FrameInfo currentFrame = checkNotNull(this.currentFrame); + FrameInfo currentFrame = checkStateNotNull(this.currentFrame); externalTextureProcessorInputCapacity.getAndDecrement(); surfaceTexture.getTransformMatrix(textureTransformMatrix); externalTextureProcessor.setTextureTransformMatrix(textureTransformMatrix); @@ -173,6 +173,7 @@ import java.util.concurrent.atomic.AtomicInteger; new TextureInfo( externalTexId, /* fboId= */ C.INDEX_UNSET, currentFrame.width, currentFrame.height), presentationTimeUs); + checkStateNotNull(pendingFrames.remove()); if (inputStreamEnded && pendingFrames.isEmpty()) { externalTextureProcessor.signalEndOfCurrentInputStream();