Commit 90ca3716 by tonihei Committed by Oliver Woodman

Improve MediaPeriodHolder documentation and member access.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=215205796
parent d97d289b
...@@ -993,12 +993,14 @@ import java.util.Collections; ...@@ -993,12 +993,14 @@ import java.util.Collections;
MediaPeriodHolder periodHolder = queue.getPlayingPeriod(); MediaPeriodHolder periodHolder = queue.getPlayingPeriod();
MediaPeriodHolder readingPeriodHolder = queue.getReadingPeriod(); MediaPeriodHolder readingPeriodHolder = queue.getReadingPeriod();
boolean selectionsChangedForReadPeriod = true; boolean selectionsChangedForReadPeriod = true;
TrackSelectorResult newTrackSelectorResult = null;
while (true) { while (true) {
if (periodHolder == null || !periodHolder.prepared) { if (periodHolder == null || !periodHolder.prepared) {
// The reselection did not change any prepared periods. // The reselection did not change any prepared periods.
return; return;
} }
if (periodHolder.selectTracks(playbackSpeed, playbackInfo.timeline)) { newTrackSelectorResult = periodHolder.selectTracks(playbackSpeed, playbackInfo.timeline);
if (newTrackSelectorResult != null) {
// Selected tracks have changed for this period. // Selected tracks have changed for this period.
break; break;
} }
...@@ -1017,7 +1019,7 @@ import java.util.Collections; ...@@ -1017,7 +1019,7 @@ import java.util.Collections;
boolean[] streamResetFlags = new boolean[renderers.length]; boolean[] streamResetFlags = new boolean[renderers.length];
long periodPositionUs = long periodPositionUs =
playingPeriodHolder.applyTrackSelection( playingPeriodHolder.applyTrackSelection(
playbackInfo.positionUs, recreateStreams, streamResetFlags); newTrackSelectorResult, playbackInfo.positionUs, recreateStreams, streamResetFlags);
if (playbackInfo.playbackState != Player.STATE_ENDED if (playbackInfo.playbackState != Player.STATE_ENDED
&& periodPositionUs != playbackInfo.positionUs) { && periodPositionUs != playbackInfo.positionUs) {
playbackInfo = playbackInfo.fromNewPosition(playbackInfo.periodId, periodPositionUs, playbackInfo = playbackInfo.fromNewPosition(playbackInfo.periodId, periodPositionUs,
...@@ -1047,7 +1049,7 @@ import java.util.Collections; ...@@ -1047,7 +1049,7 @@ import java.util.Collections;
} }
playbackInfo = playbackInfo =
playbackInfo.copyWithTrackInfo( playbackInfo.copyWithTrackInfo(
playingPeriodHolder.trackGroups, playingPeriodHolder.trackSelectorResult); playingPeriodHolder.getTrackGroups(), playingPeriodHolder.getTrackSelectorResult());
enableRenderers(rendererWasEnabledFlags, enabledRendererCount); enableRenderers(rendererWasEnabledFlags, enabledRendererCount);
} else { } else {
// Release and re-prepare/buffer periods after the one whose selection changed. // Release and re-prepare/buffer periods after the one whose selection changed.
...@@ -1056,7 +1058,7 @@ import java.util.Collections; ...@@ -1056,7 +1058,7 @@ import java.util.Collections;
long loadingPeriodPositionUs = long loadingPeriodPositionUs =
Math.max( Math.max(
periodHolder.info.startPositionUs, periodHolder.toPeriodTime(rendererPositionUs)); periodHolder.info.startPositionUs, periodHolder.toPeriodTime(rendererPositionUs));
periodHolder.applyTrackSelection(loadingPeriodPositionUs, false); periodHolder.applyTrackSelection(newTrackSelectorResult, loadingPeriodPositionUs, false);
} }
} }
handleLoadingMediaPeriodChanged(/* loadingTrackSelectionChanged= */ true); handleLoadingMediaPeriodChanged(/* loadingTrackSelectionChanged= */ true);
...@@ -1069,15 +1071,13 @@ import java.util.Collections; ...@@ -1069,15 +1071,13 @@ import java.util.Collections;
private void updateTrackSelectionPlaybackSpeed(float playbackSpeed) { private void updateTrackSelectionPlaybackSpeed(float playbackSpeed) {
MediaPeriodHolder periodHolder = queue.getFrontPeriod(); MediaPeriodHolder periodHolder = queue.getFrontPeriod();
while (periodHolder != null) { while (periodHolder != null && periodHolder.prepared) {
if (periodHolder.trackSelectorResult != null) { TrackSelection[] trackSelections = periodHolder.getTrackSelectorResult().selections.getAll();
TrackSelection[] trackSelections = periodHolder.trackSelectorResult.selections.getAll();
for (TrackSelection trackSelection : trackSelections) { for (TrackSelection trackSelection : trackSelections) {
if (trackSelection != null) { if (trackSelection != null) {
trackSelection.onPlaybackSpeed(playbackSpeed); trackSelection.onPlaybackSpeed(playbackSpeed);
} }
} }
}
periodHolder = periodHolder.getNext(); periodHolder = periodHolder.getNext();
} }
} }
...@@ -1463,9 +1463,9 @@ import java.util.Collections; ...@@ -1463,9 +1463,9 @@ import java.util.Collections;
return; return;
} }
TrackSelectorResult oldTrackSelectorResult = readingPeriodHolder.trackSelectorResult; TrackSelectorResult oldTrackSelectorResult = readingPeriodHolder.getTrackSelectorResult();
readingPeriodHolder = queue.advanceReadingPeriod(); readingPeriodHolder = queue.advanceReadingPeriod();
TrackSelectorResult newTrackSelectorResult = readingPeriodHolder.trackSelectorResult; TrackSelectorResult newTrackSelectorResult = readingPeriodHolder.getTrackSelectorResult();
boolean initialDiscontinuity = boolean initialDiscontinuity =
readingPeriodHolder.mediaPeriod.readDiscontinuity() != C.TIME_UNSET; readingPeriodHolder.mediaPeriod.readDiscontinuity() != C.TIME_UNSET;
...@@ -1536,7 +1536,7 @@ import java.util.Collections; ...@@ -1536,7 +1536,7 @@ import java.util.Collections;
loadingPeriodHolder.handlePrepared( loadingPeriodHolder.handlePrepared(
mediaClock.getPlaybackParameters().speed, playbackInfo.timeline); mediaClock.getPlaybackParameters().speed, playbackInfo.timeline);
updateLoadControlTrackSelection( updateLoadControlTrackSelection(
loadingPeriodHolder.trackGroups, loadingPeriodHolder.trackSelectorResult); loadingPeriodHolder.getTrackGroups(), loadingPeriodHolder.getTrackSelectorResult());
if (!queue.hasPlayingPeriod()) { if (!queue.hasPlayingPeriod()) {
// This is the first prepared period, so start playing it. // This is the first prepared period, so start playing it.
MediaPeriodHolder playingPeriodHolder = queue.advancePlayingPeriod(); MediaPeriodHolder playingPeriodHolder = queue.advancePlayingPeriod();
...@@ -1596,11 +1596,11 @@ import java.util.Collections; ...@@ -1596,11 +1596,11 @@ import java.util.Collections;
for (int i = 0; i < renderers.length; i++) { for (int i = 0; i < renderers.length; i++) {
Renderer renderer = renderers[i]; Renderer renderer = renderers[i];
rendererWasEnabledFlags[i] = renderer.getState() != Renderer.STATE_DISABLED; rendererWasEnabledFlags[i] = renderer.getState() != Renderer.STATE_DISABLED;
if (newPlayingPeriodHolder.trackSelectorResult.isRendererEnabled(i)) { if (newPlayingPeriodHolder.getTrackSelectorResult().isRendererEnabled(i)) {
enabledRendererCount++; enabledRendererCount++;
} }
if (rendererWasEnabledFlags[i] if (rendererWasEnabledFlags[i]
&& (!newPlayingPeriodHolder.trackSelectorResult.isRendererEnabled(i) && (!newPlayingPeriodHolder.getTrackSelectorResult().isRendererEnabled(i)
|| (renderer.isCurrentStreamFinal() || (renderer.isCurrentStreamFinal()
&& renderer.getStream() == oldPlayingPeriodHolder.sampleStreams[i]))) { && renderer.getStream() == oldPlayingPeriodHolder.sampleStreams[i]))) {
// 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
...@@ -1611,7 +1611,8 @@ import java.util.Collections; ...@@ -1611,7 +1611,8 @@ import java.util.Collections;
} }
playbackInfo = playbackInfo =
playbackInfo.copyWithTrackInfo( playbackInfo.copyWithTrackInfo(
newPlayingPeriodHolder.trackGroups, newPlayingPeriodHolder.trackSelectorResult); newPlayingPeriodHolder.getTrackGroups(),
newPlayingPeriodHolder.getTrackSelectorResult());
enableRenderers(rendererWasEnabledFlags, enabledRendererCount); enableRenderers(rendererWasEnabledFlags, enabledRendererCount);
} }
...@@ -1621,7 +1622,7 @@ import java.util.Collections; ...@@ -1621,7 +1622,7 @@ import java.util.Collections;
int enabledRendererCount = 0; int enabledRendererCount = 0;
MediaPeriodHolder playingPeriodHolder = queue.getPlayingPeriod(); MediaPeriodHolder playingPeriodHolder = queue.getPlayingPeriod();
for (int i = 0; i < renderers.length; i++) { for (int i = 0; i < renderers.length; i++) {
if (playingPeriodHolder.trackSelectorResult.isRendererEnabled(i)) { if (playingPeriodHolder.getTrackSelectorResult().isRendererEnabled(i)) {
enableRenderer(i, rendererWasEnabledFlags[i], enabledRendererCount++); enableRenderer(i, rendererWasEnabledFlags[i], enabledRendererCount++);
} }
} }
...@@ -1634,10 +1635,10 @@ import java.util.Collections; ...@@ -1634,10 +1635,10 @@ import java.util.Collections;
Renderer renderer = renderers[rendererIndex]; Renderer renderer = renderers[rendererIndex];
enabledRenderers[enabledRendererIndex] = renderer; enabledRenderers[enabledRendererIndex] = renderer;
if (renderer.getState() == Renderer.STATE_DISABLED) { if (renderer.getState() == Renderer.STATE_DISABLED) {
TrackSelectorResult trackSelectorResult = playingPeriodHolder.getTrackSelectorResult();
RendererConfiguration rendererConfiguration = RendererConfiguration rendererConfiguration =
playingPeriodHolder.trackSelectorResult.rendererConfigurations[rendererIndex]; trackSelectorResult.rendererConfigurations[rendererIndex];
TrackSelection newSelection = playingPeriodHolder.trackSelectorResult.selections.get( TrackSelection newSelection = trackSelectorResult.selections.get(rendererIndex);
rendererIndex);
Format[] formats = getFormats(newSelection); Format[] formats = getFormats(newSelection);
// The renderer needs enabling with its new track selection. // The renderer needs enabling with its new track selection.
boolean playing = playWhenReady && playbackInfo.playbackState == Player.STATE_READY; boolean playing = playWhenReady && playbackInfo.playbackState == Player.STATE_READY;
...@@ -1674,7 +1675,8 @@ import java.util.Collections; ...@@ -1674,7 +1675,8 @@ import java.util.Collections;
&& loadingMediaPeriodHolder != null && loadingMediaPeriodHolder != null
&& loadingMediaPeriodHolder.prepared) { && loadingMediaPeriodHolder.prepared) {
updateLoadControlTrackSelection( updateLoadControlTrackSelection(
loadingMediaPeriodHolder.trackGroups, loadingMediaPeriodHolder.trackSelectorResult); loadingMediaPeriodHolder.getTrackGroups(),
loadingMediaPeriodHolder.getTrackSelectorResult());
} }
} }
......
...@@ -215,7 +215,7 @@ import org.checkerframework.checker.nullness.compatqual.NullableType; ...@@ -215,7 +215,7 @@ import org.checkerframework.checker.nullness.compatqual.NullableType;
@Override @Override
public long selectTracks( public long selectTracks(
TrackSelection[] selections, @NullableType TrackSelection[] selections,
boolean[] mayRetainStreamFlags, boolean[] mayRetainStreamFlags,
@NullableType SampleStream[] streams, @NullableType SampleStream[] streams,
boolean[] streamResetFlags, boolean[] streamResetFlags,
......
...@@ -21,6 +21,7 @@ import com.google.android.exoplayer2.SeekParameters; ...@@ -21,6 +21,7 @@ import com.google.android.exoplayer2.SeekParameters;
import com.google.android.exoplayer2.Timeline; import com.google.android.exoplayer2.Timeline;
import com.google.android.exoplayer2.trackselection.TrackSelection; import com.google.android.exoplayer2.trackselection.TrackSelection;
import java.io.IOException; import java.io.IOException;
import org.checkerframework.checker.nullness.compatqual.NullableType;
/** /**
* Loads media corresponding to a {@link Timeline.Period}, and allows that media to be read. All * Loads media corresponding to a {@link Timeline.Period}, and allows that media to be read. All
...@@ -108,9 +109,9 @@ public interface MediaPeriod extends SequenceableLoader { ...@@ -108,9 +109,9 @@ public interface MediaPeriod extends SequenceableLoader {
* @return The actual position at which the tracks were enabled, in microseconds. * @return The actual position at which the tracks were enabled, in microseconds.
*/ */
long selectTracks( long selectTracks(
TrackSelection[] selections, @NullableType TrackSelection[] selections,
boolean[] mayRetainStreamFlags, boolean[] mayRetainStreamFlags,
SampleStream[] streams, @NullableType SampleStream[] streams,
boolean[] streamResetFlags, boolean[] streamResetFlags,
long positionUs); long positionUs);
......
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
*/ */
package com.google.android.exoplayer2.trackselection; package com.google.android.exoplayer2.trackselection;
import android.support.annotation.Nullable;
import com.google.android.exoplayer2.RendererConfiguration; import com.google.android.exoplayer2.RendererConfiguration;
import com.google.android.exoplayer2.util.Util; import com.google.android.exoplayer2.util.Util;
import org.checkerframework.checker.nullness.compatqual.NullableType; import org.checkerframework.checker.nullness.compatqual.NullableType;
...@@ -70,7 +71,7 @@ public final class TrackSelectorResult { ...@@ -70,7 +71,7 @@ public final class TrackSelectorResult {
* will be returned. * will be returned.
* @return Whether this result is equivalent to {@code other} for all renderers. * @return Whether this result is equivalent to {@code other} for all renderers.
*/ */
public boolean isEquivalent(TrackSelectorResult other) { public boolean isEquivalent(@Nullable TrackSelectorResult other) {
if (other == null || other.selections.length != selections.length) { if (other == null || other.selections.length != selections.length) {
return false; return false;
} }
...@@ -93,7 +94,7 @@ public final class TrackSelectorResult { ...@@ -93,7 +94,7 @@ public final class TrackSelectorResult {
* @return Whether this result is equivalent to {@code other} for the renderer at the specified * @return Whether this result is equivalent to {@code other} for the renderer at the specified
* index. * index.
*/ */
public boolean isEquivalent(TrackSelectorResult other, int index) { public boolean isEquivalent(@Nullable TrackSelectorResult other, int index) {
if (other == null) { if (other == null) {
return false; return false;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment