From 6abc1a71554993c9bee8b3618702bace2cee6753 Mon Sep 17 00:00:00 2001 From: kimvde Date: Wed, 17 May 2023 11:55:49 +0100 Subject: [PATCH] Simplify FrameConsumptionManager onReadyToAcceptInputFrame logic Propagate the "end of current stream" signal directly after queueing the last frame, instead of waiting for the next onReadyToAcceptInputFrame() call. PiperOrigin-RevId: 532739462 (cherry picked from commit 028b3a73120b755733f58f8c8d9764146c470437) --- .../media3/effect/FrameConsumptionManager.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/libraries/effect/src/main/java/androidx/media3/effect/FrameConsumptionManager.java b/libraries/effect/src/main/java/androidx/media3/effect/FrameConsumptionManager.java index 866412cf06..7957504b6b 100644 --- a/libraries/effect/src/main/java/androidx/media3/effect/FrameConsumptionManager.java +++ b/libraries/effect/src/main/java/androidx/media3/effect/FrameConsumptionManager.java @@ -63,16 +63,16 @@ import java.util.Queue; return; } - long presentationTimeUs = pendingFrame.second; - if (presentationTimeUs == C.TIME_END_OF_SOURCE) { - consumingGlShaderProgramInputCapacity++; + videoFrameProcessingTaskExecutor.submit( + () -> + consumingGlShaderProgram.queueInputFrame( + /* inputTexture= */ pendingFrame.first, + /* presentationTimeUs= */ pendingFrame.second)); + @Nullable Pair nextPendingFrame = availableFrames.peek(); + if (nextPendingFrame != null && nextPendingFrame.second == C.TIME_END_OF_SOURCE) { videoFrameProcessingTaskExecutor.submit( consumingGlShaderProgram::signalEndOfCurrentInputStream); - } else { - videoFrameProcessingTaskExecutor.submit( - () -> - consumingGlShaderProgram.queueInputFrame( - /* inputTexture= */ pendingFrame.first, presentationTimeUs)); + availableFrames.remove(); } }