From 25ece32ddaacf418b3a6070a7b079a599d64ad26 Mon Sep 17 00:00:00 2001 From: hschlueter Date: Wed, 29 Jun 2022 17:56:53 +0000 Subject: [PATCH] Move DebugViewProvider out of Transformer class. The GlEffectsFrameProcessor that will be part of the effects module uses the DebugViewProvider. So it does not make sense for it to be an inner interface of Transformer. PiperOrigin-RevId: 458014932 (cherry picked from commit f41e6796ce39469f9fc3a844ec88725ab56d3356) --- .../transformerdemo/TransformerActivity.java | 3 +- .../GlEffectsFrameProcessorPixelTest.java | 2 +- .../transformer/DebugViewProvider.java | 35 +++++++++++++++++++ ...lMatrixTransformationProcessorWrapper.java | 4 +-- .../transformer/GlEffectsFrameProcessor.java | 8 ++--- .../exoplayer2/transformer/Transformer.java | 25 +++---------- .../transformer/TransformerVideoRenderer.java | 4 +-- .../VideoTranscodingSamplePipeline.java | 2 +- 8 files changed, 51 insertions(+), 32 deletions(-) create mode 100644 library/transformer/src/main/java/com/google/android/exoplayer2/transformer/DebugViewProvider.java diff --git a/demos/transformer/src/main/java/com/google/android/exoplayer2/transformerdemo/TransformerActivity.java b/demos/transformer/src/main/java/com/google/android/exoplayer2/transformerdemo/TransformerActivity.java index 5ec929b87c..c23c200dab 100644 --- a/demos/transformer/src/main/java/com/google/android/exoplayer2/transformerdemo/TransformerActivity.java +++ b/demos/transformer/src/main/java/com/google/android/exoplayer2/transformerdemo/TransformerActivity.java @@ -38,6 +38,7 @@ import androidx.appcompat.app.AppCompatActivity; import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.ExoPlayer; import com.google.android.exoplayer2.MediaItem; +import com.google.android.exoplayer2.transformer.DebugViewProvider; import com.google.android.exoplayer2.transformer.DefaultEncoderFactory; import com.google.android.exoplayer2.transformer.GlEffect; import com.google.android.exoplayer2.transformer.GlTextureProcessor; @@ -418,7 +419,7 @@ public final class TransformerActivity extends AppCompatActivity { Toast.makeText(getApplicationContext(), getString(messageResource), Toast.LENGTH_LONG).show(); } - private final class DemoDebugViewProvider implements Transformer.DebugViewProvider { + private final class DemoDebugViewProvider implements DebugViewProvider { private @MonotonicNonNull SurfaceView surfaceView; private int width; diff --git a/library/transformer/src/androidTest/java/com/google/android/exoplayer2/transformer/GlEffectsFrameProcessorPixelTest.java b/library/transformer/src/androidTest/java/com/google/android/exoplayer2/transformer/GlEffectsFrameProcessorPixelTest.java index 19280f0e3c..f2e8cd7dd7 100644 --- a/library/transformer/src/androidTest/java/com/google/android/exoplayer2/transformer/GlEffectsFrameProcessorPixelTest.java +++ b/library/transformer/src/androidTest/java/com/google/android/exoplayer2/transformer/GlEffectsFrameProcessorPixelTest.java @@ -378,7 +378,7 @@ public final class GlEffectsFrameProcessorPixelTest { }, /* streamOffsetUs= */ 0L, effects, - Transformer.DebugViewProvider.NONE, + DebugViewProvider.NONE, /* enableExperimentalHdrEditing= */ false)); glEffectsFrameProcessor.setInputFrameInfo( new FrameInfo(inputWidth, inputHeight, pixelWidthHeightRatio)); diff --git a/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/DebugViewProvider.java b/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/DebugViewProvider.java new file mode 100644 index 0000000000..f50fca05ff --- /dev/null +++ b/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/DebugViewProvider.java @@ -0,0 +1,35 @@ +/* + * Copyright 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.google.android.exoplayer2.transformer; + +import android.view.SurfaceView; +import androidx.annotation.Nullable; + +/** Provider for views to show diagnostic information during a transformation, for debugging. */ +public interface DebugViewProvider { + + /** Debug view provider that doesn't show any debug info. */ + DebugViewProvider NONE = (int width, int height) -> null; + + /** + * Returns a new surface view to show a preview of transformer output with the given width/height + * in pixels, or {@code null} if no debug information should be shown. + * + *

This method may be called on an arbitrary thread. + */ + @Nullable + SurfaceView getDebugPreviewSurfaceView(int width, int height); +} diff --git a/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/FinalMatrixTransformationProcessorWrapper.java b/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/FinalMatrixTransformationProcessorWrapper.java index 6b92d5ce24..1795c7bb5c 100644 --- a/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/FinalMatrixTransformationProcessorWrapper.java +++ b/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/FinalMatrixTransformationProcessorWrapper.java @@ -59,7 +59,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; private final EGLDisplay eglDisplay; private final EGLContext eglContext; private final long streamOffsetUs; - private final Transformer.DebugViewProvider debugViewProvider; + private final DebugViewProvider debugViewProvider; private final FrameProcessor.Listener frameProcessorListener; private final boolean enableExperimentalHdrEditing; @@ -85,7 +85,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; ImmutableList matrixTransformations, long streamOffsetUs, FrameProcessor.Listener frameProcessorListener, - Transformer.DebugViewProvider debugViewProvider, + DebugViewProvider debugViewProvider, boolean enableExperimentalHdrEditing) { this.context = context; this.matrixTransformations = matrixTransformations; diff --git a/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/GlEffectsFrameProcessor.java b/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/GlEffectsFrameProcessor.java index cfe183cf3c..80c6379331 100644 --- a/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/GlEffectsFrameProcessor.java +++ b/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/GlEffectsFrameProcessor.java @@ -52,7 +52,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; * @param context A {@link Context}. * @param listener A {@link Listener}. * @param effects The {@link GlEffect GlEffects} to apply to each frame. - * @param debugViewProvider A {@link Transformer.DebugViewProvider}. + * @param debugViewProvider A {@link DebugViewProvider}. * @param enableExperimentalHdrEditing Whether to attempt to process the input as an HDR signal. * @return A new instance. * @throws FrameProcessingException If reading shader files fails, or an OpenGL error occurs while @@ -63,7 +63,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; FrameProcessor.Listener listener, long streamOffsetUs, List effects, - Transformer.DebugViewProvider debugViewProvider, + DebugViewProvider debugViewProvider, boolean enableExperimentalHdrEditing) throws FrameProcessingException { @@ -105,7 +105,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; FrameProcessor.Listener listener, long streamOffsetUs, List effects, - Transformer.DebugViewProvider debugViewProvider, + DebugViewProvider debugViewProvider, boolean enableExperimentalHdrEditing, ExecutorService singleThreadExecutorService) throws GlUtil.GlException, FrameProcessingException { @@ -181,7 +181,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; EGLContext eglContext, long streamOffsetUs, FrameProcessor.Listener listener, - Transformer.DebugViewProvider debugViewProvider, + DebugViewProvider debugViewProvider, boolean enableExperimentalHdrEditing) throws FrameProcessingException { ImmutableList.Builder textureProcessorListBuilder = diff --git a/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/Transformer.java b/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/Transformer.java index ff0c57b93f..61a8098a5d 100644 --- a/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/Transformer.java +++ b/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/Transformer.java @@ -29,7 +29,6 @@ import android.content.Context; import android.os.Handler; import android.os.Looper; import android.os.ParcelFileDescriptor; -import android.view.SurfaceView; import androidx.annotation.IntDef; import androidx.annotation.Nullable; import androidx.annotation.RequiresApi; @@ -493,22 +492,6 @@ public final class Transformer { TransformationRequest fallbackTransformationRequest) {} } - /** Provider for views to show diagnostic information during transformation, for debugging. */ - public interface DebugViewProvider { - - /** Debug view provider that doesn't show any debug info. */ - DebugViewProvider NONE = (int width, int height) -> null; - - /** - * Returns a new surface view to show a preview of transformer output with the given - * width/height in pixels, or {@code null} if no debug information should be shown. - * - *

This method may be called on an arbitrary thread. - */ - @Nullable - SurfaceView getDebugPreviewSurfaceView(int width, int height); - } - /** * Progress state. One of {@link #PROGRESS_STATE_WAITING_FOR_AVAILABILITY}, {@link * #PROGRESS_STATE_AVAILABLE}, {@link #PROGRESS_STATE_UNAVAILABLE}, {@link @@ -547,7 +530,7 @@ public final class Transformer { private final ImmutableList videoEffects; private final Looper looper; private final Clock clock; - private final Transformer.DebugViewProvider debugViewProvider; + private final DebugViewProvider debugViewProvider; private final ListenerSet listeners; @VisibleForTesting /* package */ final Codec.DecoderFactory decoderFactory; @VisibleForTesting /* package */ final Codec.EncoderFactory encoderFactory; @@ -571,7 +554,7 @@ public final class Transformer { Clock clock, Codec.EncoderFactory encoderFactory, Codec.DecoderFactory decoderFactory, - Transformer.DebugViewProvider debugViewProvider) { + DebugViewProvider debugViewProvider) { checkState(!removeAudio || !removeVideo, "Audio and video cannot both be removed."); this.context = context; this.mediaSourceFactory = mediaSourceFactory; @@ -848,7 +831,7 @@ public final class Transformer { private final Codec.DecoderFactory decoderFactory; private final FallbackListener fallbackListener; private final AsyncErrorListener asyncErrorListener; - private final Transformer.DebugViewProvider debugViewProvider; + private final DebugViewProvider debugViewProvider; public TransformerRenderersFactory( Context context, @@ -862,7 +845,7 @@ public final class Transformer { Codec.DecoderFactory decoderFactory, FallbackListener fallbackListener, AsyncErrorListener asyncErrorListener, - Transformer.DebugViewProvider debugViewProvider) { + DebugViewProvider debugViewProvider) { this.context = context; this.muxerWrapper = muxerWrapper; this.removeAudio = removeAudio; diff --git a/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/TransformerVideoRenderer.java b/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/TransformerVideoRenderer.java index 96f2f2be0e..d241814ebc 100644 --- a/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/TransformerVideoRenderer.java +++ b/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/TransformerVideoRenderer.java @@ -39,7 +39,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; private final ImmutableList effects; private final Codec.EncoderFactory encoderFactory; private final Codec.DecoderFactory decoderFactory; - private final Transformer.DebugViewProvider debugViewProvider; + private final DebugViewProvider debugViewProvider; private final DecoderInputBuffer decoderInputBuffer; private @MonotonicNonNull SefSlowMotionFlattener sefSlowMotionFlattener; @@ -55,7 +55,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; Codec.DecoderFactory decoderFactory, Transformer.AsyncErrorListener asyncErrorListener, FallbackListener fallbackListener, - Transformer.DebugViewProvider debugViewProvider) { + DebugViewProvider debugViewProvider) { super( C.TRACK_TYPE_VIDEO, muxerWrapper, diff --git a/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/VideoTranscodingSamplePipeline.java b/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/VideoTranscodingSamplePipeline.java index 90a3fd274c..50ff9b5352 100644 --- a/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/VideoTranscodingSamplePipeline.java +++ b/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/VideoTranscodingSamplePipeline.java @@ -60,7 +60,7 @@ import org.checkerframework.dataflow.qual.Pure; List allowedOutputMimeTypes, FallbackListener fallbackListener, Transformer.AsyncErrorListener asyncErrorListener, - Transformer.DebugViewProvider debugViewProvider) + DebugViewProvider debugViewProvider) throws TransformationException { decoderInputBuffer = new DecoderInputBuffer(DecoderInputBuffer.BUFFER_REPLACEMENT_MODE_DISABLED);