Move renderers into Timeline.

The outer class should only deal with the enabled renderers.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=125579652
This commit is contained in:
olly 2016-06-22 10:26:37 -07:00 committed by Oliver Woodman
parent 2073f3fce3
commit 5eca669474

View File

@ -84,7 +84,6 @@ import java.util.ArrayList;
private static final int IDLE_INTERVAL_MS = 1000; private static final int IDLE_INTERVAL_MS = 1000;
private final TrackSelector trackSelector; private final TrackSelector trackSelector;
private final TrackRenderer[] renderers;
private final StandaloneMediaClock standaloneMediaClock; private final StandaloneMediaClock standaloneMediaClock;
private final long minBufferUs; private final long minBufferUs;
private final long minRebufferUs; private final long minRebufferUs;
@ -113,7 +112,6 @@ import java.util.ArrayList;
public ExoPlayerImplInternal(TrackRenderer[] renderers, TrackSelector trackSelector, public ExoPlayerImplInternal(TrackRenderer[] renderers, TrackSelector trackSelector,
int minBufferMs, int minRebufferMs, boolean playWhenReady, Handler eventHandler) { int minBufferMs, int minRebufferMs, boolean playWhenReady, Handler eventHandler) {
this.renderers = renderers;
this.trackSelector = trackSelector; this.trackSelector = trackSelector;
this.minBufferUs = minBufferMs * 1000L; this.minBufferUs = minBufferMs * 1000L;
this.minRebufferUs = minRebufferMs * 1000L; this.minRebufferUs = minRebufferMs * 1000L;
@ -127,7 +125,7 @@ import java.util.ArrayList;
standaloneMediaClock = new StandaloneMediaClock(); standaloneMediaClock = new StandaloneMediaClock();
enabledRenderers = new TrackRenderer[0]; enabledRenderers = new TrackRenderer[0];
timeline = new Timeline(); timeline = new Timeline(renderers);
playbackInfo = new PlaybackInfo(0); playbackInfo = new PlaybackInfo(0);
trackSelector.init(this); trackSelector.init(this);
@ -476,7 +474,7 @@ import java.util.ArrayList;
private void resumeInternal() throws ExoPlaybackException { private void resumeInternal() throws ExoPlaybackException {
boolean allRenderersEnded = true; boolean allRenderersEnded = true;
boolean allRenderersReadyOrEnded = true; boolean allRenderersReadyOrEnded = true;
for (TrackRenderer renderer : renderers) { for (TrackRenderer renderer : enabledRenderers) {
allRenderersEnded = allRenderersEnded && renderer.isEnded(); allRenderersEnded = allRenderersEnded && renderer.isEnded();
allRenderersReadyOrEnded = allRenderersReadyOrEnded && isReadyOrEnded(renderer); allRenderersReadyOrEnded = allRenderersReadyOrEnded && isReadyOrEnded(renderer);
} }
@ -535,18 +533,16 @@ import java.util.ArrayList;
standaloneMediaClock.stop(); standaloneMediaClock.stop();
rendererMediaClock = null; rendererMediaClock = null;
rendererMediaClockSource = null; rendererMediaClockSource = null;
enabledRenderers = new TrackRenderer[0]; for (TrackRenderer renderer : enabledRenderers) {
for (TrackRenderer renderer : renderers) {
try { try {
ensureStopped(renderer); ensureStopped(renderer);
if (renderer.getState() == TrackRenderer.STATE_ENABLED) {
renderer.disable(); renderer.disable();
}
} catch (ExoPlaybackException | RuntimeException e) { } catch (ExoPlaybackException | RuntimeException e) {
// There's nothing we can do. // There's nothing we can do.
Log.e(TAG, "Stop failed.", e); Log.e(TAG, "Stop failed.", e);
} }
} }
enabledRenderers = new TrackRenderer[0];
sampleSource = null; sampleSource = null;
timeline.reset(); timeline.reset();
} }
@ -589,6 +585,8 @@ import java.util.ArrayList;
*/ */
private final class Timeline { private final class Timeline {
private final TrackRenderer[] renderers;
// Used during track reselection. // Used during track reselection.
private final boolean[] rendererWasEnabledFlags; private final boolean[] rendererWasEnabledFlags;
private final ArrayList<TrackStream> oldStreams; private final ArrayList<TrackStream> oldStreams;
@ -603,7 +601,8 @@ import java.util.ArrayList;
private long playingSourceEndPositionUs; private long playingSourceEndPositionUs;
private long bufferingSourceOffsetUs; private long bufferingSourceOffsetUs;
public Timeline() { public Timeline(TrackRenderer[] renderers) {
this.renderers = renderers;
rendererWasEnabledFlags = new boolean[renderers.length]; rendererWasEnabledFlags = new boolean[renderers.length];
oldStreams = new ArrayList<>(); oldStreams = new ArrayList<>();
newSelections = new ArrayList<>(); newSelections = new ArrayList<>();