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
This commit is contained in:
hschlueter 2022-06-29 17:56:53 +00:00 committed by Marc Baechinger
parent 234015cb95
commit cd0e5b99de
8 changed files with 53 additions and 32 deletions

View File

@ -41,6 +41,7 @@ import androidx.media3.common.util.Log;
import androidx.media3.common.util.Util;
import androidx.media3.exoplayer.ExoPlayer;
import androidx.media3.exoplayer.util.DebugTextViewHelper;
import androidx.media3.transformer.DebugViewProvider;
import androidx.media3.transformer.DefaultEncoderFactory;
import androidx.media3.transformer.GlEffect;
import androidx.media3.transformer.GlTextureProcessor;
@ -417,7 +418,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;

View File

@ -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));

View File

@ -0,0 +1,37 @@
/*
* 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 androidx.media3.transformer;
import android.view.SurfaceView;
import androidx.annotation.Nullable;
import androidx.media3.common.util.UnstableApi;
/** Provider for views to show diagnostic information during a transformation, for debugging. */
@UnstableApi
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.
*
* <p>This method may be called on an arbitrary thread.
*/
@Nullable
SurfaceView getDebugPreviewSurfaceView(int width, int height);
}

View File

@ -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<GlMatrixTransformation> matrixTransformations,
long streamOffsetUs,
FrameProcessor.Listener frameProcessorListener,
Transformer.DebugViewProvider debugViewProvider,
DebugViewProvider debugViewProvider,
boolean enableExperimentalHdrEditing) {
this.context = context;
this.matrixTransformations = matrixTransformations;

View File

@ -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<GlEffect> 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<GlEffect> 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<GlTextureProcessor> textureProcessorListBuilder =

View File

@ -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;
@ -495,22 +494,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.
*
* <p>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
@ -549,7 +532,7 @@ public final class Transformer {
private final ImmutableList<GlEffect> videoEffects;
private final Looper looper;
private final Clock clock;
private final Transformer.DebugViewProvider debugViewProvider;
private final DebugViewProvider debugViewProvider;
private final ListenerSet<Transformer.Listener> listeners;
@VisibleForTesting /* package */ final Codec.DecoderFactory decoderFactory;
@VisibleForTesting /* package */ final Codec.EncoderFactory encoderFactory;
@ -573,7 +556,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;
@ -850,7 +833,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,
@ -864,7 +847,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;

View File

@ -39,7 +39,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
private final ImmutableList<GlEffect> 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,

View File

@ -60,7 +60,7 @@ import org.checkerframework.dataflow.qual.Pure;
List<String> allowedOutputMimeTypes,
FallbackListener fallbackListener,
Transformer.AsyncErrorListener asyncErrorListener,
Transformer.DebugViewProvider debugViewProvider)
DebugViewProvider debugViewProvider)
throws TransformationException {
decoderInputBuffer =
new DecoderInputBuffer(DecoderInputBuffer.BUFFER_REPLACEMENT_MODE_DISABLED);