From 5168a3565493accba5c4271b1bd6a694575d95cd Mon Sep 17 00:00:00 2001 From: tofunmi Date: Wed, 15 Feb 2023 13:55:32 +0000 Subject: [PATCH] Change FrameProcessor.create() inputTrackType parameter to a boolean PiperOrigin-RevId: 509808913 --- .../exoplayer2/util/FrameProcessor.java | 29 ++++++++++--------- .../video/MediaCodecVideoRenderer.java | 2 +- ...EffectsFrameProcessorFrameReleaseTest.java | 3 +- .../GlEffectsFrameProcessorPixelTest.java | 7 ++--- .../FinalMatrixShaderProgramWrapper.java | 8 ++--- .../effect/GlEffectsFrameProcessor.java | 25 ++++++++-------- .../transformer/VideoSamplePipeline.java | 2 +- .../testutil/FrameProcessorTestRunner.java | 16 +++++----- 8 files changed, 44 insertions(+), 48 deletions(-) diff --git a/library/common/src/main/java/com/google/android/exoplayer2/util/FrameProcessor.java b/library/common/src/main/java/com/google/android/exoplayer2/util/FrameProcessor.java index 7cf05d11fa..133b5de38e 100644 --- a/library/common/src/main/java/com/google/android/exoplayer2/util/FrameProcessor.java +++ b/library/common/src/main/java/com/google/android/exoplayer2/util/FrameProcessor.java @@ -20,7 +20,6 @@ import android.graphics.Bitmap; import android.opengl.EGLExt; import android.view.Surface; import androidx.annotation.Nullable; -import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.video.ColorInfo; import java.util.List; import java.util.concurrent.Executor; @@ -51,8 +50,10 @@ public interface FrameProcessor { * @param debugViewProvider A {@link DebugViewProvider}. * @param inputColorInfo The {@link ColorInfo} for input frames. * @param outputColorInfo The {@link ColorInfo} for output frames. - * @param inputTrackType The {@link C.TrackType} of the input. Supported track types are {@link - * C#TRACK_TYPE_VIDEO} and {@link C#TRACK_TYPE_IMAGE}. + * @param isInputTextureExternal Whether the input frames are produced externally (e.g. from a + * video) or not (e.g. from a {@link Bitmap}). See the + * SurfaceTexture docs for more information on external textures. * @param releaseFramesAutomatically If {@code true}, the {@link FrameProcessor} will render * output frames to the {@linkplain #setOutputSurfaceInfo(SurfaceInfo) output surface} * automatically as {@link FrameProcessor} is done processing them. If {@code false}, the @@ -70,7 +71,7 @@ public interface FrameProcessor { DebugViewProvider debugViewProvider, ColorInfo inputColorInfo, ColorInfo outputColorInfo, - @C.TrackType int inputTrackType, + boolean isInputTextureExternal, boolean releaseFramesAutomatically, Executor executor, Listener listener) @@ -127,8 +128,8 @@ public interface FrameProcessor { /** * Provides an input {@link Bitmap} to the {@link FrameProcessor}. * - *

This method should only be used for when the {@link FrameProcessor} was created with {@link - * C#TRACK_TYPE_IMAGE} as the {@code inputTrackType}. + *

This method should only be used for when the {@link FrameProcessor}'s {@code + * isInputTextureExternal} parameter is set to {@code false}. * *

Can be called on any thread. * @@ -143,8 +144,8 @@ public interface FrameProcessor { /** * Returns the input {@link Surface}, where {@link FrameProcessor} consumes input frames from. * - *

This method should only be used for when the {@link FrameProcessor} was created with {@link - * C#TRACK_TYPE_VIDEO} as the {@code inputTrackType}. + *

This method should only be used for when the {@link FrameProcessor}'s {@code + * isInputTextureExternal} parameter is set to {@code true}. * *

Can be called on any thread. */ @@ -172,8 +173,8 @@ public interface FrameProcessor { * *

Must be called before rendering a frame to the frame processor's input surface. * - *

This method should only be used for when the {@link FrameProcessor} was created with {@link - * C#TRACK_TYPE_VIDEO} as the {@code inputTrackType}. + *

This method should only be used for when the {@link FrameProcessor}'s {@code + * isInputTextureExternal} parameter is set to {@code true}. * *

Can be called on any thread. * @@ -186,8 +187,8 @@ public interface FrameProcessor { * Returns the number of input frames that have been {@linkplain #registerInputFrame() registered} * but not processed off the {@linkplain #getInputSurface() input surface} yet. * - *

This method should only be used for when the {@link FrameProcessor} was created with {@link - * C#TRACK_TYPE_VIDEO} as the {@code inputTrackType}. + *

This method should only be used for when the {@link FrameProcessor}'s {@code + * isInputTextureExternal} parameter is set to {@code true}. * *

Can be called on any thread. */ @@ -246,8 +247,8 @@ public interface FrameProcessor { *

All the frames that are {@linkplain #registerInputFrame() registered} prior to calling this * method are no longer considered to be registered when this method returns. * - *

This method should only be used for when the {@link FrameProcessor} was created with {@link - * C#TRACK_TYPE_VIDEO} as the {@code inputTrackType}. + *

This method should only be used for when the {@link FrameProcessor}'s {@code + * isInputTextureExternal} parameter is set to {@code true}. * *

{@link Listener} methods invoked prior to calling this method should be ignored. */ 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 6c2ea05c57..468278e4ea 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 @@ -1988,7 +1988,7 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer { DebugViewProvider.NONE, inputColorInfo, outputColorInfo, - C.TRACK_TYPE_VIDEO, + /* isInputTextureExternal= */ true, /* releaseFramesAutomatically= */ false, /* executor= */ handler::post, new FrameProcessor.Listener() { diff --git a/library/effect/src/androidTest/java/com/google/android/exoplayer2/effect/GlEffectsFrameProcessorFrameReleaseTest.java b/library/effect/src/androidTest/java/com/google/android/exoplayer2/effect/GlEffectsFrameProcessorFrameReleaseTest.java index 1f6bcdbb8a..4001ec68a7 100644 --- a/library/effect/src/androidTest/java/com/google/android/exoplayer2/effect/GlEffectsFrameProcessorFrameReleaseTest.java +++ b/library/effect/src/androidTest/java/com/google/android/exoplayer2/effect/GlEffectsFrameProcessorFrameReleaseTest.java @@ -25,7 +25,6 @@ import android.media.Image; import android.media.ImageReader; import androidx.annotation.Nullable; import androidx.test.ext.junit.runners.AndroidJUnit4; -import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.util.DebugViewProvider; import com.google.android.exoplayer2.util.FrameInfo; import com.google.android.exoplayer2.util.FrameProcessingException; @@ -296,7 +295,7 @@ public final class GlEffectsFrameProcessorFrameReleaseTest { DebugViewProvider.NONE, /* inputColorInfo= */ ColorInfo.SDR_BT709_LIMITED, /* outputColorInfo= */ ColorInfo.SDR_BT709_LIMITED, - C.TRACK_TYPE_VIDEO, + /* isInputTextureExternal= */ true, releaseFramesAutomatically, MoreExecutors.directExecutor(), new FrameProcessor.Listener() { diff --git a/library/effect/src/androidTest/java/com/google/android/exoplayer2/effect/GlEffectsFrameProcessorPixelTest.java b/library/effect/src/androidTest/java/com/google/android/exoplayer2/effect/GlEffectsFrameProcessorPixelTest.java index 59c951a265..c26c0b1ac4 100644 --- a/library/effect/src/androidTest/java/com/google/android/exoplayer2/effect/GlEffectsFrameProcessorPixelTest.java +++ b/library/effect/src/androidTest/java/com/google/android/exoplayer2/effect/GlEffectsFrameProcessorPixelTest.java @@ -15,7 +15,6 @@ */ package com.google.android.exoplayer2.effect; -import static com.google.android.exoplayer2.C.TRACK_TYPE_IMAGE; import static com.google.android.exoplayer2.effect.OverlayShaderProgramPixelTest.OVERLAY_PNG_ASSET_PATH; import static com.google.android.exoplayer2.testutil.BitmapPixelTestUtil.MAXIMUM_AVERAGE_PIXEL_ABSOLUTE_DIFFERENCE; import static com.google.android.exoplayer2.testutil.BitmapPixelTestUtil.getBitmapAveragePixelAbsoluteDifferenceArgb8888; @@ -107,9 +106,7 @@ public final class GlEffectsFrameProcessorPixelTest { public void noEffects_withImageInput_matchesGoldenFile() throws Exception { String testId = "noEffects_withImageInput_matchesGoldenFile"; frameProcessorTestRunner = - getDefaultFrameProcessorTestRunnerBuilder(testId) - .setInputTrackType(TRACK_TYPE_IMAGE) - .build(); + getDefaultFrameProcessorTestRunnerBuilder(testId).setIsInputTextureExternal(false).build(); Bitmap expectedBitmap = readBitmap(ORIGINAL_PNG_ASSET_PATH); Bitmap actualBitmap = frameProcessorTestRunner.processImageFrameAndEnd(expectedBitmap); @@ -125,7 +122,7 @@ public final class GlEffectsFrameProcessorPixelTest { String testId = "wrappedCrop_withImageInput_matchesGoldenFile"; frameProcessorTestRunner = getDefaultFrameProcessorTestRunnerBuilder(testId) - .setInputTrackType(TRACK_TYPE_IMAGE) + .setIsInputTextureExternal(false) .setEffects( new GlEffectWrapper( new Crop( diff --git a/library/effect/src/main/java/com/google/android/exoplayer2/effect/FinalMatrixShaderProgramWrapper.java b/library/effect/src/main/java/com/google/android/exoplayer2/effect/FinalMatrixShaderProgramWrapper.java index 807f5082d7..e2e9239779 100644 --- a/library/effect/src/main/java/com/google/android/exoplayer2/effect/FinalMatrixShaderProgramWrapper.java +++ b/library/effect/src/main/java/com/google/android/exoplayer2/effect/FinalMatrixShaderProgramWrapper.java @@ -72,7 +72,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; private final EGLContext eglContext; private final DebugViewProvider debugViewProvider; private final boolean sampleFromInputTexture; - private final boolean isInputExternal; + private final boolean isInputTextureExternal; private final ColorInfo inputColorInfo; private final ColorInfo outputColorInfo; private final boolean releaseFramesAutomatically; @@ -110,7 +110,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; ColorInfo inputColorInfo, ColorInfo outputColorInfo, boolean sampleFromInputTexture, - boolean isInputExternal, + boolean isInputTextureExternal, boolean releaseFramesAutomatically, Executor frameProcessorListenerExecutor, FrameProcessor.Listener frameProcessorListener) { @@ -121,7 +121,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; this.eglContext = eglContext; this.debugViewProvider = debugViewProvider; this.sampleFromInputTexture = sampleFromInputTexture; - this.isInputExternal = isInputExternal; + this.isInputTextureExternal = isInputTextureExternal; this.inputColorInfo = inputColorInfo; this.outputColorInfo = outputColorInfo; this.releaseFramesAutomatically = releaseFramesAutomatically; @@ -406,7 +406,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; ImmutableList expandedMatrixTransformations = matrixTransformationListBuilder.build(); if (sampleFromInputTexture) { - if (isInputExternal) { + if (isInputTextureExternal) { matrixShaderProgram = MatrixShaderProgram.createWithExternalSampler( context, diff --git a/library/effect/src/main/java/com/google/android/exoplayer2/effect/GlEffectsFrameProcessor.java b/library/effect/src/main/java/com/google/android/exoplayer2/effect/GlEffectsFrameProcessor.java index a06e2a33b5..cd885212d5 100644 --- a/library/effect/src/main/java/com/google/android/exoplayer2/effect/GlEffectsFrameProcessor.java +++ b/library/effect/src/main/java/com/google/android/exoplayer2/effect/GlEffectsFrameProcessor.java @@ -96,7 +96,7 @@ public final class GlEffectsFrameProcessor implements FrameProcessor { DebugViewProvider debugViewProvider, ColorInfo inputColorInfo, ColorInfo outputColorInfo, - @C.TrackType int inputTrackType, + boolean isInputTextureExternal, boolean releaseFramesAutomatically, Executor listenerExecutor, Listener listener) @@ -107,7 +107,6 @@ public final class GlEffectsFrameProcessor implements FrameProcessor { checkArgument(inputColorInfo.colorTransfer != C.COLOR_TRANSFER_LINEAR); checkArgument(outputColorInfo.isValid()); checkArgument(outputColorInfo.colorTransfer != C.COLOR_TRANSFER_LINEAR); - checkArgument(inputTrackType == C.TRACK_TYPE_VIDEO || inputTrackType == C.TRACK_TYPE_IMAGE); if (inputColorInfo.colorSpace != outputColorInfo.colorSpace || ColorInfo.isTransferHdr(inputColorInfo) != ColorInfo.isTransferHdr(outputColorInfo)) { @@ -134,7 +133,7 @@ public final class GlEffectsFrameProcessor implements FrameProcessor { debugViewProvider, inputColorInfo, outputColorInfo, - /* isInputExternal= */ inputTrackType == C.TRACK_TYPE_VIDEO, + isInputTextureExternal, releaseFramesAutomatically, singleThreadExecutorService, listenerExecutor, @@ -168,7 +167,7 @@ public final class GlEffectsFrameProcessor implements FrameProcessor { DebugViewProvider debugViewProvider, ColorInfo inputColorInfo, ColorInfo outputColorInfo, - boolean isInputExternal, + boolean isInputTextureExternal, boolean releaseFramesAutomatically, ExecutorService singleThreadExecutorService, Executor executor, @@ -210,7 +209,7 @@ public final class GlEffectsFrameProcessor implements FrameProcessor { debugViewProvider, inputColorInfo, outputColorInfo, - isInputExternal, + isInputTextureExternal, releaseFramesAutomatically, executor, listener); @@ -222,7 +221,7 @@ public final class GlEffectsFrameProcessor implements FrameProcessor { return new GlEffectsFrameProcessor( eglDisplay, eglContext, - isInputExternal, + isInputTextureExternal, frameProcessingTaskExecutor, shaderPrograms, releaseFramesAutomatically); @@ -247,7 +246,7 @@ public final class GlEffectsFrameProcessor implements FrameProcessor { DebugViewProvider debugViewProvider, ColorInfo inputColorInfo, ColorInfo outputColorInfo, - boolean isInputExternal, + boolean isInputTextureExternal, boolean releaseFramesAutomatically, Executor executor, Listener listener) @@ -286,7 +285,7 @@ public final class GlEffectsFrameProcessor implements FrameProcessor { if (!matrixTransformations.isEmpty() || !rgbMatrices.isEmpty() || sampleFromInputTexture) { MatrixShaderProgram matrixShaderProgram; if (sampleFromInputTexture) { - if (isInputExternal) { + if (isInputTextureExternal) { matrixShaderProgram = MatrixShaderProgram.createWithExternalSampler( context, matrixTransformations, rgbMatrices, inputColorInfo, linearColorInfo); @@ -319,7 +318,7 @@ public final class GlEffectsFrameProcessor implements FrameProcessor { /* inputColorInfo= */ sampleFromInputTexture ? inputColorInfo : linearColorInfo, outputColorInfo, sampleFromInputTexture, - isInputExternal, + isInputTextureExternal, releaseFramesAutomatically, executor, listener)); @@ -372,7 +371,7 @@ public final class GlEffectsFrameProcessor implements FrameProcessor { private GlEffectsFrameProcessor( EGLDisplay eglDisplay, EGLContext eglContext, - boolean isInputExternal, + boolean isInputTextureExternal, FrameProcessingTaskExecutor frameProcessingTaskExecutor, ImmutableList shaderPrograms, boolean releaseFramesAutomatically) @@ -388,7 +387,7 @@ public final class GlEffectsFrameProcessor implements FrameProcessor { GlShaderProgram inputShaderProgram = shaderPrograms.get(0); - if (isInputExternal) { + if (isInputTextureExternal) { checkState(inputShaderProgram instanceof ExternalShaderProgram); inputExternalTextureManager = new ExternalTextureManager( @@ -420,8 +419,8 @@ public final class GlEffectsFrameProcessor implements FrameProcessor { * call this method after instantiation to ensure that buffers are handled at full resolution. See * {@link SurfaceTexture#setDefaultBufferSize(int, int)} for more information. * - *

This method should only be used for when the {@link FrameProcessor} was created with {@link - * C#TRACK_TYPE_VIDEO} as the {@code inputTrackType}. + *

This method should only be used for when the {@link FrameProcessor}'s {@code + * isInputTextureExternal} parameter is set to {@code true}. * * @param width The default width for input buffers, in pixels. * @param height The default height for input buffers, in pixels. diff --git a/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/VideoSamplePipeline.java b/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/VideoSamplePipeline.java index 19c4a05324..e871d5350e 100644 --- a/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/VideoSamplePipeline.java +++ b/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/VideoSamplePipeline.java @@ -140,7 +140,7 @@ import org.checkerframework.dataflow.qual.Pure; debugViewProvider, frameProcessorInputColor, frameProcessorOutputColor, - MimeTypes.getTrackType(firstInputFormat.sampleMimeType), + MimeTypes.isVideo(firstInputFormat.sampleMimeType), /* releaseFramesAutomatically= */ true, MoreExecutors.directExecutor(), new FrameProcessor.Listener() { diff --git a/testutils/src/main/java/com/google/android/exoplayer2/testutil/FrameProcessorTestRunner.java b/testutils/src/main/java/com/google/android/exoplayer2/testutil/FrameProcessorTestRunner.java index 215f0ae27e..4a45bfae7a 100644 --- a/testutils/src/main/java/com/google/android/exoplayer2/testutil/FrameProcessorTestRunner.java +++ b/testutils/src/main/java/com/google/android/exoplayer2/testutil/FrameProcessorTestRunner.java @@ -60,12 +60,12 @@ public final class FrameProcessorTestRunner { private float pixelWidthHeightRatio; private @MonotonicNonNull ColorInfo inputColorInfo; private @MonotonicNonNull ColorInfo outputColorInfo; - private @C.TrackType int inputTrackType; + private boolean isInputTextureExternal; /** Creates a new instance with default values. */ public Builder() { pixelWidthHeightRatio = DEFAULT_PIXEL_WIDTH_HEIGHT_RATIO; - inputTrackType = C.TRACK_TYPE_VIDEO; + isInputTextureExternal = true; } /** @@ -171,11 +171,11 @@ public final class FrameProcessorTestRunner { /** * Sets the input track type. See {@link FrameProcessor.Factory#create}. * - *

The default value is {@link C#TRACK_TYPE_VIDEO}. + *

The default value is {@code true}. */ @CanIgnoreReturnValue - public Builder setInputTrackType(@C.TrackType int inputTrackType) { - this.inputTrackType = inputTrackType; + public Builder setIsInputTextureExternal(boolean isInputTextureExternal) { + this.isInputTextureExternal = isInputTextureExternal; return this; } @@ -193,7 +193,7 @@ public final class FrameProcessorTestRunner { pixelWidthHeightRatio, inputColorInfo == null ? ColorInfo.SDR_BT709_LIMITED : inputColorInfo, outputColorInfo == null ? ColorInfo.SDR_BT709_LIMITED : outputColorInfo, - inputTrackType); + isInputTextureExternal); } } @@ -223,7 +223,7 @@ public final class FrameProcessorTestRunner { float pixelWidthHeightRatio, ColorInfo inputColorInfo, ColorInfo outputColorInfo, - @C.TrackType int inputTrackType) + boolean isInputTextureExternal) throws FrameProcessingException { this.testId = testId; this.videoAssetPath = videoAssetPath; @@ -238,7 +238,7 @@ public final class FrameProcessorTestRunner { DebugViewProvider.NONE, inputColorInfo, outputColorInfo, - inputTrackType, + isInputTextureExternal, /* releaseFramesAutomatically= */ true, MoreExecutors.directExecutor(), new FrameProcessor.Listener() {