From 7fdae1ad0d0cec7fd93b8b16d30e799ec06cbf2d Mon Sep 17 00:00:00 2001 From: tofunmi Date: Tue, 16 May 2023 16:12:34 +0100 Subject: [PATCH] Adjust image input ForPixelWidthHeightRatio PiperOrigin-RevId: 532463400 (cherry picked from commit 63ee5ccb286727445542b11d99a455162cee49f6) --- .../media3/effect/BitmapTextureManager.java | 27 ++++++++++--------- .../effect/DefaultVideoFrameProcessor.java | 2 +- .../media3/effect/ExternalTextureManager.java | 7 ----- .../media3/effect/TextureManager.java | 2 +- 4 files changed, 17 insertions(+), 21 deletions(-) diff --git a/libraries/effect/src/main/java/androidx/media3/effect/BitmapTextureManager.java b/libraries/effect/src/main/java/androidx/media3/effect/BitmapTextureManager.java index 3ed088b57f..8c5371669c 100644 --- a/libraries/effect/src/main/java/androidx/media3/effect/BitmapTextureManager.java +++ b/libraries/effect/src/main/java/androidx/media3/effect/BitmapTextureManager.java @@ -24,6 +24,7 @@ import android.opengl.GLES20; import android.opengl.GLUtils; import androidx.annotation.Nullable; import androidx.media3.common.C; +import androidx.media3.common.FrameInfo; import androidx.media3.common.GlTextureInfo; import androidx.media3.common.VideoFrameProcessingException; import androidx.media3.common.util.GlUtil; @@ -81,10 +82,10 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; @Override public void queueInputBitmap( - Bitmap inputBitmap, long durationUs, long offsetUs, float frameRate, boolean useHdr) { + Bitmap inputBitmap, long durationUs, FrameInfo frameInfo, float frameRate, boolean useHdr) { videoFrameProcessingTaskExecutor.submit( () -> { - setupBitmap(inputBitmap, durationUs, offsetUs, frameRate, useHdr); + setupBitmap(inputBitmap, durationUs, frameInfo, frameRate, useHdr); currentInputStreamEnded = false; }); } @@ -126,9 +127,10 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; } }); } + // Methods that must be called on the GL thread. private void setupBitmap( - Bitmap bitmap, long durationUs, long offsetUs, float frameRate, boolean useHdr) + Bitmap bitmap, long durationUs, FrameInfo frameInfo, float frameRate, boolean useHdr) throws VideoFrameProcessingException { if (Util.SDK_INT >= 26) { checkState( @@ -141,7 +143,8 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; this.useHdr = useHdr; int framesToAdd = round(frameRate * (durationUs / (float) C.MICROS_PER_SECOND)); double frameDurationUs = C.MICROS_PER_SECOND / frameRate; - pendingBitmaps.add(new BitmapFrameSequenceInfo(bitmap, offsetUs, frameDurationUs, framesToAdd)); + pendingBitmaps.add( + new BitmapFrameSequenceInfo(bitmap, frameInfo, frameDurationUs, framesToAdd)); maybeQueueToShaderProgram(); } @@ -153,7 +156,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; if (framesToQueueForCurrentBitmap == 0) { Bitmap bitmap = currentBitmapInfo.bitmap; framesToQueueForCurrentBitmap = currentBitmapInfo.numberOfFrames; - currentPresentationTimeUs = currentBitmapInfo.offsetUs; + currentPresentationTimeUs = currentBitmapInfo.frameInfo.offsetToAddUs; int currentTexId; try { if (currentGlTextureInfo != null) { @@ -161,8 +164,8 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; } currentTexId = GlUtil.createTexture( - bitmap.getWidth(), - bitmap.getHeight(), + currentBitmapInfo.frameInfo.width, + currentBitmapInfo.frameInfo.height, /* useHighPrecisionColorComponents= */ useHdr); GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, currentTexId); GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, /* level= */ 0, bitmap, /* border= */ 0); @@ -175,8 +178,8 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; currentTexId, /* fboId= */ C.INDEX_UNSET, /* rboId= */ C.INDEX_UNSET, - bitmap.getWidth(), - bitmap.getHeight()); + currentBitmapInfo.frameInfo.width, + currentBitmapInfo.frameInfo.height); } framesToQueueForCurrentBitmap--; downstreamShaderProgramCapacity--; @@ -196,14 +199,14 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; /** Information to generate all the frames associated with a specific {@link Bitmap}. */ private static final class BitmapFrameSequenceInfo { public final Bitmap bitmap; - public final long offsetUs; + public final FrameInfo frameInfo; public final double frameDurationUs; public final int numberOfFrames; public BitmapFrameSequenceInfo( - Bitmap bitmap, long offsetUs, double frameDurationUs, int numberOfFrames) { + Bitmap bitmap, FrameInfo frameInfo, double frameDurationUs, int numberOfFrames) { this.bitmap = bitmap; - this.offsetUs = offsetUs; + this.frameInfo = frameInfo; this.frameDurationUs = frameDurationUs; this.numberOfFrames = numberOfFrames; } diff --git a/libraries/effect/src/main/java/androidx/media3/effect/DefaultVideoFrameProcessor.java b/libraries/effect/src/main/java/androidx/media3/effect/DefaultVideoFrameProcessor.java index 16d1eba3be..0e811e1c58 100644 --- a/libraries/effect/src/main/java/androidx/media3/effect/DefaultVideoFrameProcessor.java +++ b/libraries/effect/src/main/java/androidx/media3/effect/DefaultVideoFrameProcessor.java @@ -362,7 +362,7 @@ public final class DefaultVideoFrameProcessor implements VideoFrameProcessor { .queueInputBitmap( inputBitmap, durationUs, - checkNotNull(nextInputFrameInfo).offsetToAddUs, + checkNotNull(nextInputFrameInfo), frameRate, /* useHdr= */ false); hasRefreshedNextInputFrameInfo = false; diff --git a/libraries/effect/src/main/java/androidx/media3/effect/ExternalTextureManager.java b/libraries/effect/src/main/java/androidx/media3/effect/ExternalTextureManager.java index 4361e4246f..79fd28de7d 100644 --- a/libraries/effect/src/main/java/androidx/media3/effect/ExternalTextureManager.java +++ b/libraries/effect/src/main/java/androidx/media3/effect/ExternalTextureManager.java @@ -18,7 +18,6 @@ package androidx.media3.effect; import static androidx.media3.common.util.Assertions.checkState; import static androidx.media3.common.util.Assertions.checkStateNotNull; -import android.graphics.Bitmap; import android.graphics.SurfaceTexture; import android.view.Surface; import androidx.annotation.Nullable; @@ -115,12 +114,6 @@ import java.util.concurrent.atomic.AtomicInteger; surfaceTexture.setDefaultBufferSize(width, height); } - @Override - public void queueInputBitmap( - Bitmap inputBitmap, long durationUs, long offsetUs, float frameRate, boolean useHdr) { - throw new UnsupportedOperationException(); - } - @Override public Surface getInputSurface() { return surface; diff --git a/libraries/effect/src/main/java/androidx/media3/effect/TextureManager.java b/libraries/effect/src/main/java/androidx/media3/effect/TextureManager.java index 9137e4ca96..8d1d97bddd 100644 --- a/libraries/effect/src/main/java/androidx/media3/effect/TextureManager.java +++ b/libraries/effect/src/main/java/androidx/media3/effect/TextureManager.java @@ -49,7 +49,7 @@ import androidx.media3.common.VideoFrameProcessor.OnInputFrameProcessedListener; * @param useHdr Whether input and/or output colors are HDR. */ default void queueInputBitmap( - Bitmap inputBitmap, long durationUs, long offsetUs, float frameRate, boolean useHdr) { + Bitmap inputBitmap, long durationUs, FrameInfo frameInfo, float frameRate, boolean useHdr) { throw new UnsupportedOperationException(); }