Use helper method to disable Renderers.

Removes duplicated code and starts cleaning up handling of media clocks.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=174829840
This commit is contained in:
tonihei 2017-11-07 02:51:43 -08:00 committed by Oliver Woodman
parent ea80c3e456
commit f014b67d3e

View File

@ -718,11 +718,9 @@ import java.io.IOException;
if (playingPeriodHolder != newPlayingPeriodHolder if (playingPeriodHolder != newPlayingPeriodHolder
|| playingPeriodHolder != readingPeriodHolder) { || playingPeriodHolder != readingPeriodHolder) {
for (Renderer renderer : enabledRenderers) { for (Renderer renderer : enabledRenderers) {
renderer.disable(); disableRenderer(renderer);
} }
enabledRenderers = new Renderer[0]; enabledRenderers = new Renderer[0];
rendererMediaClock = null;
rendererMediaClockSource = null;
playingPeriodHolder = null; playingPeriodHolder = null;
} }
@ -801,13 +799,10 @@ import java.io.IOException;
handler.removeMessages(MSG_DO_SOME_WORK); handler.removeMessages(MSG_DO_SOME_WORK);
rebuffering = false; rebuffering = false;
standaloneMediaClock.stop(); standaloneMediaClock.stop();
rendererMediaClock = null;
rendererMediaClockSource = null;
rendererPositionUs = RENDERER_TIMESTAMP_OFFSET_US; rendererPositionUs = RENDERER_TIMESTAMP_OFFSET_US;
for (Renderer renderer : enabledRenderers) { for (Renderer renderer : enabledRenderers) {
try { try {
ensureStopped(renderer); disableRenderer(renderer);
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);
@ -853,6 +848,15 @@ import java.io.IOException;
} }
} }
private void disableRenderer(Renderer renderer) throws ExoPlaybackException {
if (renderer == rendererMediaClockSource) {
rendererMediaClock = null;
rendererMediaClockSource = null;
}
ensureStopped(renderer);
renderer.disable();
}
private void reselectTracksInternal() throws ExoPlaybackException { private void reselectTracksInternal() throws ExoPlaybackException {
if (playingPeriodHolder == null) { if (playingPeriodHolder == null) {
// We don't have tracks yet, so we don't care. // We don't have tracks yet, so we don't care.
@ -905,12 +909,7 @@ import java.io.IOException;
if (rendererWasEnabledFlags[i]) { if (rendererWasEnabledFlags[i]) {
if (sampleStream != renderer.getStream()) { if (sampleStream != renderer.getStream()) {
// We need to disable the renderer. // We need to disable the renderer.
if (renderer == rendererMediaClockSource) { disableRenderer(renderer);
rendererMediaClock = null;
rendererMediaClockSource = null;
}
ensureStopped(renderer);
renderer.disable();
} else if (streamResetFlags[i]) { } else if (streamResetFlags[i]) {
// The renderer will continue to consume from its current stream, but needs to be reset. // The renderer will continue to consume from its current stream, but needs to be reset.
renderer.resetPosition(rendererPositionUs); renderer.resetPosition(rendererPositionUs);
@ -1453,12 +1452,7 @@ import java.io.IOException;
// The renderer should be disabled before playing the next period, either because it's not // The renderer should be disabled before playing the next period, either because it's not
// needed to play the next period, or because we need to re-enable it as its current stream // needed to play the next period, or because we need to re-enable it as its current stream
// is final and it's not reading ahead. // is final and it's not reading ahead.
if (renderer == rendererMediaClockSource) { disableRenderer(renderer);
rendererMediaClock = null;
rendererMediaClockSource = null;
}
ensureStopped(renderer);
renderer.disable();
} }
} }