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