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