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:
parent
234015cb95
commit
cd0e5b99de
@ -41,6 +41,7 @@ import androidx.media3.common.util.Log;
|
|||||||
import androidx.media3.common.util.Util;
|
import androidx.media3.common.util.Util;
|
||||||
import androidx.media3.exoplayer.ExoPlayer;
|
import androidx.media3.exoplayer.ExoPlayer;
|
||||||
import androidx.media3.exoplayer.util.DebugTextViewHelper;
|
import androidx.media3.exoplayer.util.DebugTextViewHelper;
|
||||||
|
import androidx.media3.transformer.DebugViewProvider;
|
||||||
import androidx.media3.transformer.DefaultEncoderFactory;
|
import androidx.media3.transformer.DefaultEncoderFactory;
|
||||||
import androidx.media3.transformer.GlEffect;
|
import androidx.media3.transformer.GlEffect;
|
||||||
import androidx.media3.transformer.GlTextureProcessor;
|
import androidx.media3.transformer.GlTextureProcessor;
|
||||||
@ -417,7 +418,7 @@ public final class TransformerActivity extends AppCompatActivity {
|
|||||||
Toast.makeText(getApplicationContext(), getString(messageResource), Toast.LENGTH_LONG).show();
|
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 @MonotonicNonNull SurfaceView surfaceView;
|
||||||
private int width;
|
private int width;
|
||||||
|
@ -378,7 +378,7 @@ public final class GlEffectsFrameProcessorPixelTest {
|
|||||||
},
|
},
|
||||||
/* streamOffsetUs= */ 0L,
|
/* streamOffsetUs= */ 0L,
|
||||||
effects,
|
effects,
|
||||||
Transformer.DebugViewProvider.NONE,
|
DebugViewProvider.NONE,
|
||||||
/* enableExperimentalHdrEditing= */ false));
|
/* enableExperimentalHdrEditing= */ false));
|
||||||
glEffectsFrameProcessor.setInputFrameInfo(
|
glEffectsFrameProcessor.setInputFrameInfo(
|
||||||
new FrameInfo(inputWidth, inputHeight, pixelWidthHeightRatio));
|
new FrameInfo(inputWidth, inputHeight, pixelWidthHeightRatio));
|
||||||
|
@ -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);
|
||||||
|
}
|
@ -59,7 +59,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
|||||||
private final EGLDisplay eglDisplay;
|
private final EGLDisplay eglDisplay;
|
||||||
private final EGLContext eglContext;
|
private final EGLContext eglContext;
|
||||||
private final long streamOffsetUs;
|
private final long streamOffsetUs;
|
||||||
private final Transformer.DebugViewProvider debugViewProvider;
|
private final DebugViewProvider debugViewProvider;
|
||||||
private final FrameProcessor.Listener frameProcessorListener;
|
private final FrameProcessor.Listener frameProcessorListener;
|
||||||
private final boolean enableExperimentalHdrEditing;
|
private final boolean enableExperimentalHdrEditing;
|
||||||
|
|
||||||
@ -85,7 +85,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
|||||||
ImmutableList<GlMatrixTransformation> matrixTransformations,
|
ImmutableList<GlMatrixTransformation> matrixTransformations,
|
||||||
long streamOffsetUs,
|
long streamOffsetUs,
|
||||||
FrameProcessor.Listener frameProcessorListener,
|
FrameProcessor.Listener frameProcessorListener,
|
||||||
Transformer.DebugViewProvider debugViewProvider,
|
DebugViewProvider debugViewProvider,
|
||||||
boolean enableExperimentalHdrEditing) {
|
boolean enableExperimentalHdrEditing) {
|
||||||
this.context = context;
|
this.context = context;
|
||||||
this.matrixTransformations = matrixTransformations;
|
this.matrixTransformations = matrixTransformations;
|
||||||
|
@ -52,7 +52,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
|||||||
* @param context A {@link Context}.
|
* @param context A {@link Context}.
|
||||||
* @param listener A {@link Listener}.
|
* @param listener A {@link Listener}.
|
||||||
* @param effects The {@link GlEffect GlEffects} to apply to each frame.
|
* @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.
|
* @param enableExperimentalHdrEditing Whether to attempt to process the input as an HDR signal.
|
||||||
* @return A new instance.
|
* @return A new instance.
|
||||||
* @throws FrameProcessingException If reading shader files fails, or an OpenGL error occurs while
|
* @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,
|
FrameProcessor.Listener listener,
|
||||||
long streamOffsetUs,
|
long streamOffsetUs,
|
||||||
List<GlEffect> effects,
|
List<GlEffect> effects,
|
||||||
Transformer.DebugViewProvider debugViewProvider,
|
DebugViewProvider debugViewProvider,
|
||||||
boolean enableExperimentalHdrEditing)
|
boolean enableExperimentalHdrEditing)
|
||||||
throws FrameProcessingException {
|
throws FrameProcessingException {
|
||||||
|
|
||||||
@ -105,7 +105,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
|||||||
FrameProcessor.Listener listener,
|
FrameProcessor.Listener listener,
|
||||||
long streamOffsetUs,
|
long streamOffsetUs,
|
||||||
List<GlEffect> effects,
|
List<GlEffect> effects,
|
||||||
Transformer.DebugViewProvider debugViewProvider,
|
DebugViewProvider debugViewProvider,
|
||||||
boolean enableExperimentalHdrEditing,
|
boolean enableExperimentalHdrEditing,
|
||||||
ExecutorService singleThreadExecutorService)
|
ExecutorService singleThreadExecutorService)
|
||||||
throws GlUtil.GlException, FrameProcessingException {
|
throws GlUtil.GlException, FrameProcessingException {
|
||||||
@ -181,7 +181,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
|||||||
EGLContext eglContext,
|
EGLContext eglContext,
|
||||||
long streamOffsetUs,
|
long streamOffsetUs,
|
||||||
FrameProcessor.Listener listener,
|
FrameProcessor.Listener listener,
|
||||||
Transformer.DebugViewProvider debugViewProvider,
|
DebugViewProvider debugViewProvider,
|
||||||
boolean enableExperimentalHdrEditing)
|
boolean enableExperimentalHdrEditing)
|
||||||
throws FrameProcessingException {
|
throws FrameProcessingException {
|
||||||
ImmutableList.Builder<GlTextureProcessor> textureProcessorListBuilder =
|
ImmutableList.Builder<GlTextureProcessor> textureProcessorListBuilder =
|
||||||
|
@ -29,7 +29,6 @@ import android.content.Context;
|
|||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.Looper;
|
import android.os.Looper;
|
||||||
import android.os.ParcelFileDescriptor;
|
import android.os.ParcelFileDescriptor;
|
||||||
import android.view.SurfaceView;
|
|
||||||
import androidx.annotation.IntDef;
|
import androidx.annotation.IntDef;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import androidx.annotation.RequiresApi;
|
import androidx.annotation.RequiresApi;
|
||||||
@ -495,22 +494,6 @@ public final class Transformer {
|
|||||||
TransformationRequest fallbackTransformationRequest) {}
|
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. One of {@link #PROGRESS_STATE_WAITING_FOR_AVAILABILITY}, {@link
|
||||||
* #PROGRESS_STATE_AVAILABLE}, {@link #PROGRESS_STATE_UNAVAILABLE}, {@link
|
* #PROGRESS_STATE_AVAILABLE}, {@link #PROGRESS_STATE_UNAVAILABLE}, {@link
|
||||||
@ -549,7 +532,7 @@ public final class Transformer {
|
|||||||
private final ImmutableList<GlEffect> videoEffects;
|
private final ImmutableList<GlEffect> videoEffects;
|
||||||
private final Looper looper;
|
private final Looper looper;
|
||||||
private final Clock clock;
|
private final Clock clock;
|
||||||
private final Transformer.DebugViewProvider debugViewProvider;
|
private final DebugViewProvider debugViewProvider;
|
||||||
private final ListenerSet<Transformer.Listener> listeners;
|
private final ListenerSet<Transformer.Listener> listeners;
|
||||||
@VisibleForTesting /* package */ final Codec.DecoderFactory decoderFactory;
|
@VisibleForTesting /* package */ final Codec.DecoderFactory decoderFactory;
|
||||||
@VisibleForTesting /* package */ final Codec.EncoderFactory encoderFactory;
|
@VisibleForTesting /* package */ final Codec.EncoderFactory encoderFactory;
|
||||||
@ -573,7 +556,7 @@ public final class Transformer {
|
|||||||
Clock clock,
|
Clock clock,
|
||||||
Codec.EncoderFactory encoderFactory,
|
Codec.EncoderFactory encoderFactory,
|
||||||
Codec.DecoderFactory decoderFactory,
|
Codec.DecoderFactory decoderFactory,
|
||||||
Transformer.DebugViewProvider debugViewProvider) {
|
DebugViewProvider debugViewProvider) {
|
||||||
checkState(!removeAudio || !removeVideo, "Audio and video cannot both be removed.");
|
checkState(!removeAudio || !removeVideo, "Audio and video cannot both be removed.");
|
||||||
this.context = context;
|
this.context = context;
|
||||||
this.mediaSourceFactory = mediaSourceFactory;
|
this.mediaSourceFactory = mediaSourceFactory;
|
||||||
@ -850,7 +833,7 @@ public final class Transformer {
|
|||||||
private final Codec.DecoderFactory decoderFactory;
|
private final Codec.DecoderFactory decoderFactory;
|
||||||
private final FallbackListener fallbackListener;
|
private final FallbackListener fallbackListener;
|
||||||
private final AsyncErrorListener asyncErrorListener;
|
private final AsyncErrorListener asyncErrorListener;
|
||||||
private final Transformer.DebugViewProvider debugViewProvider;
|
private final DebugViewProvider debugViewProvider;
|
||||||
|
|
||||||
public TransformerRenderersFactory(
|
public TransformerRenderersFactory(
|
||||||
Context context,
|
Context context,
|
||||||
@ -864,7 +847,7 @@ public final class Transformer {
|
|||||||
Codec.DecoderFactory decoderFactory,
|
Codec.DecoderFactory decoderFactory,
|
||||||
FallbackListener fallbackListener,
|
FallbackListener fallbackListener,
|
||||||
AsyncErrorListener asyncErrorListener,
|
AsyncErrorListener asyncErrorListener,
|
||||||
Transformer.DebugViewProvider debugViewProvider) {
|
DebugViewProvider debugViewProvider) {
|
||||||
this.context = context;
|
this.context = context;
|
||||||
this.muxerWrapper = muxerWrapper;
|
this.muxerWrapper = muxerWrapper;
|
||||||
this.removeAudio = removeAudio;
|
this.removeAudio = removeAudio;
|
||||||
|
@ -39,7 +39,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
|
|||||||
private final ImmutableList<GlEffect> effects;
|
private final ImmutableList<GlEffect> effects;
|
||||||
private final Codec.EncoderFactory encoderFactory;
|
private final Codec.EncoderFactory encoderFactory;
|
||||||
private final Codec.DecoderFactory decoderFactory;
|
private final Codec.DecoderFactory decoderFactory;
|
||||||
private final Transformer.DebugViewProvider debugViewProvider;
|
private final DebugViewProvider debugViewProvider;
|
||||||
private final DecoderInputBuffer decoderInputBuffer;
|
private final DecoderInputBuffer decoderInputBuffer;
|
||||||
|
|
||||||
private @MonotonicNonNull SefSlowMotionFlattener sefSlowMotionFlattener;
|
private @MonotonicNonNull SefSlowMotionFlattener sefSlowMotionFlattener;
|
||||||
@ -55,7 +55,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
|
|||||||
Codec.DecoderFactory decoderFactory,
|
Codec.DecoderFactory decoderFactory,
|
||||||
Transformer.AsyncErrorListener asyncErrorListener,
|
Transformer.AsyncErrorListener asyncErrorListener,
|
||||||
FallbackListener fallbackListener,
|
FallbackListener fallbackListener,
|
||||||
Transformer.DebugViewProvider debugViewProvider) {
|
DebugViewProvider debugViewProvider) {
|
||||||
super(
|
super(
|
||||||
C.TRACK_TYPE_VIDEO,
|
C.TRACK_TYPE_VIDEO,
|
||||||
muxerWrapper,
|
muxerWrapper,
|
||||||
|
@ -60,7 +60,7 @@ import org.checkerframework.dataflow.qual.Pure;
|
|||||||
List<String> allowedOutputMimeTypes,
|
List<String> allowedOutputMimeTypes,
|
||||||
FallbackListener fallbackListener,
|
FallbackListener fallbackListener,
|
||||||
Transformer.AsyncErrorListener asyncErrorListener,
|
Transformer.AsyncErrorListener asyncErrorListener,
|
||||||
Transformer.DebugViewProvider debugViewProvider)
|
DebugViewProvider debugViewProvider)
|
||||||
throws TransformationException {
|
throws TransformationException {
|
||||||
decoderInputBuffer =
|
decoderInputBuffer =
|
||||||
new DecoderInputBuffer(DecoderInputBuffer.BUFFER_REPLACEMENT_MODE_DISABLED);
|
new DecoderInputBuffer(DecoderInputBuffer.BUFFER_REPLACEMENT_MODE_DISABLED);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user