diff --git a/extensions/flac/src/main/java/com/google/android/exoplayer/ext/flac/LibflacAudioTrackRenderer.java b/extensions/flac/src/main/java/com/google/android/exoplayer/ext/flac/LibflacAudioTrackRenderer.java index e007c40596..3d3410ba67 100644 --- a/extensions/flac/src/main/java/com/google/android/exoplayer/ext/flac/LibflacAudioTrackRenderer.java +++ b/extensions/flac/src/main/java/com/google/android/exoplayer/ext/flac/LibflacAudioTrackRenderer.java @@ -90,7 +90,6 @@ public final class LibflacAudioTrackRenderer extends SampleSourceTrackRenderer private boolean allowPositionDiscontinuity; private boolean inputStreamEnded; private boolean outputStreamEnded; - private boolean sourceIsReady; private final AudioTrack audioTrack; private int audioSessionId; @@ -131,12 +130,10 @@ public final class LibflacAudioTrackRenderer extends SampleSourceTrackRenderer } @Override - protected void render(long positionUs, long elapsedRealtimeUs, boolean sourceIsReady) - throws ExoPlaybackException { + protected void render(long positionUs, long elapsedRealtimeUs) throws ExoPlaybackException { if (outputStreamEnded) { return; } - this.sourceIsReady = sourceIsReady; // Try and read a format if we don't have one already. if (format == null && !readFormat()) { @@ -275,7 +272,7 @@ public final class LibflacAudioTrackRenderer extends SampleSourceTrackRenderer @Override protected boolean isReady() { return audioTrack.hasPendingData() - || (format != null && (sourceIsReady || outputBuffer != null)); + || (format != null && (isSourceReady() || outputBuffer != null)); } @Override @@ -296,7 +293,6 @@ public final class LibflacAudioTrackRenderer extends SampleSourceTrackRenderer allowPositionDiscontinuity = true; inputStreamEnded = false; outputStreamEnded = false; - sourceIsReady = false; if (decoder != null) { flushDecoder(); } diff --git a/extensions/opus/src/main/java/com/google/android/exoplayer/ext/opus/LibopusAudioTrackRenderer.java b/extensions/opus/src/main/java/com/google/android/exoplayer/ext/opus/LibopusAudioTrackRenderer.java index e30a502b85..d34c24a852 100644 --- a/extensions/opus/src/main/java/com/google/android/exoplayer/ext/opus/LibopusAudioTrackRenderer.java +++ b/extensions/opus/src/main/java/com/google/android/exoplayer/ext/opus/LibopusAudioTrackRenderer.java @@ -92,7 +92,6 @@ public final class LibopusAudioTrackRenderer extends SampleSourceTrackRenderer private boolean allowPositionDiscontinuity; private boolean inputStreamEnded; private boolean outputStreamEnded; - private boolean sourceIsReady; private int audioSessionId; @@ -139,12 +138,10 @@ public final class LibopusAudioTrackRenderer extends SampleSourceTrackRenderer } @Override - protected void render(long positionUs, long elapsedRealtimeUs, boolean sourceIsReady) - throws ExoPlaybackException { + protected void render(long positionUs, long elapsedRealtimeUs) throws ExoPlaybackException { if (outputStreamEnded) { return; } - this.sourceIsReady = sourceIsReady; // Try and read a format if we don't have one already. if (format == null && !readFormat()) { @@ -287,7 +284,7 @@ public final class LibopusAudioTrackRenderer extends SampleSourceTrackRenderer @Override protected boolean isReady() { return audioTrack.hasPendingData() - || (format != null && (sourceIsReady || outputBuffer != null)); + || (format != null && (isSourceReady() || outputBuffer != null)); } @Override @@ -308,7 +305,6 @@ public final class LibopusAudioTrackRenderer extends SampleSourceTrackRenderer allowPositionDiscontinuity = true; inputStreamEnded = false; outputStreamEnded = false; - sourceIsReady = false; if (decoder != null) { flushDecoder(); } diff --git a/library/src/main/java/com/google/android/exoplayer/MediaCodecTrackRenderer.java b/library/src/main/java/com/google/android/exoplayer/MediaCodecTrackRenderer.java index 18ed854e60..c4224f56b8 100644 --- a/library/src/main/java/com/google/android/exoplayer/MediaCodecTrackRenderer.java +++ b/library/src/main/java/com/google/android/exoplayer/MediaCodecTrackRenderer.java @@ -136,23 +136,6 @@ public abstract class MediaCodecTrackRenderer extends SampleSourceTrackRenderer } - /** - * Value returned by {@link #getSourceState()} when the source is not ready. - */ - protected static final int SOURCE_STATE_NOT_READY = 0; - /** - * Value returned by {@link #getSourceState()} when the source is ready and we're able to read - * from it. - */ - protected static final int SOURCE_STATE_READY = 1; - /** - * Value returned by {@link #getSourceState()} when the source is ready but we might not be able - * to read from it. We transition to this state when an attempt to read a sample fails despite the - * source reporting that samples are available. This can occur when the next sample to be provided - * by the source is for another renderer. - */ - protected static final int SOURCE_STATE_READY_READ_MAY_FAIL = 2; - /** * If the {@link MediaCodec} is hotswapped (i.e. replaced during playback), this is the period of * time during which {@link #isReady()} will report true regardless of whether the new codec has @@ -227,7 +210,6 @@ public abstract class MediaCodecTrackRenderer extends SampleSourceTrackRenderer private boolean codecReceivedBuffers; private boolean codecReceivedEos; - private int sourceState; private boolean inputStreamEnded; private boolean outputStreamEnded; private boolean waitingForKeys; @@ -462,7 +444,6 @@ public abstract class MediaCodecTrackRenderer extends SampleSourceTrackRenderer @Override protected void reset(long positionUs) throws ExoPlaybackException { - sourceState = SOURCE_STATE_NOT_READY; inputStreamEnded = false; outputStreamEnded = false; if (codec != null) { @@ -481,11 +462,7 @@ public abstract class MediaCodecTrackRenderer extends SampleSourceTrackRenderer } @Override - protected void render(long positionUs, long elapsedRealtimeUs, boolean sourceIsReady) - throws ExoPlaybackException { - sourceState = sourceIsReady - ? (sourceState == SOURCE_STATE_NOT_READY ? SOURCE_STATE_READY : sourceState) - : SOURCE_STATE_NOT_READY; + protected void render(long positionUs, long elapsedRealtimeUs) throws ExoPlaybackException { if (format == null) { readFormat(); } @@ -493,9 +470,7 @@ public abstract class MediaCodecTrackRenderer extends SampleSourceTrackRenderer if (codec != null) { TraceUtil.beginSection("drainAndFeed"); while (drainOutputBuffer(positionUs, elapsedRealtimeUs)) {} - if (feedInputBuffer(true)) { - while (feedInputBuffer(false)) {} - } + while (feedInputBuffer()) {} TraceUtil.endSection(); } codecCounters.ensureUpdated(); @@ -536,12 +511,10 @@ public abstract class MediaCodecTrackRenderer extends SampleSourceTrackRenderer } /** - * @param firstFeed True if this is the first call to this method from the current invocation of - * {@link #render(long, long)}. False otherwise. * @return True if it may be possible to feed more input data. False otherwise. * @throws ExoPlaybackException If an error occurs feeding the input buffer. */ - private boolean feedInputBuffer(boolean firstFeed) throws ExoPlaybackException { + private boolean feedInputBuffer() throws ExoPlaybackException { if (inputStreamEnded || codecReinitializationState == REINITIALIZATION_STATE_WAIT_END_OF_STREAM) { // The input stream has ended, or we need to re-initialize the codec but are still waiting @@ -587,9 +560,6 @@ public abstract class MediaCodecTrackRenderer extends SampleSourceTrackRenderer codecReconfigurationState = RECONFIGURATION_STATE_QUEUE_PENDING; } result = readSource(formatHolder, buffer); - if (firstFeed && sourceState == SOURCE_STATE_READY && result == TrackStream.NOTHING_READ) { - sourceState = SOURCE_STATE_READY_READ_MAY_FAIL; - } } if (result == TrackStream.NOTHING_READ) { @@ -807,17 +777,7 @@ public abstract class MediaCodecTrackRenderer extends SampleSourceTrackRenderer @Override protected boolean isReady() { return format != null && !waitingForKeys - && (sourceState != SOURCE_STATE_NOT_READY || outputIndex >= 0 || isWithinHotswapPeriod()); - } - - /** - * Gets the source state. - * - * @return One of {@link #SOURCE_STATE_NOT_READY}, {@link #SOURCE_STATE_READY} and - * {@link #SOURCE_STATE_READY_READ_MAY_FAIL}. - */ - protected final int getSourceState() { - return sourceState; + && (isSourceReady() || outputIndex >= 0 || isWithinHotswapPeriod()); } private boolean isWithinHotswapPeriod() { diff --git a/library/src/main/java/com/google/android/exoplayer/MediaCodecVideoTrackRenderer.java b/library/src/main/java/com/google/android/exoplayer/MediaCodecVideoTrackRenderer.java index 445fc2bda9..eeda1b3a3b 100644 --- a/library/src/main/java/com/google/android/exoplayer/MediaCodecVideoTrackRenderer.java +++ b/library/src/main/java/com/google/android/exoplayer/MediaCodecVideoTrackRenderer.java @@ -293,8 +293,7 @@ public class MediaCodecVideoTrackRenderer extends MediaCodecTrackRenderer { @Override protected boolean isReady() { - if (super.isReady() - && (renderedFirstFrame || getSourceState() == SOURCE_STATE_READY_READ_MAY_FAIL)) { + if (renderedFirstFrame && super.isReady()) { // Ready. If we were joining then we've now joined, so clear the joining deadline. joiningDeadlineUs = -1; return true; diff --git a/library/src/main/java/com/google/android/exoplayer/SampleSourceTrackRenderer.java b/library/src/main/java/com/google/android/exoplayer/SampleSourceTrackRenderer.java index 5ba194766c..e105dbd9b1 100644 --- a/library/src/main/java/com/google/android/exoplayer/SampleSourceTrackRenderer.java +++ b/library/src/main/java/com/google/android/exoplayer/SampleSourceTrackRenderer.java @@ -43,12 +43,6 @@ public abstract class SampleSourceTrackRenderer extends TrackRenderer { } } - @Override - protected final void render(long positionUs, long elapsedRealtimeUs) - throws ExoPlaybackException { - render(positionUs, elapsedRealtimeUs, trackStream.isReady()); - } - @Override protected final void maybeThrowError() throws IOException { trackStream.maybeThrowError(); @@ -70,6 +64,15 @@ public abstract class SampleSourceTrackRenderer extends TrackRenderer { return trackStream.readData(formatHolder, buffer); } + /** + * Returns whether the upstream source is ready. + * + * @return True if the source is ready. False otherwise. + */ + protected final boolean isSourceReady() { + return trackStream.isReady(); + } + // Abstract methods. /** @@ -80,17 +83,4 @@ public abstract class SampleSourceTrackRenderer extends TrackRenderer { */ protected abstract void reset(long positionUs) throws ExoPlaybackException; - /** - * Called by {@link #render(long, long)}. - * - * @param positionUs The current media time in microseconds, measured at the start of the - * current iteration of the rendering loop. - * @param elapsedRealtimeUs {@link android.os.SystemClock#elapsedRealtime()} in microseconds, - * measured at the start of the current iteration of the rendering loop. - * @param sourceIsReady The result of the most recent call to {@link TrackStream#isReady()}. - * @throws ExoPlaybackException If an error occurs. - */ - protected abstract void render(long positionUs, long elapsedRealtimeUs, boolean sourceIsReady) - throws ExoPlaybackException; - } diff --git a/library/src/main/java/com/google/android/exoplayer/metadata/MetadataTrackRenderer.java b/library/src/main/java/com/google/android/exoplayer/metadata/MetadataTrackRenderer.java index 9b73f61e02..4a0e51eee9 100644 --- a/library/src/main/java/com/google/android/exoplayer/metadata/MetadataTrackRenderer.java +++ b/library/src/main/java/com/google/android/exoplayer/metadata/MetadataTrackRenderer.java @@ -98,8 +98,7 @@ public final class MetadataTrackRenderer extends SampleSourceTrackRenderer im } @Override - protected void render(long positionUs, long elapsedRealtimeUs, boolean sourceIsReady) - throws ExoPlaybackException { + protected void render(long positionUs, long elapsedRealtimeUs) throws ExoPlaybackException { if (!inputStreamEnded && pendingMetadata == null) { buffer.clear(); int result = readSource(formatHolder, buffer); diff --git a/library/src/main/java/com/google/android/exoplayer/text/TextTrackRenderer.java b/library/src/main/java/com/google/android/exoplayer/text/TextTrackRenderer.java index 8d8a2b75fb..bfffba0ee5 100644 --- a/library/src/main/java/com/google/android/exoplayer/text/TextTrackRenderer.java +++ b/library/src/main/java/com/google/android/exoplayer/text/TextTrackRenderer.java @@ -126,8 +126,7 @@ public final class TextTrackRenderer extends SampleSourceTrackRenderer implement } @Override - protected void render(long positionUs, long elapsedRealtimeUs, boolean sourceIsReady) - throws ExoPlaybackException { + protected void render(long positionUs, long elapsedRealtimeUs) throws ExoPlaybackException { if (outputStreamEnded) { return; } diff --git a/library/src/main/java/com/google/android/exoplayer/text/eia608/Eia608TrackRenderer.java b/library/src/main/java/com/google/android/exoplayer/text/eia608/Eia608TrackRenderer.java index a9becb6932..ee83c58b34 100644 --- a/library/src/main/java/com/google/android/exoplayer/text/eia608/Eia608TrackRenderer.java +++ b/library/src/main/java/com/google/android/exoplayer/text/eia608/Eia608TrackRenderer.java @@ -104,8 +104,7 @@ public final class Eia608TrackRenderer extends SampleSourceTrackRenderer impleme } @Override - protected void render(long positionUs, long elapsedRealtimeUs, boolean sourceIsReady) - throws ExoPlaybackException { + protected void render(long positionUs, long elapsedRealtimeUs) throws ExoPlaybackException { if (isBufferPending()) { maybeParsePendingBuffer(positionUs); }