diff --git a/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/ExoPlayerAssetLoader.java b/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/ExoPlayerAssetLoader.java index 46e71b084c..94a0793bd7 100644 --- a/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/ExoPlayerAssetLoader.java +++ b/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/ExoPlayerAssetLoader.java @@ -49,7 +49,6 @@ import com.google.android.exoplayer2.text.TextOutput; import com.google.android.exoplayer2.trackselection.DefaultTrackSelector; import com.google.android.exoplayer2.util.Clock; import com.google.android.exoplayer2.video.VideoRendererEventListener; -import org.checkerframework.checker.nullness.qual.MonotonicNonNull; /* package */ final class ExoPlayerAssetLoader { @@ -57,6 +56,8 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; void onTrackRegistered(); + void onAllTracksRegistered(); + SamplePipeline onTrackAdded(Format format, long streamStartPositionUs, long streamOffsetUs) throws TransformationException; @@ -72,7 +73,6 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; private final Looper looper; private final Clock clock; - private @MonotonicNonNull MuxerWrapper muxerWrapper; @Nullable private ExoPlayer player; private @Transformer.ProgressState int progressState; @@ -93,19 +93,14 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; } public void start( - MediaItem mediaItem, - MuxerWrapper muxerWrapper, - Listener listener, - Transformer.AsyncErrorListener asyncErrorListener) { - this.muxerWrapper = muxerWrapper; - + MediaItem mediaItem, Listener listener, Transformer.AsyncErrorListener asyncErrorListener) { DefaultTrackSelector trackSelector = new DefaultTrackSelector(context); trackSelector.setParameters( new DefaultTrackSelector.Parameters.Builder(context) .setForceHighestSupportedBitrate(true) .build()); // Arbitrarily decrease buffers for playback so that samples start being sent earlier to the - // muxer (rebuffers are less problematic for the transformation use case). + // pipelines (rebuffers are less problematic for the transformation use case). DefaultLoadControl loadControl = new DefaultLoadControl.Builder() .setBufferDurationsMs( @@ -238,9 +233,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; @Override public void onTracksChanged(Tracks tracks) { - if (checkNotNull(muxerWrapper).getTrackCount() == 0) { - listener.onError(new IllegalStateException("The output does not contain any tracks.")); - } + listener.onAllTracksRegistered(); } @Override diff --git a/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/MuxerWrapper.java b/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/MuxerWrapper.java index cde1f20de0..71f86747c5 100644 --- a/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/MuxerWrapper.java +++ b/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/MuxerWrapper.java @@ -235,11 +235,6 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; } } - /** Returns the number of {@link #registerTrack() registered} tracks. */ - public int getTrackCount() { - return trackCount; - } - /** * Returns the average bitrate of data written to the track of the provided {@code trackType}, or * {@link C#RATE_UNSET_INT} if there is no track data. diff --git a/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/TransformerInternal.java b/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/TransformerInternal.java index 3d0c03f12a..2c1e82f2ab 100644 --- a/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/TransformerInternal.java +++ b/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/TransformerInternal.java @@ -85,7 +85,7 @@ import com.google.common.collect.ImmutableList; ComponentListener componentListener = new ComponentListener( mediaItem, muxerWrapper, listener, fallbackListener, asyncErrorListener); - exoPlayerAssetLoader.start(mediaItem, muxerWrapper, componentListener, asyncErrorListener); + exoPlayerAssetLoader.start(mediaItem, componentListener, asyncErrorListener); } public @Transformer.ProgressState int getProgress(ProgressHolder progressHolder) { @@ -104,6 +104,8 @@ import com.google.common.collect.ImmutableList; private final FallbackListener fallbackListener; private final Transformer.AsyncErrorListener asyncErrorListener; + private volatile boolean trackRegistered; + public ComponentListener( MediaItem mediaItem, MuxerWrapper muxerWrapper, @@ -119,10 +121,18 @@ import com.google.common.collect.ImmutableList; @Override public void onTrackRegistered() { + trackRegistered = true; muxerWrapper.registerTrack(); fallbackListener.registerTrack(); } + @Override + public void onAllTracksRegistered() { + if (!trackRegistered) { + onError(new IllegalStateException("The output does not contain any tracks.")); + } + } + @Override public SamplePipeline onTrackAdded( Format format, long streamStartPositionUs, long streamOffsetUs)