diff --git a/extensions/vp9/src/main/java/com/google/android/exoplayer/ext/vp9/LibvpxVideoTrackRenderer.java b/extensions/vp9/src/main/java/com/google/android/exoplayer/ext/vp9/LibvpxVideoTrackRenderer.java index 38fe324717..8a10147d04 100644 --- a/extensions/vp9/src/main/java/com/google/android/exoplayer/ext/vp9/LibvpxVideoTrackRenderer.java +++ b/extensions/vp9/src/main/java/com/google/android/exoplayer/ext/vp9/LibvpxVideoTrackRenderer.java @@ -326,7 +326,13 @@ public final class LibvpxVideoTrackRenderer extends TrackRenderer { } @Override - protected void reset(long positionUs) { + protected void onEnabled(boolean joining) throws ExoPlaybackException { + codecCounters.reset(); + eventDispatcher.enabled(codecCounters); + } + + @Override + protected void onReset(long positionUs) { inputStreamEnded = false; outputStreamEnded = false; renderedFirstFrame = false; @@ -336,12 +342,6 @@ public final class LibvpxVideoTrackRenderer extends TrackRenderer { } } - @Override - protected void onEnabled(boolean joining) throws ExoPlaybackException { - codecCounters.reset(); - eventDispatcher.enabled(codecCounters); - } - @Override protected void onStarted() { droppedFrameCount = 0; diff --git a/library/src/main/java/com/google/android/exoplayer/MediaCodecAudioTrackRenderer.java b/library/src/main/java/com/google/android/exoplayer/MediaCodecAudioTrackRenderer.java index dbd02e8eed..fc6f0c87ec 100644 --- a/library/src/main/java/com/google/android/exoplayer/MediaCodecAudioTrackRenderer.java +++ b/library/src/main/java/com/google/android/exoplayer/MediaCodecAudioTrackRenderer.java @@ -261,6 +261,14 @@ public class MediaCodecAudioTrackRenderer extends MediaCodecTrackRenderer implem super.onEnabled(joining); } + @Override + protected void onReset(long positionUs) throws ExoPlaybackException { + super.onReset(positionUs); + audioTrack.reset(); + currentPositionUs = positionUs; + allowPositionDiscontinuity = true; + } + @Override protected void onStarted() { super.onStarted(); @@ -305,14 +313,6 @@ public class MediaCodecAudioTrackRenderer extends MediaCodecTrackRenderer implem return currentPositionUs; } - @Override - protected void reset(long positionUs) throws ExoPlaybackException { - super.reset(positionUs); - audioTrack.reset(); - currentPositionUs = positionUs; - allowPositionDiscontinuity = true; - } - @Override protected boolean processOutputBuffer(long positionUs, long elapsedRealtimeUs, MediaCodec codec, ByteBuffer buffer, int bufferIndex, int bufferFlags, long bufferPresentationTimeUs, 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 a9dcffae1b..b48c5a8bfd 100644 --- a/library/src/main/java/com/google/android/exoplayer/MediaCodecTrackRenderer.java +++ b/library/src/main/java/com/google/android/exoplayer/MediaCodecTrackRenderer.java @@ -340,6 +340,15 @@ public abstract class MediaCodecTrackRenderer extends TrackRenderer { return codec == null && format != null; } + @Override + protected void onReset(long positionUs) throws ExoPlaybackException { + inputStreamEnded = false; + outputStreamEnded = false; + if (codec != null) { + flushCodec(); + } + } + @Override protected void onDisabled() { format = null; @@ -391,15 +400,6 @@ public abstract class MediaCodecTrackRenderer extends TrackRenderer { } } - @Override - protected void reset(long positionUs) throws ExoPlaybackException { - inputStreamEnded = false; - outputStreamEnded = false; - if (codec != null) { - flushCodec(); - } - } - @Override protected void onStarted() { // Do nothing. Overridden to remove throws clause. 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 f3066e9847..3860a09390 100644 --- a/library/src/main/java/com/google/android/exoplayer/MediaCodecVideoTrackRenderer.java +++ b/library/src/main/java/com/google/android/exoplayer/MediaCodecVideoTrackRenderer.java @@ -236,8 +236,8 @@ public class MediaCodecVideoTrackRenderer extends MediaCodecTrackRenderer { } @Override - protected void reset(long positionUs) throws ExoPlaybackException { - super.reset(positionUs); + protected void onReset(long positionUs) throws ExoPlaybackException { + super.onReset(positionUs); renderedFirstFrame = false; consecutiveDroppedFrameCount = 0; joiningDeadlineMs = -1; diff --git a/library/src/main/java/com/google/android/exoplayer/TrackRenderer.java b/library/src/main/java/com/google/android/exoplayer/TrackRenderer.java index e31f77ed93..b68c5a88bf 100644 --- a/library/src/main/java/com/google/android/exoplayer/TrackRenderer.java +++ b/library/src/main/java/com/google/android/exoplayer/TrackRenderer.java @@ -216,6 +216,28 @@ public abstract class TrackRenderer implements ExoPlayerComponent { // Do nothing. } + /** + * Called when a reset is encountered, and also when the renderer is enabled. + * + * @param positionUs The playback position in microseconds. + * @throws ExoPlaybackException If an error occurs handling the reset. + */ + /* package */ final void reset(long positionUs) throws ExoPlaybackException { + onReset(positionUs); + } + + /** + * Called when a reset is encountered, and also when the renderer is enabled. + *

+ * The default implementation is a no-op. + * + * @param positionUs The playback position in microseconds. + * @throws ExoPlaybackException If an error occurs handling the reset. + */ + protected void onReset(long positionUs) throws ExoPlaybackException { + // Do nothing. + } + /** * Starts the renderer, meaning that calls to {@link #render(long, long)} will cause media to be * rendered. @@ -348,17 +370,6 @@ public abstract class TrackRenderer implements ExoPlayerComponent { */ protected abstract int supportsFormat(Format format) throws ExoPlaybackException; - /** - * Invoked when a reset is encountered, and also when the renderer is enabled. - *

- * This method may be called when the renderer is in the following states: - * {@link #STATE_ENABLED}, {@link #STATE_STARTED}. - * - * @param positionUs The playback position in microseconds. - * @throws ExoPlaybackException If an error occurs handling the reset. - */ - protected abstract void reset(long positionUs) throws ExoPlaybackException; - /** * Incrementally renders the {@link TrackStream}. *

diff --git a/library/src/main/java/com/google/android/exoplayer/extensions/AudioDecoderTrackRenderer.java b/library/src/main/java/com/google/android/exoplayer/extensions/AudioDecoderTrackRenderer.java index fbea1a7fd3..09192a1e04 100644 --- a/library/src/main/java/com/google/android/exoplayer/extensions/AudioDecoderTrackRenderer.java +++ b/library/src/main/java/com/google/android/exoplayer/extensions/AudioDecoderTrackRenderer.java @@ -277,18 +277,6 @@ public abstract class AudioDecoderTrackRenderer extends TrackRenderer implements return currentPositionUs; } - @Override - protected void reset(long positionUs) { - audioTrack.reset(); - currentPositionUs = positionUs; - allowPositionDiscontinuity = true; - inputStreamEnded = false; - outputStreamEnded = false; - if (decoder != null) { - flushDecoder(); - } - } - /** * Invoked when the audio session id becomes known. Once the id is known it will not change * (and hence this method will not be invoked again) unless the renderer is disabled and then @@ -308,6 +296,18 @@ public abstract class AudioDecoderTrackRenderer extends TrackRenderer implements eventDispatcher.enabled(codecCounters); } + @Override + protected void onReset(long positionUs) { + audioTrack.reset(); + currentPositionUs = positionUs; + allowPositionDiscontinuity = true; + inputStreamEnded = false; + outputStreamEnded = false; + if (decoder != null) { + flushDecoder(); + } + } + @Override protected void onStarted() { audioTrack.play(); 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 c9589c1b72..3a05357c21 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,7 +98,7 @@ public final class MetadataTrackRenderer extends TrackRenderer implements Cal } @Override - protected void reset(long positionUs) { + protected void onReset(long positionUs) { pendingMetadata = null; inputStreamEnded = false; } 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 c415bbf28a..5721a228e4 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 @@ -112,7 +112,7 @@ public final class TextTrackRenderer extends TrackRenderer implements Callback { } @Override - protected void reset(long positionUs) { + protected void onReset(long positionUs) { inputStreamEnded = false; outputStreamEnded = false; if (subtitle != null) {