Commit 6d266bfc by kimvde Committed by Ian Baker

Remove asyncErrorListener

PiperOrigin-RevId: 488310077
parent 3f1b1b70
...@@ -92,8 +92,7 @@ import com.google.android.exoplayer2.video.VideoRendererEventListener; ...@@ -92,8 +92,7 @@ import com.google.android.exoplayer2.video.VideoRendererEventListener;
progressState = PROGRESS_STATE_NO_TRANSFORMATION; progressState = PROGRESS_STATE_NO_TRANSFORMATION;
} }
public void start( public void start(MediaItem mediaItem, Listener listener) {
MediaItem mediaItem, Listener listener, Transformer.AsyncErrorListener asyncErrorListener) {
DefaultTrackSelector trackSelector = new DefaultTrackSelector(context); DefaultTrackSelector trackSelector = new DefaultTrackSelector(context);
trackSelector.setParameters( trackSelector.setParameters(
new DefaultTrackSelector.Parameters.Builder(context) new DefaultTrackSelector.Parameters.Builder(context)
...@@ -110,9 +109,7 @@ import com.google.android.exoplayer2.video.VideoRendererEventListener; ...@@ -110,9 +109,7 @@ import com.google.android.exoplayer2.video.VideoRendererEventListener;
DEFAULT_BUFFER_FOR_PLAYBACK_AFTER_REBUFFER_MS / 10) DEFAULT_BUFFER_FOR_PLAYBACK_AFTER_REBUFFER_MS / 10)
.build(); .build();
ExoPlayer.Builder playerBuilder = ExoPlayer.Builder playerBuilder =
new ExoPlayer.Builder( new ExoPlayer.Builder(context, new RenderersFactoryImpl(removeAudio, removeVideo, listener))
context,
new RenderersFactoryImpl(removeAudio, removeVideo, listener, asyncErrorListener))
.setMediaSourceFactory(mediaSourceFactory) .setMediaSourceFactory(mediaSourceFactory)
.setTrackSelector(trackSelector) .setTrackSelector(trackSelector)
.setLoadControl(loadControl) .setLoadControl(loadControl)
...@@ -156,17 +153,14 @@ import com.google.android.exoplayer2.video.VideoRendererEventListener; ...@@ -156,17 +153,14 @@ import com.google.android.exoplayer2.video.VideoRendererEventListener;
private final boolean removeAudio; private final boolean removeAudio;
private final boolean removeVideo; private final boolean removeVideo;
private final ExoPlayerAssetLoader.Listener assetLoaderListener; private final ExoPlayerAssetLoader.Listener assetLoaderListener;
private final Transformer.AsyncErrorListener asyncErrorListener;
public RenderersFactoryImpl( public RenderersFactoryImpl(
boolean removeAudio, boolean removeAudio,
boolean removeVideo, boolean removeVideo,
ExoPlayerAssetLoader.Listener assetLoaderListener, ExoPlayerAssetLoader.Listener assetLoaderListener) {
Transformer.AsyncErrorListener asyncErrorListener) {
this.removeAudio = removeAudio; this.removeAudio = removeAudio;
this.removeVideo = removeVideo; this.removeVideo = removeVideo;
this.assetLoaderListener = assetLoaderListener; this.assetLoaderListener = assetLoaderListener;
this.asyncErrorListener = asyncErrorListener;
mediaClock = new TransformerMediaClock(); mediaClock = new TransformerMediaClock();
} }
...@@ -182,14 +176,12 @@ import com.google.android.exoplayer2.video.VideoRendererEventListener; ...@@ -182,14 +176,12 @@ import com.google.android.exoplayer2.video.VideoRendererEventListener;
int index = 0; int index = 0;
if (!removeAudio) { if (!removeAudio) {
renderers[index] = renderers[index] =
new ExoPlayerAssetLoaderRenderer( new ExoPlayerAssetLoaderRenderer(C.TRACK_TYPE_AUDIO, mediaClock, assetLoaderListener);
C.TRACK_TYPE_AUDIO, mediaClock, assetLoaderListener, asyncErrorListener);
index++; index++;
} }
if (!removeVideo) { if (!removeVideo) {
renderers[index] = renderers[index] =
new ExoPlayerAssetLoaderRenderer( new ExoPlayerAssetLoaderRenderer(C.TRACK_TYPE_VIDEO, mediaClock, assetLoaderListener);
C.TRACK_TYPE_VIDEO, mediaClock, assetLoaderListener, asyncErrorListener);
index++; index++;
} }
return renderers; return renderers;
......
...@@ -40,7 +40,6 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; ...@@ -40,7 +40,6 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
private final TransformerMediaClock mediaClock; private final TransformerMediaClock mediaClock;
private final ExoPlayerAssetLoader.Listener assetLoaderListener; private final ExoPlayerAssetLoader.Listener assetLoaderListener;
private final Transformer.AsyncErrorListener asyncErrorListener;
private final DecoderInputBuffer decoderInputBuffer; private final DecoderInputBuffer decoderInputBuffer;
private boolean isTransformationRunning; private boolean isTransformationRunning;
...@@ -51,12 +50,10 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; ...@@ -51,12 +50,10 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
public ExoPlayerAssetLoaderRenderer( public ExoPlayerAssetLoaderRenderer(
int trackType, int trackType,
TransformerMediaClock mediaClock, TransformerMediaClock mediaClock,
ExoPlayerAssetLoader.Listener assetLoaderListener, ExoPlayerAssetLoader.Listener assetLoaderListener) {
Transformer.AsyncErrorListener asyncErrorListener) {
super(trackType); super(trackType);
this.mediaClock = mediaClock; this.mediaClock = mediaClock;
this.assetLoaderListener = assetLoaderListener; this.assetLoaderListener = assetLoaderListener;
this.asyncErrorListener = asyncErrorListener;
decoderInputBuffer = new DecoderInputBuffer(BUFFER_REPLACEMENT_MODE_DISABLED); decoderInputBuffer = new DecoderInputBuffer(BUFFER_REPLACEMENT_MODE_DISABLED);
} }
...@@ -104,7 +101,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; ...@@ -104,7 +101,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
while (samplePipeline.processData() || feedPipelineFromInput()) {} while (samplePipeline.processData() || feedPipelineFromInput()) {}
} catch (TransformationException e) { } catch (TransformationException e) {
isTransformationRunning = false; isTransformationRunning = false;
asyncErrorListener.onTransformationError(e); assetLoaderListener.onError(e);
} }
} }
......
...@@ -28,6 +28,7 @@ import android.util.SparseLongArray; ...@@ -28,6 +28,7 @@ import android.util.SparseLongArray;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.Format; import com.google.android.exoplayer2.Format;
import com.google.android.exoplayer2.util.Consumer;
import com.google.android.exoplayer2.util.MimeTypes; import com.google.android.exoplayer2.util.MimeTypes;
import com.google.android.exoplayer2.util.Util; import com.google.android.exoplayer2.util.Util;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;
...@@ -57,7 +58,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; ...@@ -57,7 +58,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
@Nullable private final String outputPath; @Nullable private final String outputPath;
@Nullable private final ParcelFileDescriptor outputParcelFileDescriptor; @Nullable private final ParcelFileDescriptor outputParcelFileDescriptor;
private final Muxer.Factory muxerFactory; private final Muxer.Factory muxerFactory;
private final Transformer.AsyncErrorListener asyncErrorListener; private final Consumer<TransformationException> errorConsumer;
private final SparseIntArray trackTypeToIndex; private final SparseIntArray trackTypeToIndex;
private final SparseIntArray trackTypeToSampleCount; private final SparseIntArray trackTypeToSampleCount;
private final SparseLongArray trackTypeToTimeUs; private final SparseLongArray trackTypeToTimeUs;
...@@ -77,7 +78,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; ...@@ -77,7 +78,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
@Nullable String outputPath, @Nullable String outputPath,
@Nullable ParcelFileDescriptor outputParcelFileDescriptor, @Nullable ParcelFileDescriptor outputParcelFileDescriptor,
Muxer.Factory muxerFactory, Muxer.Factory muxerFactory,
Transformer.AsyncErrorListener asyncErrorListener) { Consumer<TransformationException> errorConsumer) {
if (outputPath == null && outputParcelFileDescriptor == null) { if (outputPath == null && outputParcelFileDescriptor == null) {
throw new NullPointerException("Both output path and ParcelFileDescriptor are null"); throw new NullPointerException("Both output path and ParcelFileDescriptor are null");
} }
...@@ -85,7 +86,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; ...@@ -85,7 +86,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
this.outputPath = outputPath; this.outputPath = outputPath;
this.outputParcelFileDescriptor = outputParcelFileDescriptor; this.outputParcelFileDescriptor = outputParcelFileDescriptor;
this.muxerFactory = muxerFactory; this.muxerFactory = muxerFactory;
this.asyncErrorListener = asyncErrorListener; this.errorConsumer = errorConsumer;
trackTypeToIndex = new SparseIntArray(); trackTypeToIndex = new SparseIntArray();
trackTypeToSampleCount = new SparseIntArray(); trackTypeToSampleCount = new SparseIntArray();
...@@ -306,7 +307,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; ...@@ -306,7 +307,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
return; return;
} }
isAborted = true; isAborted = true;
asyncErrorListener.onTransformationError( errorConsumer.accept(
TransformationException.createForMuxer( TransformationException.createForMuxer(
new IllegalStateException( new IllegalStateException(
"No output sample written in the last " "No output sample written in the last "
......
...@@ -713,22 +713,19 @@ public final class Transformer { ...@@ -713,22 +713,19 @@ public final class Transformer {
throw new IllegalStateException("There is already a transformation in progress."); throw new IllegalStateException("There is already a transformation in progress.");
} }
transformationInProgress = true; transformationInProgress = true;
ComponentListener componentListener = new ComponentListener(mediaItem, looper); TransformerInternalListener transformerInternalListener =
new TransformerInternalListener(mediaItem, looper);
MuxerWrapper muxerWrapper = MuxerWrapper muxerWrapper =
new MuxerWrapper( new MuxerWrapper(
outputPath, outputPath,
outputParcelFileDescriptor, outputParcelFileDescriptor,
muxerFactory, muxerFactory,
/* asyncErrorListener= */ componentListener); /* errorConsumer= */ transformerInternalListener::onTransformationError);
this.muxerWrapper = muxerWrapper; this.muxerWrapper = muxerWrapper;
FallbackListener fallbackListener = FallbackListener fallbackListener =
new FallbackListener(mediaItem, listeners, transformationRequest); new FallbackListener(mediaItem, listeners, transformationRequest);
transformerInternal.start( transformerInternal.start(
mediaItem, mediaItem, muxerWrapper, transformerInternalListener, fallbackListener);
muxerWrapper,
/* listener= */ componentListener,
fallbackListener,
/* asyncErrorListener= */ componentListener);
} }
/** /**
...@@ -822,23 +819,12 @@ public final class Transformer { ...@@ -822,23 +819,12 @@ public final class Transformer {
return fileSize; return fileSize;
} }
/** Listener for exceptions that occur during a transformation. */ private final class TransformerInternalListener implements TransformerInternal.Listener {
/* package */ interface AsyncErrorListener {
/**
* Called when a {@link TransformationException} occurs.
*
* <p>Can be called from any thread.
*/
void onTransformationError(TransformationException exception);
}
private final class ComponentListener
implements TransformerInternal.Listener, AsyncErrorListener {
private final MediaItem mediaItem; private final MediaItem mediaItem;
private final Handler handler; private final Handler handler;
public ComponentListener(MediaItem mediaItem, Looper looper) { public TransformerInternalListener(MediaItem mediaItem, Looper looper) {
this.mediaItem = mediaItem; this.mediaItem = mediaItem;
handler = new Handler(looper); handler = new Handler(looper);
} }
......
...@@ -80,12 +80,10 @@ import com.google.common.collect.ImmutableList; ...@@ -80,12 +80,10 @@ import com.google.common.collect.ImmutableList;
MediaItem mediaItem, MediaItem mediaItem,
MuxerWrapper muxerWrapper, MuxerWrapper muxerWrapper,
Listener listener, Listener listener,
FallbackListener fallbackListener, FallbackListener fallbackListener) {
Transformer.AsyncErrorListener asyncErrorListener) { AssetLoaderListener assetLoaderListener =
ComponentListener componentListener = new AssetLoaderListener(mediaItem, muxerWrapper, listener, fallbackListener);
new ComponentListener( exoPlayerAssetLoader.start(mediaItem, assetLoaderListener);
mediaItem, muxerWrapper, listener, fallbackListener, asyncErrorListener);
exoPlayerAssetLoader.start(mediaItem, componentListener, asyncErrorListener);
} }
public @Transformer.ProgressState int getProgress(ProgressHolder progressHolder) { public @Transformer.ProgressState int getProgress(ProgressHolder progressHolder) {
...@@ -96,27 +94,24 @@ import com.google.common.collect.ImmutableList; ...@@ -96,27 +94,24 @@ import com.google.common.collect.ImmutableList;
exoPlayerAssetLoader.release(); exoPlayerAssetLoader.release();
} }
private class ComponentListener implements ExoPlayerAssetLoader.Listener { private class AssetLoaderListener implements ExoPlayerAssetLoader.Listener {
private final MediaItem mediaItem; private final MediaItem mediaItem;
private final MuxerWrapper muxerWrapper; private final MuxerWrapper muxerWrapper;
private final TransformerInternal.Listener listener; private final TransformerInternal.Listener listener;
private final FallbackListener fallbackListener; private final FallbackListener fallbackListener;
private final Transformer.AsyncErrorListener asyncErrorListener;
private volatile boolean trackRegistered; private volatile boolean trackRegistered;
public ComponentListener( public AssetLoaderListener(
MediaItem mediaItem, MediaItem mediaItem,
MuxerWrapper muxerWrapper, MuxerWrapper muxerWrapper,
Listener listener, Listener listener,
FallbackListener fallbackListener, FallbackListener fallbackListener) {
Transformer.AsyncErrorListener asyncErrorListener) {
this.mediaItem = mediaItem; this.mediaItem = mediaItem;
this.muxerWrapper = muxerWrapper; this.muxerWrapper = muxerWrapper;
this.listener = listener; this.listener = listener;
this.fallbackListener = fallbackListener; this.fallbackListener = fallbackListener;
this.asyncErrorListener = asyncErrorListener;
} }
@Override @Override
...@@ -142,10 +137,15 @@ import com.google.common.collect.ImmutableList; ...@@ -142,10 +137,15 @@ import com.google.common.collect.ImmutableList;
@Override @Override
public void onError(Exception e) { public void onError(Exception e) {
TransformationException transformationException = TransformationException transformationException;
e instanceof PlaybackException if (e instanceof TransformationException) {
? TransformationException.createForPlaybackException((PlaybackException) e) transformationException = (TransformationException) e;
: TransformationException.createForUnexpected(e); } else if (e instanceof PlaybackException) {
transformationException =
TransformationException.createForPlaybackException((PlaybackException) e);
} else {
transformationException = TransformationException.createForUnexpected(e);
}
listener.onTransformationError(transformationException); listener.onTransformationError(transformationException);
} }
...@@ -181,7 +181,7 @@ import com.google.common.collect.ImmutableList; ...@@ -181,7 +181,7 @@ import com.google.common.collect.ImmutableList;
encoderFactory, encoderFactory,
muxerWrapper, muxerWrapper,
fallbackListener, fallbackListener,
asyncErrorListener, listener::onTransformationError,
debugViewProvider); debugViewProvider);
} else { } else {
return new PassthroughSamplePipeline( return new PassthroughSamplePipeline(
......
...@@ -31,6 +31,7 @@ import com.google.android.exoplayer2.Format; ...@@ -31,6 +31,7 @@ import com.google.android.exoplayer2.Format;
import com.google.android.exoplayer2.decoder.DecoderInputBuffer; import com.google.android.exoplayer2.decoder.DecoderInputBuffer;
import com.google.android.exoplayer2.effect.Presentation; import com.google.android.exoplayer2.effect.Presentation;
import com.google.android.exoplayer2.effect.ScaleToFitTransformation; import com.google.android.exoplayer2.effect.ScaleToFitTransformation;
import com.google.android.exoplayer2.util.Consumer;
import com.google.android.exoplayer2.util.DebugViewProvider; import com.google.android.exoplayer2.util.DebugViewProvider;
import com.google.android.exoplayer2.util.Effect; import com.google.android.exoplayer2.util.Effect;
import com.google.android.exoplayer2.util.FrameInfo; import com.google.android.exoplayer2.util.FrameInfo;
...@@ -75,7 +76,7 @@ import org.checkerframework.dataflow.qual.Pure; ...@@ -75,7 +76,7 @@ import org.checkerframework.dataflow.qual.Pure;
Codec.EncoderFactory encoderFactory, Codec.EncoderFactory encoderFactory,
MuxerWrapper muxerWrapper, MuxerWrapper muxerWrapper,
FallbackListener fallbackListener, FallbackListener fallbackListener,
Transformer.AsyncErrorListener asyncErrorListener, Consumer<TransformationException> errorConsumer,
DebugViewProvider debugViewProvider) DebugViewProvider debugViewProvider)
throws TransformationException { throws TransformationException {
super( super(
...@@ -154,7 +155,7 @@ import org.checkerframework.dataflow.qual.Pure; ...@@ -154,7 +155,7 @@ import org.checkerframework.dataflow.qual.Pure;
checkNotNull(frameProcessor) checkNotNull(frameProcessor)
.setOutputSurfaceInfo(encoderWrapper.getSurfaceInfo(width, height)); .setOutputSurfaceInfo(encoderWrapper.getSurfaceInfo(width, height));
} catch (TransformationException exception) { } catch (TransformationException exception) {
asyncErrorListener.onTransformationError(exception); errorConsumer.accept(exception);
} }
} }
...@@ -165,7 +166,7 @@ import org.checkerframework.dataflow.qual.Pure; ...@@ -165,7 +166,7 @@ import org.checkerframework.dataflow.qual.Pure;
@Override @Override
public void onFrameProcessingError(FrameProcessingException exception) { public void onFrameProcessingError(FrameProcessingException exception) {
asyncErrorListener.onTransformationError( errorConsumer.accept(
TransformationException.createForFrameProcessingException( TransformationException.createForFrameProcessingException(
exception, TransformationException.ERROR_CODE_FRAME_PROCESSING_FAILED)); exception, TransformationException.ERROR_CODE_FRAME_PROCESSING_FAILED));
} }
...@@ -175,7 +176,7 @@ import org.checkerframework.dataflow.qual.Pure; ...@@ -175,7 +176,7 @@ import org.checkerframework.dataflow.qual.Pure;
try { try {
encoderWrapper.signalEndOfInputStream(); encoderWrapper.signalEndOfInputStream();
} catch (TransformationException exception) { } catch (TransformationException exception) {
asyncErrorListener.onTransformationError(exception); errorConsumer.accept(exception);
} }
} }
}, },
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment