Rename PreloadMediaSource.PreloadControl
methods
The IntDefs in `DefaultPreloadManager.Stage` are also renamed accordingly. PiperOrigin-RevId: 638631357
This commit is contained in:
parent
4db9bf92af
commit
1f1897709f
@ -38,6 +38,9 @@
|
||||
* Fix bug where playback moved to `STATE_ENDED` when re-preparing a
|
||||
multi-period DASH live stream after the original period was already
|
||||
removed from the manifest.
|
||||
* Rename `onTimelineRefreshed` to `onSourcePrepared` and `onPrepared` to
|
||||
`onTracksSelected` in `PreloadMediaSource.PreloadControl`. Also rename
|
||||
the IntDefs in `DefaultPreloadManager.Stage` accordingly.
|
||||
* Transformer:
|
||||
* Work around a decoder bug where the number of audio channels was capped
|
||||
at stereo when handling PCM input.
|
||||
|
@ -24,7 +24,6 @@ import android.os.Looper;
|
||||
import androidx.annotation.IntDef;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.media3.common.C;
|
||||
import androidx.media3.common.Timeline;
|
||||
import androidx.media3.common.util.UnstableApi;
|
||||
import androidx.media3.common.util.Util;
|
||||
import androidx.media3.exoplayer.ExoPlayer;
|
||||
@ -57,25 +56,25 @@ public final class DefaultPreloadManager extends BasePreloadManager<Integer> {
|
||||
public static class Status implements TargetPreloadStatusControl.PreloadStatus {
|
||||
|
||||
/**
|
||||
* Stages that for the preload status. One of {@link #STAGE_TIMELINE_REFRESHED}, {@link
|
||||
* #STAGE_SOURCE_PREPARED} or {@link #STAGE_LOADED_TO_POSITION_MS}.
|
||||
* Stages for the preload status. One of {@link #STAGE_SOURCE_PREPARED}, {@link
|
||||
* #STAGE_TRACKS_SELECTED} or {@link #STAGE_LOADED_TO_POSITION_MS}.
|
||||
*/
|
||||
@Documented
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
@Target(TYPE_USE)
|
||||
@IntDef(
|
||||
value = {
|
||||
STAGE_TIMELINE_REFRESHED,
|
||||
STAGE_SOURCE_PREPARED,
|
||||
STAGE_TRACKS_SELECTED,
|
||||
STAGE_LOADED_TO_POSITION_MS,
|
||||
})
|
||||
public @interface Stage {}
|
||||
|
||||
/** The {@link PreloadMediaSource} has its {@link Timeline} refreshed. */
|
||||
public static final int STAGE_TIMELINE_REFRESHED = 0;
|
||||
/** The {@link PreloadMediaSource} has completed preparation. */
|
||||
public static final int STAGE_SOURCE_PREPARED = 0;
|
||||
|
||||
/** The {@link PreloadMediaSource} is prepared. */
|
||||
public static final int STAGE_SOURCE_PREPARED = 1;
|
||||
/** The {@link PreloadMediaSource} has tracks selected. */
|
||||
public static final int STAGE_TRACKS_SELECTED = 1;
|
||||
|
||||
/** The {@link PreloadMediaSource} is loaded to a specific position in microseconds. */
|
||||
public static final int STAGE_LOADED_TO_POSITION_MS = 2;
|
||||
@ -205,25 +204,25 @@ public final class DefaultPreloadManager extends BasePreloadManager<Integer> {
|
||||
|
||||
private final class SourcePreloadControl implements PreloadMediaSource.PreloadControl {
|
||||
@Override
|
||||
public boolean onTimelineRefreshed(PreloadMediaSource mediaSource) {
|
||||
public boolean onSourcePrepared(PreloadMediaSource mediaSource) {
|
||||
// The PreloadMediaSource may have more data preloaded than the target preload status if it
|
||||
// has been preloaded before, thus we set `clearExceededDataFromTargetPreloadStatus` to
|
||||
// `true` to clear the exceeded data.
|
||||
return continueOrCompletePreloading(
|
||||
mediaSource,
|
||||
/* continueLoadingPredicate= */ status ->
|
||||
status.getStage() > Status.STAGE_TIMELINE_REFRESHED,
|
||||
status.getStage() > Status.STAGE_SOURCE_PREPARED,
|
||||
/* clearExceededDataFromTargetPreloadStatus= */ true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onPrepared(PreloadMediaSource mediaSource) {
|
||||
public boolean onTracksSelected(PreloadMediaSource mediaSource) {
|
||||
// Set `clearExceededDataFromTargetPreloadStatus` to `false` as clearing the exceeded data
|
||||
// from the status STAGE_SOURCE_PREPARED is not supported.
|
||||
// from the status STAGE_TRACKS_SELECTED is not supported.
|
||||
return continueOrCompletePreloading(
|
||||
mediaSource,
|
||||
/* continueLoadingPredicate= */ status ->
|
||||
status.getStage() > Status.STAGE_SOURCE_PREPARED,
|
||||
status.getStage() > Status.STAGE_TRACKS_SELECTED,
|
||||
/* clearExceededDataFromTargetPreloadStatus= */ false);
|
||||
}
|
||||
|
||||
|
@ -63,20 +63,20 @@ public final class PreloadMediaSource extends WrappingMediaSource {
|
||||
public interface PreloadControl {
|
||||
|
||||
/**
|
||||
* Called from {@link PreloadMediaSource} when the {@link Timeline} is refreshed.
|
||||
* Called from {@link PreloadMediaSource} when it has completed preparation.
|
||||
*
|
||||
* @param mediaSource The {@link PreloadMediaSource} that has its {@link Timeline} refreshed.
|
||||
* @param mediaSource The {@link PreloadMediaSource} that has completed preparation.
|
||||
* @return True if the {@code mediaSource} should continue preloading, false otherwise.
|
||||
*/
|
||||
boolean onTimelineRefreshed(PreloadMediaSource mediaSource);
|
||||
boolean onSourcePrepared(PreloadMediaSource mediaSource);
|
||||
|
||||
/**
|
||||
* Called from {@link PreloadMediaSource} when it is prepared.
|
||||
* Called from {@link PreloadMediaSource} when it has tracks selected.
|
||||
*
|
||||
* @param mediaSource The {@link PreloadMediaSource} it is prepared.
|
||||
* @param mediaSource The {@link PreloadMediaSource} that has tracks selected.
|
||||
* @return True if the {@code mediaSource} should continue preloading, false otherwise.
|
||||
*/
|
||||
boolean onPrepared(PreloadMediaSource mediaSource);
|
||||
boolean onTracksSelected(PreloadMediaSource mediaSource);
|
||||
|
||||
/**
|
||||
* Called from {@link PreloadMediaSource} when it requests to continue loading.
|
||||
@ -291,7 +291,7 @@ public final class PreloadMediaSource extends WrappingMediaSource {
|
||||
protected void onChildSourceInfoRefreshed(Timeline newTimeline) {
|
||||
this.timeline = newTimeline;
|
||||
refreshSourceInfo(newTimeline);
|
||||
if (isUsedByPlayer() || !preloadControl.onTimelineRefreshed(PreloadMediaSource.this)) {
|
||||
if (isUsedByPlayer() || !preloadControl.onSourcePrepared(PreloadMediaSource.this)) {
|
||||
return;
|
||||
}
|
||||
Pair<Object, Long> periodPosition =
|
||||
@ -415,7 +415,7 @@ public final class PreloadMediaSource extends WrappingMediaSource {
|
||||
if (trackSelectorResult != null) {
|
||||
preloadMediaPeriod.selectTracksForPreloading(
|
||||
trackSelectorResult.selections, periodStartPositionUs);
|
||||
if (preloadControl.onPrepared(PreloadMediaSource.this)) {
|
||||
if (preloadControl.onTracksSelected(PreloadMediaSource.this)) {
|
||||
preloadMediaPeriod.continueLoading(
|
||||
new LoadingInfo.Builder().setPlaybackPositionUs(periodStartPositionUs).build());
|
||||
}
|
||||
|
@ -17,7 +17,7 @@ package androidx.media3.exoplayer.source.preload;
|
||||
|
||||
import static androidx.media3.exoplayer.source.preload.DefaultPreloadManager.Status.STAGE_LOADED_TO_POSITION_MS;
|
||||
import static androidx.media3.exoplayer.source.preload.DefaultPreloadManager.Status.STAGE_SOURCE_PREPARED;
|
||||
import static androidx.media3.exoplayer.source.preload.DefaultPreloadManager.Status.STAGE_TIMELINE_REFRESHED;
|
||||
import static androidx.media3.exoplayer.source.preload.DefaultPreloadManager.Status.STAGE_TRACKS_SELECTED;
|
||||
import static androidx.media3.test.utils.FakeMediaSourceFactory.DEFAULT_WINDOW_UID;
|
||||
import static androidx.media3.test.utils.robolectric.RobolectricUtil.runMainLooperUntil;
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
@ -192,7 +192,7 @@ public class DefaultPreloadManagerTest {
|
||||
if (abs(rankingData - currentPlayingItemIndex.get()) == 1) {
|
||||
return new DefaultPreloadManager.Status(STAGE_LOADED_TO_POSITION_MS, 100L);
|
||||
} else {
|
||||
return new DefaultPreloadManager.Status(STAGE_TIMELINE_REFRESHED);
|
||||
return new DefaultPreloadManager.Status(STAGE_SOURCE_PREPARED);
|
||||
}
|
||||
};
|
||||
ProgressiveMediaSource.Factory mediaSourceFactory =
|
||||
@ -244,7 +244,7 @@ public class DefaultPreloadManagerTest {
|
||||
if (abs(rankingData - currentPlayingItemIndex.get()) == 1) {
|
||||
return new DefaultPreloadManager.Status(STAGE_LOADED_TO_POSITION_MS, 100L);
|
||||
} else {
|
||||
return new DefaultPreloadManager.Status(STAGE_TIMELINE_REFRESHED);
|
||||
return new DefaultPreloadManager.Status(STAGE_SOURCE_PREPARED);
|
||||
}
|
||||
};
|
||||
ProgressiveMediaSource.Factory mediaSourceFactory =
|
||||
@ -297,7 +297,7 @@ public class DefaultPreloadManagerTest {
|
||||
TargetPreloadStatusControl<Integer> targetPreloadStatusControl =
|
||||
rankingData -> {
|
||||
targetPreloadStatusControlCallStates.add(rankingData);
|
||||
return new DefaultPreloadManager.Status(STAGE_TIMELINE_REFRESHED);
|
||||
return new DefaultPreloadManager.Status(STAGE_SOURCE_PREPARED);
|
||||
};
|
||||
FakeMediaSourceFactory fakeMediaSourceFactory = new FakeMediaSourceFactory();
|
||||
DefaultPreloadManager preloadManager =
|
||||
@ -340,7 +340,7 @@ public class DefaultPreloadManagerTest {
|
||||
TargetPreloadStatusControl<Integer> targetPreloadStatusControl =
|
||||
rankingData -> {
|
||||
targetPreloadStatusControlCallStates.add(rankingData);
|
||||
return new DefaultPreloadManager.Status(STAGE_TIMELINE_REFRESHED);
|
||||
return new DefaultPreloadManager.Status(STAGE_SOURCE_PREPARED);
|
||||
};
|
||||
FakeMediaSourceFactory fakeMediaSourceFactory = new FakeMediaSourceFactory();
|
||||
DefaultPreloadManager preloadManager =
|
||||
@ -453,9 +453,9 @@ public class DefaultPreloadManagerTest {
|
||||
rankingData -> {
|
||||
targetPreloadStatusControlCallStates.add(rankingData);
|
||||
if (abs(rankingData - currentPlayingIndex.get()) <= 2) {
|
||||
return new DefaultPreloadManager.Status(STAGE_SOURCE_PREPARED);
|
||||
return new DefaultPreloadManager.Status(STAGE_TRACKS_SELECTED);
|
||||
} else if (abs(rankingData - currentPlayingIndex.get()) == 3) {
|
||||
return new DefaultPreloadManager.Status(STAGE_TIMELINE_REFRESHED);
|
||||
return new DefaultPreloadManager.Status(STAGE_SOURCE_PREPARED);
|
||||
}
|
||||
return null;
|
||||
};
|
||||
@ -573,7 +573,7 @@ public class DefaultPreloadManagerTest {
|
||||
@Test
|
||||
public void removeByMediaItems_correspondingHeldSourceRemovedAndReleased() {
|
||||
TargetPreloadStatusControl<Integer> targetPreloadStatusControl =
|
||||
rankingData -> new DefaultPreloadManager.Status(STAGE_TIMELINE_REFRESHED);
|
||||
rankingData -> new DefaultPreloadManager.Status(STAGE_SOURCE_PREPARED);
|
||||
MediaSource.Factory mockMediaSourceFactory = mock(MediaSource.Factory.class);
|
||||
DefaultPreloadManager preloadManager =
|
||||
new DefaultPreloadManager(
|
||||
@ -624,7 +624,7 @@ public class DefaultPreloadManagerTest {
|
||||
@Test
|
||||
public void removeByMediaSources_heldSourceRemovedAndReleased() {
|
||||
TargetPreloadStatusControl<Integer> targetPreloadStatusControl =
|
||||
rankingData -> new DefaultPreloadManager.Status(STAGE_TIMELINE_REFRESHED);
|
||||
rankingData -> new DefaultPreloadManager.Status(STAGE_SOURCE_PREPARED);
|
||||
MediaSource.Factory mockMediaSourceFactory = mock(MediaSource.Factory.class);
|
||||
DefaultPreloadManager preloadManager =
|
||||
new DefaultPreloadManager(
|
||||
@ -682,7 +682,7 @@ public class DefaultPreloadManagerTest {
|
||||
@Test
|
||||
public void reset_returnZeroCount_sourcesButNotRendererCapabilitiesListReleased() {
|
||||
TargetPreloadStatusControl<Integer> targetPreloadStatusControl =
|
||||
rankingData -> new DefaultPreloadManager.Status(STAGE_TIMELINE_REFRESHED);
|
||||
rankingData -> new DefaultPreloadManager.Status(STAGE_SOURCE_PREPARED);
|
||||
MediaSource.Factory mockMediaSourceFactory = mock(MediaSource.Factory.class);
|
||||
List<FakeRenderer> underlyingRenderers = new ArrayList<>();
|
||||
RenderersFactory renderersFactory =
|
||||
@ -753,7 +753,7 @@ public class DefaultPreloadManagerTest {
|
||||
@Test
|
||||
public void release_returnZeroCount_sourcesAndRendererCapabilitiesListReleased() {
|
||||
TargetPreloadStatusControl<Integer> targetPreloadStatusControl =
|
||||
rankingData -> new DefaultPreloadManager.Status(STAGE_TIMELINE_REFRESHED);
|
||||
rankingData -> new DefaultPreloadManager.Status(STAGE_SOURCE_PREPARED);
|
||||
MediaSource.Factory mockMediaSourceFactory = mock(MediaSource.Factory.class);
|
||||
List<FakeRenderer> underlyingRenderers = new ArrayList<>();
|
||||
RenderersFactory renderersFactory =
|
||||
|
@ -68,8 +68,8 @@ public class PreloadAndPlaybackCoordinationTest {
|
||||
private final FakeMediaSource wrappedMediaSource;
|
||||
private final MediaSource.MediaSourceCaller playbackMediaSourceCaller;
|
||||
|
||||
private final AtomicInteger preloadControlOnSourceInfoRefreshedCalledCounter;
|
||||
private final AtomicInteger preloadControlOnPreparedCalledCounter;
|
||||
private final AtomicInteger preloadControlOnSourcePreparedCalledCounter;
|
||||
private final AtomicInteger preloadControlOnTracksSelectedCalledCounter;
|
||||
private final AtomicInteger preloadControlOnUsedByPlayerCounter;
|
||||
private final AtomicBoolean playbackSourceCallerOnSourceInfoRefreshedCalled;
|
||||
private final AtomicBoolean playbackPeriodCallbackOnPreparedCalled;
|
||||
@ -93,8 +93,8 @@ public class PreloadAndPlaybackCoordinationTest {
|
||||
SystemClock.DEFAULT.createHandler(handler.getLooper(), /* callback= */ null),
|
||||
audioListener)
|
||||
};
|
||||
preloadControlOnSourceInfoRefreshedCalledCounter = new AtomicInteger();
|
||||
preloadControlOnPreparedCalledCounter = new AtomicInteger();
|
||||
preloadControlOnSourcePreparedCalledCounter = new AtomicInteger();
|
||||
preloadControlOnTracksSelectedCalledCounter = new AtomicInteger();
|
||||
preloadControlOnUsedByPlayerCounter = new AtomicInteger();
|
||||
playbackSourceCallerOnSourceInfoRefreshedCalled = new AtomicBoolean();
|
||||
playbackPeriodCallbackOnPreparedCalled = new AtomicBoolean();
|
||||
@ -103,14 +103,14 @@ public class PreloadAndPlaybackCoordinationTest {
|
||||
PreloadMediaSource.PreloadControl preloadControl =
|
||||
new PreloadMediaSource.PreloadControl() {
|
||||
@Override
|
||||
public boolean onTimelineRefreshed(PreloadMediaSource mediaSource) {
|
||||
preloadControlOnSourceInfoRefreshedCalledCounter.addAndGet(1);
|
||||
public boolean onSourcePrepared(PreloadMediaSource mediaSource) {
|
||||
preloadControlOnSourcePreparedCalledCounter.addAndGet(1);
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onPrepared(PreloadMediaSource mediaSource) {
|
||||
preloadControlOnPreparedCalledCounter.addAndGet(1);
|
||||
public boolean onTracksSelected(PreloadMediaSource mediaSource) {
|
||||
preloadControlOnTracksSelectedCalledCounter.addAndGet(1);
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -173,8 +173,8 @@ public class PreloadAndPlaybackCoordinationTest {
|
||||
playbackMediaSourceCaller, bandwidthMeter.getTransferListener(), PlayerId.UNSET);
|
||||
ShadowLooper.idleMainLooper();
|
||||
|
||||
assertThat(preloadControlOnSourceInfoRefreshedCalledCounter.get()).isEqualTo(0);
|
||||
assertThat(preloadControlOnPreparedCalledCounter.get()).isEqualTo(0);
|
||||
assertThat(preloadControlOnSourcePreparedCalledCounter.get()).isEqualTo(0);
|
||||
assertThat(preloadControlOnTracksSelectedCalledCounter.get()).isEqualTo(0);
|
||||
assertThat(preloadControlOnUsedByPlayerCounter.get()).isEqualTo(1);
|
||||
assertThat(playbackSourceCallerOnSourceInfoRefreshedCalled.get()).isTrue();
|
||||
assertThat(playbackPeriodCallbackOnPreparedCalled.get()).isTrue();
|
||||
@ -187,8 +187,8 @@ public class PreloadAndPlaybackCoordinationTest {
|
||||
preloadMediaSource.preload(/* startPositionUs= */ 0L);
|
||||
ShadowLooper.idleMainLooper();
|
||||
|
||||
assertThat(preloadControlOnSourceInfoRefreshedCalledCounter.get()).isEqualTo(1);
|
||||
assertThat(preloadControlOnPreparedCalledCounter.get()).isEqualTo(1);
|
||||
assertThat(preloadControlOnSourcePreparedCalledCounter.get()).isEqualTo(1);
|
||||
assertThat(preloadControlOnTracksSelectedCalledCounter.get()).isEqualTo(1);
|
||||
assertThat(preloadControlOnUsedByPlayerCounter.get()).isEqualTo(1);
|
||||
}
|
||||
|
||||
@ -199,8 +199,8 @@ public class PreloadAndPlaybackCoordinationTest {
|
||||
preloadMediaSource.preload(/* startPositionUs= */ 0L);
|
||||
ShadowLooper.idleMainLooper();
|
||||
|
||||
assertThat(preloadControlOnSourceInfoRefreshedCalledCounter.get()).isEqualTo(0);
|
||||
assertThat(preloadControlOnPreparedCalledCounter.get()).isEqualTo(0);
|
||||
assertThat(preloadControlOnSourcePreparedCalledCounter.get()).isEqualTo(0);
|
||||
assertThat(preloadControlOnTracksSelectedCalledCounter.get()).isEqualTo(0);
|
||||
assertThat(preloadControlOnUsedByPlayerCounter.get()).isEqualTo(2);
|
||||
assertThat(playbackSourceCallerOnSourceInfoRefreshedCalled.get()).isTrue();
|
||||
assertThat(playbackPeriodCallbackOnPreparedCalled.get()).isTrue();
|
||||
@ -213,13 +213,13 @@ public class PreloadAndPlaybackCoordinationTest {
|
||||
preloadMediaSource.preload(/* startPositionUs= */ 0L);
|
||||
ShadowLooper.idleMainLooper();
|
||||
|
||||
assertThat(preloadControlOnSourceInfoRefreshedCalledCounter.get()).isEqualTo(1);
|
||||
assertThat(preloadControlOnPreparedCalledCounter.get()).isEqualTo(1);
|
||||
assertThat(preloadControlOnSourcePreparedCalledCounter.get()).isEqualTo(1);
|
||||
assertThat(preloadControlOnTracksSelectedCalledCounter.get()).isEqualTo(1);
|
||||
assertThat(preloadControlOnUsedByPlayerCounter.get()).isEqualTo(2);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void playbackBetweenPreloadStartAndTimelineInfoRefreshed_reusableForPreloadAfterRelease() {
|
||||
public void playbackBetweenPreloadStartAndSourcePrepared_reusableForPreloadAfterRelease() {
|
||||
wrappedMediaSource.setAllowPreparation(false);
|
||||
|
||||
preloadMediaSource.preload(/* startPositionUs= */ 0L);
|
||||
@ -229,8 +229,8 @@ public class PreloadAndPlaybackCoordinationTest {
|
||||
wrappedMediaSource.setAllowPreparation(true);
|
||||
ShadowLooper.idleMainLooper();
|
||||
|
||||
assertThat(preloadControlOnSourceInfoRefreshedCalledCounter.get()).isEqualTo(0);
|
||||
assertThat(preloadControlOnPreparedCalledCounter.get()).isEqualTo(0);
|
||||
assertThat(preloadControlOnSourcePreparedCalledCounter.get()).isEqualTo(0);
|
||||
assertThat(preloadControlOnTracksSelectedCalledCounter.get()).isEqualTo(0);
|
||||
assertThat(preloadControlOnUsedByPlayerCounter.get()).isEqualTo(1);
|
||||
assertThat(playbackSourceCallerOnSourceInfoRefreshedCalled.get()).isTrue();
|
||||
assertThat(playbackPeriodCallbackOnPreparedCalled.get()).isTrue();
|
||||
@ -243,14 +243,14 @@ public class PreloadAndPlaybackCoordinationTest {
|
||||
preloadMediaSource.preload(/* startPositionUs= */ 0L);
|
||||
ShadowLooper.idleMainLooper();
|
||||
|
||||
assertThat(preloadControlOnSourceInfoRefreshedCalledCounter.get()).isEqualTo(1);
|
||||
assertThat(preloadControlOnPreparedCalledCounter.get()).isEqualTo(1);
|
||||
assertThat(preloadControlOnSourcePreparedCalledCounter.get()).isEqualTo(1);
|
||||
assertThat(preloadControlOnTracksSelectedCalledCounter.get()).isEqualTo(1);
|
||||
assertThat(preloadControlOnUsedByPlayerCounter.get()).isEqualTo(1);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void
|
||||
playbackBetweenPreloadTimelineRefreshedAndPeriodPrepared_reusableForPreloadAfterRelease() {
|
||||
playbackBetweenPreloadSourcePreparedAndTracksSelected_reusableForPreloadAfterRelease() {
|
||||
wrappedMediaSource.setPeriodDefersOnPreparedCallback(true);
|
||||
|
||||
preloadMediaSource.preload(/* startPositionUs= */ 0L);
|
||||
@ -262,8 +262,8 @@ public class PreloadAndPlaybackCoordinationTest {
|
||||
lastCreatedActiveMediaPeriod.setPreparationComplete();
|
||||
ShadowLooper.idleMainLooper();
|
||||
|
||||
assertThat(preloadControlOnSourceInfoRefreshedCalledCounter.get()).isEqualTo(1);
|
||||
assertThat(preloadControlOnPreparedCalledCounter.get()).isEqualTo(0);
|
||||
assertThat(preloadControlOnSourcePreparedCalledCounter.get()).isEqualTo(1);
|
||||
assertThat(preloadControlOnTracksSelectedCalledCounter.get()).isEqualTo(0);
|
||||
assertThat(preloadControlOnUsedByPlayerCounter.get()).isEqualTo(1);
|
||||
assertThat(playbackSourceCallerOnSourceInfoRefreshedCalled.get()).isTrue();
|
||||
assertThat(playbackPeriodCallbackOnPreparedCalled.get()).isTrue();
|
||||
@ -277,8 +277,8 @@ public class PreloadAndPlaybackCoordinationTest {
|
||||
preloadMediaSource.preload(/* startPositionUs= */ 0L);
|
||||
ShadowLooper.idleMainLooper();
|
||||
|
||||
assertThat(preloadControlOnSourceInfoRefreshedCalledCounter.get()).isEqualTo(2);
|
||||
assertThat(preloadControlOnPreparedCalledCounter.get()).isEqualTo(1);
|
||||
assertThat(preloadControlOnSourcePreparedCalledCounter.get()).isEqualTo(2);
|
||||
assertThat(preloadControlOnTracksSelectedCalledCounter.get()).isEqualTo(1);
|
||||
assertThat(preloadControlOnUsedByPlayerCounter.get()).isEqualTo(1);
|
||||
}
|
||||
|
||||
@ -290,8 +290,8 @@ public class PreloadAndPlaybackCoordinationTest {
|
||||
playbackMediaSourceCaller, bandwidthMeter.getTransferListener(), PlayerId.UNSET);
|
||||
ShadowLooper.idleMainLooper();
|
||||
|
||||
assertThat(preloadControlOnSourceInfoRefreshedCalledCounter.get()).isEqualTo(1);
|
||||
assertThat(preloadControlOnPreparedCalledCounter.get()).isEqualTo(1);
|
||||
assertThat(preloadControlOnSourcePreparedCalledCounter.get()).isEqualTo(1);
|
||||
assertThat(preloadControlOnTracksSelectedCalledCounter.get()).isEqualTo(1);
|
||||
assertThat(preloadControlOnUsedByPlayerCounter.get()).isEqualTo(1);
|
||||
assertThat(playbackSourceCallerOnSourceInfoRefreshedCalled.get()).isTrue();
|
||||
assertThat(playbackPeriodCallbackOnPreparedCalled.get()).isTrue();
|
||||
@ -304,8 +304,8 @@ public class PreloadAndPlaybackCoordinationTest {
|
||||
preloadMediaSource.preload(/* startPositionUs= */ 0L);
|
||||
ShadowLooper.idleMainLooper();
|
||||
|
||||
assertThat(preloadControlOnSourceInfoRefreshedCalledCounter.get()).isEqualTo(2);
|
||||
assertThat(preloadControlOnPreparedCalledCounter.get()).isEqualTo(2);
|
||||
assertThat(preloadControlOnSourcePreparedCalledCounter.get()).isEqualTo(2);
|
||||
assertThat(preloadControlOnTracksSelectedCalledCounter.get()).isEqualTo(2);
|
||||
assertThat(preloadControlOnUsedByPlayerCounter.get()).isEqualTo(1);
|
||||
}
|
||||
|
||||
|
@ -107,22 +107,22 @@ public final class PreloadMediaSourceTest {
|
||||
|
||||
@Test
|
||||
public void preload_loadPeriodToTargetPreloadPosition() throws Exception {
|
||||
AtomicBoolean onTimelineRefreshedCalled = new AtomicBoolean();
|
||||
AtomicBoolean onPreparedCalled = new AtomicBoolean();
|
||||
AtomicBoolean onSourcePreparedCalled = new AtomicBoolean();
|
||||
AtomicBoolean onTracksSelectedCalled = new AtomicBoolean();
|
||||
AtomicBoolean onContinueLoadingStopped = new AtomicBoolean();
|
||||
AtomicReference<PreloadMediaSource> preloadMediaSourceReference = new AtomicReference<>();
|
||||
AtomicBoolean onUsedByPlayerCalled = new AtomicBoolean();
|
||||
PreloadMediaSource.PreloadControl preloadControl =
|
||||
new PreloadMediaSource.PreloadControl() {
|
||||
@Override
|
||||
public boolean onTimelineRefreshed(PreloadMediaSource mediaSource) {
|
||||
onTimelineRefreshedCalled.set(true);
|
||||
public boolean onSourcePrepared(PreloadMediaSource mediaSource) {
|
||||
onSourcePreparedCalled.set(true);
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onPrepared(PreloadMediaSource mediaSource) {
|
||||
onPreparedCalled.set(true);
|
||||
public boolean onTracksSelected(PreloadMediaSource mediaSource) {
|
||||
onTracksSelectedCalled.set(true);
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -167,31 +167,31 @@ public final class PreloadMediaSourceTest {
|
||||
preloadMediaSource.preload(/* startPositionUs= */ 0L);
|
||||
runMainLooperUntil(onContinueLoadingStopped::get);
|
||||
|
||||
assertThat(onTimelineRefreshedCalled.get()).isTrue();
|
||||
assertThat(onPreparedCalled.get()).isTrue();
|
||||
assertThat(onSourcePreparedCalled.get()).isTrue();
|
||||
assertThat(onTracksSelectedCalled.get()).isTrue();
|
||||
assertThat(onUsedByPlayerCalled.get()).isFalse();
|
||||
assertThat(preloadMediaSourceReference.get()).isSameInstanceAs(preloadMediaSource);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void preload_stopWhenPeriodPreparedByPreloadControl() throws Exception {
|
||||
AtomicBoolean onTimelineRefreshedCalled = new AtomicBoolean();
|
||||
AtomicBoolean onPreparedCalled = new AtomicBoolean();
|
||||
public void preload_stopWhenTracksSelectedByPreloadControl() throws Exception {
|
||||
AtomicBoolean onSourcePreparedCalled = new AtomicBoolean();
|
||||
AtomicBoolean onTracksSelectedCalled = new AtomicBoolean();
|
||||
AtomicReference<PreloadMediaSource> preloadMediaSourceReference = new AtomicReference<>();
|
||||
AtomicBoolean onContinueLoadingRequestedCalled = new AtomicBoolean();
|
||||
AtomicBoolean onUsedByPlayerCalled = new AtomicBoolean();
|
||||
PreloadMediaSource.PreloadControl preloadControl =
|
||||
new PreloadMediaSource.PreloadControl() {
|
||||
@Override
|
||||
public boolean onTimelineRefreshed(PreloadMediaSource mediaSource) {
|
||||
onTimelineRefreshedCalled.set(true);
|
||||
public boolean onSourcePrepared(PreloadMediaSource mediaSource) {
|
||||
onSourcePreparedCalled.set(true);
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onPrepared(PreloadMediaSource mediaSource) {
|
||||
public boolean onTracksSelected(PreloadMediaSource mediaSource) {
|
||||
preloadMediaSourceReference.set(mediaSource);
|
||||
onPreparedCalled.set(true);
|
||||
onTracksSelectedCalled.set(true);
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -230,33 +230,33 @@ public final class PreloadMediaSourceTest {
|
||||
.build());
|
||||
|
||||
preloadMediaSource.preload(/* startPositionUs= */ 0L);
|
||||
runMainLooperUntil(onPreparedCalled::get);
|
||||
runMainLooperUntil(onTracksSelectedCalled::get);
|
||||
|
||||
assertThat(onTimelineRefreshedCalled.get()).isTrue();
|
||||
assertThat(onSourcePreparedCalled.get()).isTrue();
|
||||
assertThat(preloadMediaSourceReference.get()).isSameInstanceAs(preloadMediaSource);
|
||||
assertThat(onContinueLoadingRequestedCalled.get()).isFalse();
|
||||
assertThat(onUsedByPlayerCalled.get()).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void preload_stopWhenTimelineRefreshedByPreloadControl() throws Exception {
|
||||
AtomicBoolean onTimelineRefreshedCalled = new AtomicBoolean();
|
||||
public void preload_stopWhenSourcePreparedByPreloadControl() throws Exception {
|
||||
AtomicBoolean onSourcePreparedCalled = new AtomicBoolean();
|
||||
AtomicReference<PreloadMediaSource> preloadMediaSourceReference = new AtomicReference<>();
|
||||
AtomicBoolean onPreparedCalled = new AtomicBoolean();
|
||||
AtomicBoolean onTracksSelectedCalled = new AtomicBoolean();
|
||||
AtomicBoolean onContinueLoadingRequestedCalled = new AtomicBoolean();
|
||||
AtomicBoolean onUsedByPlayerCalled = new AtomicBoolean();
|
||||
PreloadMediaSource.PreloadControl preloadControl =
|
||||
new PreloadMediaSource.PreloadControl() {
|
||||
@Override
|
||||
public boolean onTimelineRefreshed(PreloadMediaSource mediaSource) {
|
||||
public boolean onSourcePrepared(PreloadMediaSource mediaSource) {
|
||||
preloadMediaSourceReference.set(mediaSource);
|
||||
onTimelineRefreshedCalled.set(true);
|
||||
onSourcePreparedCalled.set(true);
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onPrepared(PreloadMediaSource mediaSource) {
|
||||
onPreparedCalled.set(true);
|
||||
public boolean onTracksSelected(PreloadMediaSource mediaSource) {
|
||||
onTracksSelectedCalled.set(true);
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -294,30 +294,30 @@ public final class PreloadMediaSourceTest {
|
||||
.build());
|
||||
|
||||
preloadMediaSource.preload(/* startPositionUs= */ 0L);
|
||||
runMainLooperUntil(onTimelineRefreshedCalled::get);
|
||||
runMainLooperUntil(onSourcePreparedCalled::get);
|
||||
|
||||
assertThat(preloadMediaSourceReference.get()).isSameInstanceAs(preloadMediaSource);
|
||||
assertThat(onPreparedCalled.get()).isFalse();
|
||||
assertThat(onTracksSelectedCalled.get()).isFalse();
|
||||
assertThat(onContinueLoadingRequestedCalled.get()).isFalse();
|
||||
assertThat(onUsedByPlayerCalled.get()).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void preload_whileSourceIsAccessedByExternalCaller_notProceedWithPreloading() {
|
||||
AtomicBoolean onTimelineRefreshedCalled = new AtomicBoolean(false);
|
||||
AtomicBoolean onPreparedCalled = new AtomicBoolean(false);
|
||||
AtomicBoolean onSourcePreparedCalled = new AtomicBoolean(false);
|
||||
AtomicBoolean onTracksSelectedCalled = new AtomicBoolean(false);
|
||||
AtomicBoolean onUsedByPlayerCalled = new AtomicBoolean();
|
||||
PreloadMediaSource.PreloadControl preloadControl =
|
||||
new PreloadMediaSource.PreloadControl() {
|
||||
@Override
|
||||
public boolean onTimelineRefreshed(PreloadMediaSource mediaSource) {
|
||||
onTimelineRefreshedCalled.set(true);
|
||||
public boolean onSourcePrepared(PreloadMediaSource mediaSource) {
|
||||
onSourcePreparedCalled.set(true);
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onPrepared(PreloadMediaSource mediaSource) {
|
||||
onPreparedCalled.set(true);
|
||||
public boolean onTracksSelected(PreloadMediaSource mediaSource) {
|
||||
onTracksSelectedCalled.set(true);
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -351,12 +351,7 @@ public final class PreloadMediaSourceTest {
|
||||
|
||||
AtomicReference<MediaSource> externalCallerMediaSourceReference = new AtomicReference<>();
|
||||
MediaSource.MediaSourceCaller externalCaller =
|
||||
new MediaSource.MediaSourceCaller() {
|
||||
@Override
|
||||
public void onSourceInfoRefreshed(MediaSource source, Timeline timeline) {
|
||||
externalCallerMediaSourceReference.set(source);
|
||||
}
|
||||
};
|
||||
(source, timeline) -> externalCallerMediaSourceReference.set(source);
|
||||
preloadMediaSource.prepareSource(
|
||||
externalCaller, bandwidthMeter.getTransferListener(), PlayerId.UNSET);
|
||||
shadowOf(Looper.getMainLooper()).idle();
|
||||
@ -364,29 +359,29 @@ public final class PreloadMediaSourceTest {
|
||||
shadowOf(Looper.getMainLooper()).idle();
|
||||
|
||||
assertThat(externalCallerMediaSourceReference.get()).isSameInstanceAs(preloadMediaSource);
|
||||
assertThat(onTimelineRefreshedCalled.get()).isFalse();
|
||||
assertThat(onPreparedCalled.get()).isFalse();
|
||||
assertThat(onSourcePreparedCalled.get()).isFalse();
|
||||
assertThat(onTracksSelectedCalled.get()).isFalse();
|
||||
assertThat(onUsedByPlayerCalled.get()).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void preload_loadToTheEndOfSource() throws Exception {
|
||||
AtomicBoolean onTimelineRefreshedCalled = new AtomicBoolean();
|
||||
AtomicBoolean onPreparedCalled = new AtomicBoolean();
|
||||
AtomicBoolean onSourcePreparedCalled = new AtomicBoolean();
|
||||
AtomicBoolean onTracksSelectedCalled = new AtomicBoolean();
|
||||
AtomicBoolean onContinueLoadingRequestedCalled = new AtomicBoolean();
|
||||
AtomicBoolean onLoadedToTheEndOfSourceCalled = new AtomicBoolean();
|
||||
AtomicBoolean onUsedByPlayerCalled = new AtomicBoolean();
|
||||
PreloadMediaSource.PreloadControl preloadControl =
|
||||
new PreloadMediaSource.PreloadControl() {
|
||||
@Override
|
||||
public boolean onTimelineRefreshed(PreloadMediaSource mediaSource) {
|
||||
onTimelineRefreshedCalled.set(true);
|
||||
public boolean onSourcePrepared(PreloadMediaSource mediaSource) {
|
||||
onSourcePreparedCalled.set(true);
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onPrepared(PreloadMediaSource mediaSource) {
|
||||
onPreparedCalled.set(true);
|
||||
public boolean onTracksSelected(PreloadMediaSource mediaSource) {
|
||||
onTracksSelectedCalled.set(true);
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -437,8 +432,8 @@ public final class PreloadMediaSourceTest {
|
||||
preloadMediaSource.preload(/* startPositionUs= */ 0L);
|
||||
runMainLooperUntil(onLoadedToTheEndOfSourceCalled::get);
|
||||
|
||||
assertThat(onTimelineRefreshedCalled.get()).isTrue();
|
||||
assertThat(onPreparedCalled.get()).isTrue();
|
||||
assertThat(onSourcePreparedCalled.get()).isTrue();
|
||||
assertThat(onTracksSelectedCalled.get()).isTrue();
|
||||
assertThat(onContinueLoadingRequestedCalled.get()).isTrue();
|
||||
assertThat(onUsedByPlayerCalled.get()).isFalse();
|
||||
}
|
||||
@ -446,20 +441,20 @@ public final class PreloadMediaSourceTest {
|
||||
@Test
|
||||
public void
|
||||
prepareSource_beforeSourceInfoRefreshedForPreloading_onlyInvokeExternalCallerOnSourceInfoRefreshed() {
|
||||
AtomicBoolean onTimelineRefreshedCalled = new AtomicBoolean(false);
|
||||
AtomicBoolean onPreparedCalled = new AtomicBoolean(false);
|
||||
AtomicBoolean onSourcePreparedCalled = new AtomicBoolean(false);
|
||||
AtomicBoolean onTracksSelectedCalled = new AtomicBoolean(false);
|
||||
AtomicBoolean onUsedByPlayerCalled = new AtomicBoolean();
|
||||
PreloadMediaSource.PreloadControl preloadControl =
|
||||
new PreloadMediaSource.PreloadControl() {
|
||||
@Override
|
||||
public boolean onTimelineRefreshed(PreloadMediaSource mediaSource) {
|
||||
onTimelineRefreshedCalled.set(true);
|
||||
public boolean onSourcePrepared(PreloadMediaSource mediaSource) {
|
||||
onSourcePreparedCalled.set(true);
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onPrepared(PreloadMediaSource mediaSource) {
|
||||
onPreparedCalled.set(true);
|
||||
public boolean onTracksSelected(PreloadMediaSource mediaSource) {
|
||||
onTracksSelectedCalled.set(true);
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -497,39 +492,34 @@ public final class PreloadMediaSourceTest {
|
||||
shadowOf(Looper.getMainLooper()).idle();
|
||||
AtomicReference<MediaSource> externalCallerMediaSourceReference = new AtomicReference<>();
|
||||
MediaSource.MediaSourceCaller externalCaller =
|
||||
new MediaSource.MediaSourceCaller() {
|
||||
@Override
|
||||
public void onSourceInfoRefreshed(MediaSource source, Timeline timeline) {
|
||||
externalCallerMediaSourceReference.set(source);
|
||||
}
|
||||
};
|
||||
(source, timeline) -> externalCallerMediaSourceReference.set(source);
|
||||
preloadMediaSource.prepareSource(
|
||||
externalCaller, bandwidthMeter.getTransferListener(), PlayerId.UNSET);
|
||||
wrappedMediaSource.setAllowPreparation(true);
|
||||
shadowOf(Looper.getMainLooper()).idle();
|
||||
|
||||
assertThat(externalCallerMediaSourceReference.get()).isSameInstanceAs(preloadMediaSource);
|
||||
assertThat(onTimelineRefreshedCalled.get()).isFalse();
|
||||
assertThat(onPreparedCalled.get()).isFalse();
|
||||
assertThat(onSourcePreparedCalled.get()).isFalse();
|
||||
assertThat(onTracksSelectedCalled.get()).isFalse();
|
||||
assertThat(onUsedByPlayerCalled.get()).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void prepareSource_afterPreload_immediatelyInvokeExternalCallerOnSourceInfoRefreshed() {
|
||||
AtomicBoolean onTimelineRefreshedCalled = new AtomicBoolean(false);
|
||||
AtomicBoolean onPreparedCalled = new AtomicBoolean(false);
|
||||
AtomicBoolean onSourcePreparedCalled = new AtomicBoolean(false);
|
||||
AtomicBoolean onTracksSelectedCalled = new AtomicBoolean(false);
|
||||
AtomicBoolean onUsedByPlayerCalled = new AtomicBoolean();
|
||||
PreloadMediaSource.PreloadControl preloadControl =
|
||||
new PreloadMediaSource.PreloadControl() {
|
||||
@Override
|
||||
public boolean onTimelineRefreshed(PreloadMediaSource mediaSource) {
|
||||
onTimelineRefreshedCalled.set(true);
|
||||
public boolean onSourcePrepared(PreloadMediaSource mediaSource) {
|
||||
onSourcePreparedCalled.set(true);
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onPrepared(PreloadMediaSource mediaSource) {
|
||||
onPreparedCalled.set(true);
|
||||
public boolean onTracksSelected(PreloadMediaSource mediaSource) {
|
||||
onTracksSelectedCalled.set(true);
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -566,17 +556,12 @@ public final class PreloadMediaSourceTest {
|
||||
shadowOf(Looper.getMainLooper()).idle();
|
||||
AtomicReference<MediaSource> externalCallerMediaSourceReference = new AtomicReference<>();
|
||||
MediaSource.MediaSourceCaller externalCaller =
|
||||
new MediaSource.MediaSourceCaller() {
|
||||
@Override
|
||||
public void onSourceInfoRefreshed(MediaSource source, Timeline timeline) {
|
||||
externalCallerMediaSourceReference.set(source);
|
||||
}
|
||||
};
|
||||
(source, timeline) -> externalCallerMediaSourceReference.set(source);
|
||||
preloadMediaSource.prepareSource(
|
||||
externalCaller, bandwidthMeter.getTransferListener(), PlayerId.UNSET);
|
||||
|
||||
assertThat(onTimelineRefreshedCalled.get()).isTrue();
|
||||
assertThat(onPreparedCalled.get()).isTrue();
|
||||
assertThat(onSourcePreparedCalled.get()).isTrue();
|
||||
assertThat(onTracksSelectedCalled.get()).isTrue();
|
||||
assertThat(externalCallerMediaSourceReference.get()).isSameInstanceAs(preloadMediaSource);
|
||||
assertThat(onUsedByPlayerCalled.get()).isTrue();
|
||||
}
|
||||
@ -584,17 +569,17 @@ public final class PreloadMediaSourceTest {
|
||||
@Test
|
||||
public void createPeriodWithSameMediaPeriodIdAndStartPosition_returnExistingPeriod()
|
||||
throws Exception {
|
||||
AtomicBoolean onPreparedCalled = new AtomicBoolean();
|
||||
AtomicBoolean onTracksSelectedCalled = new AtomicBoolean();
|
||||
PreloadMediaSource.PreloadControl preloadControl =
|
||||
new PreloadMediaSource.PreloadControl() {
|
||||
@Override
|
||||
public boolean onTimelineRefreshed(PreloadMediaSource mediaSource) {
|
||||
public boolean onSourcePrepared(PreloadMediaSource mediaSource) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onPrepared(PreloadMediaSource mediaSource) {
|
||||
onPreparedCalled.set(true);
|
||||
public boolean onTracksSelected(PreloadMediaSource mediaSource) {
|
||||
onTracksSelectedCalled.set(true);
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -668,12 +653,7 @@ public final class PreloadMediaSourceTest {
|
||||
shadowOf(Looper.getMainLooper()).idle();
|
||||
AtomicReference<Timeline> externalCallerSourceInfoTimelineReference = new AtomicReference<>();
|
||||
MediaSource.MediaSourceCaller externalCaller =
|
||||
new MediaSource.MediaSourceCaller() {
|
||||
@Override
|
||||
public void onSourceInfoRefreshed(MediaSource source, Timeline timeline) {
|
||||
externalCallerSourceInfoTimelineReference.set(timeline);
|
||||
}
|
||||
};
|
||||
(source, timeline) -> externalCallerSourceInfoTimelineReference.set(timeline);
|
||||
preloadMediaSource.prepareSource(
|
||||
externalCaller, bandwidthMeter.getTransferListener(), PlayerId.UNSET);
|
||||
Pair<Object, Long> periodPosition =
|
||||
@ -687,24 +667,24 @@ public final class PreloadMediaSourceTest {
|
||||
MediaSource.MediaPeriodId mediaPeriodId = new MediaSource.MediaPeriodId(periodPosition.first);
|
||||
preloadMediaSource.createPeriod(mediaPeriodId, allocator, periodPosition.second);
|
||||
|
||||
assertThat(onPreparedCalled.get()).isTrue();
|
||||
assertThat(onTracksSelectedCalled.get()).isTrue();
|
||||
verify(internalSourceReference.get()).createPeriod(any(), any(), anyLong());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void createPeriodWithSameMediaPeriodIdAndDifferentStartPosition_returnNewPeriod()
|
||||
throws Exception {
|
||||
AtomicBoolean onPreparedCalled = new AtomicBoolean();
|
||||
AtomicBoolean onTracksSelectedCalled = new AtomicBoolean();
|
||||
PreloadMediaSource.PreloadControl preloadControl =
|
||||
new PreloadMediaSource.PreloadControl() {
|
||||
@Override
|
||||
public boolean onTimelineRefreshed(PreloadMediaSource mediaSource) {
|
||||
public boolean onSourcePrepared(PreloadMediaSource mediaSource) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onPrepared(PreloadMediaSource mediaSource) {
|
||||
onPreparedCalled.set(true);
|
||||
public boolean onTracksSelected(PreloadMediaSource mediaSource) {
|
||||
onTracksSelectedCalled.set(true);
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -778,12 +758,7 @@ public final class PreloadMediaSourceTest {
|
||||
shadowOf(Looper.getMainLooper()).idle();
|
||||
AtomicReference<Timeline> externalCallerSourceInfoTimelineReference = new AtomicReference<>();
|
||||
MediaSource.MediaSourceCaller externalCaller =
|
||||
new MediaSource.MediaSourceCaller() {
|
||||
@Override
|
||||
public void onSourceInfoRefreshed(MediaSource source, Timeline timeline) {
|
||||
externalCallerSourceInfoTimelineReference.set(timeline);
|
||||
}
|
||||
};
|
||||
(source, timeline) -> externalCallerSourceInfoTimelineReference.set(timeline);
|
||||
preloadMediaSource.prepareSource(
|
||||
externalCaller, bandwidthMeter.getTransferListener(), PlayerId.UNSET);
|
||||
// Create a period from different position.
|
||||
@ -798,23 +773,23 @@ public final class PreloadMediaSourceTest {
|
||||
MediaSource.MediaPeriodId mediaPeriodId = new MediaSource.MediaPeriodId(periodPosition.first);
|
||||
preloadMediaSource.createPeriod(mediaPeriodId, allocator, periodPosition.second);
|
||||
|
||||
assertThat(onPreparedCalled.get()).isTrue();
|
||||
assertThat(onTracksSelectedCalled.get()).isTrue();
|
||||
verify(internalSourceReference.get(), times(2)).createPeriod(any(), any(), anyLong());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void clear_preloadingPeriodReleased() throws Exception {
|
||||
AtomicBoolean onPreparedCalled = new AtomicBoolean();
|
||||
AtomicBoolean onTracksSelectedCalled = new AtomicBoolean();
|
||||
PreloadMediaSource.PreloadControl preloadControl =
|
||||
new PreloadMediaSource.PreloadControl() {
|
||||
@Override
|
||||
public boolean onTimelineRefreshed(PreloadMediaSource mediaSource) {
|
||||
public boolean onSourcePrepared(PreloadMediaSource mediaSource) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onPrepared(PreloadMediaSource mediaSource) {
|
||||
onPreparedCalled.set(true);
|
||||
public boolean onTracksSelected(PreloadMediaSource mediaSource) {
|
||||
onTracksSelectedCalled.set(true);
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -871,7 +846,7 @@ public final class PreloadMediaSourceTest {
|
||||
.setUri(Uri.parse("asset://android_asset/media/mp4/sample.mp4"))
|
||||
.build());
|
||||
preloadMediaSource.preload(/* startPositionUs= */ 0L);
|
||||
runMainLooperUntil(onPreparedCalled::get);
|
||||
runMainLooperUntil(onTracksSelectedCalled::get);
|
||||
|
||||
preloadMediaSource.clear();
|
||||
shadowOf(Looper.getMainLooper()).idle();
|
||||
@ -884,12 +859,12 @@ public final class PreloadMediaSourceTest {
|
||||
PreloadMediaSource.PreloadControl preloadControl =
|
||||
new PreloadMediaSource.PreloadControl() {
|
||||
@Override
|
||||
public boolean onTimelineRefreshed(PreloadMediaSource mediaSource) {
|
||||
public boolean onSourcePrepared(PreloadMediaSource mediaSource) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onPrepared(PreloadMediaSource mediaSource) {
|
||||
public boolean onTracksSelected(PreloadMediaSource mediaSource) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -940,12 +915,7 @@ public final class PreloadMediaSourceTest {
|
||||
.build());
|
||||
AtomicBoolean externalCallerSourceInfoRefreshedCalled = new AtomicBoolean();
|
||||
MediaSource.MediaSourceCaller externalCaller =
|
||||
new MediaSource.MediaSourceCaller() {
|
||||
@Override
|
||||
public void onSourceInfoRefreshed(MediaSource source, Timeline timeline) {
|
||||
externalCallerSourceInfoRefreshedCalled.set(true);
|
||||
}
|
||||
};
|
||||
(source, timeline) -> externalCallerSourceInfoRefreshedCalled.set(true);
|
||||
preloadMediaSource.prepareSource(
|
||||
externalCaller, bandwidthMeter.getTransferListener(), PlayerId.UNSET);
|
||||
shadowOf(Looper.getMainLooper()).idle();
|
||||
@ -959,17 +929,17 @@ public final class PreloadMediaSourceTest {
|
||||
|
||||
@Test
|
||||
public void releaseSourceByAllExternalCallers_stillPreloading_notReleaseInternalSource() {
|
||||
AtomicBoolean onTimelineRefreshedCalled = new AtomicBoolean(false);
|
||||
AtomicBoolean onSourcePreparedCalled = new AtomicBoolean(false);
|
||||
PreloadMediaSource.PreloadControl preloadControl =
|
||||
new PreloadMediaSource.PreloadControl() {
|
||||
@Override
|
||||
public boolean onTimelineRefreshed(PreloadMediaSource mediaSource) {
|
||||
onTimelineRefreshedCalled.set(true);
|
||||
public boolean onSourcePrepared(PreloadMediaSource mediaSource) {
|
||||
onSourcePreparedCalled.set(true);
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onPrepared(PreloadMediaSource mediaSource) {
|
||||
public boolean onTracksSelected(PreloadMediaSource mediaSource) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -1020,19 +990,14 @@ public final class PreloadMediaSourceTest {
|
||||
.build());
|
||||
AtomicBoolean externalCallerSourceInfoRefreshedCalled = new AtomicBoolean();
|
||||
MediaSource.MediaSourceCaller externalCaller =
|
||||
new MediaSource.MediaSourceCaller() {
|
||||
@Override
|
||||
public void onSourceInfoRefreshed(MediaSource source, Timeline timeline) {
|
||||
externalCallerSourceInfoRefreshedCalled.set(true);
|
||||
}
|
||||
};
|
||||
(source, timeline) -> externalCallerSourceInfoRefreshedCalled.set(true);
|
||||
preloadMediaSource.preload(/* startPositionUs= */ 0L);
|
||||
shadowOf(Looper.getMainLooper()).idle();
|
||||
preloadMediaSource.prepareSource(
|
||||
externalCaller, bandwidthMeter.getTransferListener(), PlayerId.UNSET);
|
||||
preloadMediaSource.releaseSource(externalCaller);
|
||||
|
||||
assertThat(onTimelineRefreshedCalled.get()).isTrue();
|
||||
assertThat(onSourcePreparedCalled.get()).isTrue();
|
||||
assertThat(externalCallerSourceInfoRefreshedCalled.get()).isTrue();
|
||||
MediaSource internalSource = internalSourceReference.get();
|
||||
assertThat(internalSource).isNotNull();
|
||||
@ -1045,12 +1010,12 @@ public final class PreloadMediaSourceTest {
|
||||
PreloadMediaSource.PreloadControl preloadControl =
|
||||
new PreloadMediaSource.PreloadControl() {
|
||||
@Override
|
||||
public boolean onTimelineRefreshed(PreloadMediaSource mediaSource) {
|
||||
public boolean onSourcePrepared(PreloadMediaSource mediaSource) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onPrepared(PreloadMediaSource mediaSource) {
|
||||
public boolean onTracksSelected(PreloadMediaSource mediaSource) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -1102,19 +1067,9 @@ public final class PreloadMediaSourceTest {
|
||||
AtomicBoolean externalCaller1SourceInfoRefreshedCalled = new AtomicBoolean();
|
||||
AtomicBoolean externalCaller2SourceInfoRefreshedCalled = new AtomicBoolean();
|
||||
MediaSource.MediaSourceCaller externalCaller1 =
|
||||
new MediaSource.MediaSourceCaller() {
|
||||
@Override
|
||||
public void onSourceInfoRefreshed(MediaSource source, Timeline timeline) {
|
||||
externalCaller1SourceInfoRefreshedCalled.set(true);
|
||||
}
|
||||
};
|
||||
(source, timeline) -> externalCaller1SourceInfoRefreshedCalled.set(true);
|
||||
MediaSource.MediaSourceCaller externalCaller2 =
|
||||
new MediaSource.MediaSourceCaller() {
|
||||
@Override
|
||||
public void onSourceInfoRefreshed(MediaSource source, Timeline timeline) {
|
||||
externalCaller2SourceInfoRefreshedCalled.set(true);
|
||||
}
|
||||
};
|
||||
(source, timeline) -> externalCaller2SourceInfoRefreshedCalled.set(true);
|
||||
preloadMediaSource.prepareSource(
|
||||
externalCaller1, bandwidthMeter.getTransferListener(), PlayerId.UNSET);
|
||||
preloadMediaSource.prepareSource(
|
||||
@ -1131,17 +1086,17 @@ public final class PreloadMediaSourceTest {
|
||||
|
||||
@Test
|
||||
public void releasePreloadMediaSource_notUsedByExternalCallers_releaseInternalSource() {
|
||||
AtomicBoolean onTimelineRefreshedCalled = new AtomicBoolean(false);
|
||||
AtomicBoolean onSourcePreparedCalled = new AtomicBoolean(false);
|
||||
PreloadMediaSource.PreloadControl preloadControl =
|
||||
new PreloadMediaSource.PreloadControl() {
|
||||
@Override
|
||||
public boolean onTimelineRefreshed(PreloadMediaSource mediaSource) {
|
||||
onTimelineRefreshedCalled.set(true);
|
||||
public boolean onSourcePrepared(PreloadMediaSource mediaSource) {
|
||||
onSourcePreparedCalled.set(true);
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onPrepared(PreloadMediaSource mediaSource) {
|
||||
public boolean onTracksSelected(PreloadMediaSource mediaSource) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -1195,7 +1150,7 @@ public final class PreloadMediaSourceTest {
|
||||
preloadMediaSource.releasePreloadMediaSource();
|
||||
shadowOf(Looper.getMainLooper()).idle();
|
||||
|
||||
assertThat(onTimelineRefreshedCalled.get()).isTrue();
|
||||
assertThat(onSourcePreparedCalled.get()).isTrue();
|
||||
MediaSource internalSource = internalSourceReference.get();
|
||||
assertThat(internalSource).isNotNull();
|
||||
verify(internalSource).releaseSource(any());
|
||||
@ -1203,17 +1158,17 @@ public final class PreloadMediaSourceTest {
|
||||
|
||||
@Test
|
||||
public void releasePreloadMediaSource_stillUsedByExternalCallers_releaseInternalSource() {
|
||||
AtomicBoolean onTimelineRefreshedCalled = new AtomicBoolean(false);
|
||||
AtomicBoolean onSourcePreparedCalled = new AtomicBoolean(false);
|
||||
PreloadMediaSource.PreloadControl preloadControl =
|
||||
new PreloadMediaSource.PreloadControl() {
|
||||
@Override
|
||||
public boolean onTimelineRefreshed(PreloadMediaSource mediaSource) {
|
||||
onTimelineRefreshedCalled.set(true);
|
||||
public boolean onSourcePrepared(PreloadMediaSource mediaSource) {
|
||||
onSourcePreparedCalled.set(true);
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onPrepared(PreloadMediaSource mediaSource) {
|
||||
public boolean onTracksSelected(PreloadMediaSource mediaSource) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -1264,12 +1219,7 @@ public final class PreloadMediaSourceTest {
|
||||
.build());
|
||||
AtomicBoolean externalCallerSourceInfoRefreshedCalled = new AtomicBoolean();
|
||||
MediaSource.MediaSourceCaller externalCaller =
|
||||
new MediaSource.MediaSourceCaller() {
|
||||
@Override
|
||||
public void onSourceInfoRefreshed(MediaSource source, Timeline timeline) {
|
||||
externalCallerSourceInfoRefreshedCalled.set(true);
|
||||
}
|
||||
};
|
||||
(source, timeline) -> externalCallerSourceInfoRefreshedCalled.set(true);
|
||||
preloadMediaSource.preload(/* startPositionUs= */ 0L);
|
||||
shadowOf(Looper.getMainLooper()).idle();
|
||||
preloadMediaSource.prepareSource(
|
||||
@ -1278,7 +1228,7 @@ public final class PreloadMediaSourceTest {
|
||||
preloadMediaSource.releasePreloadMediaSource();
|
||||
shadowOf(Looper.getMainLooper()).idle();
|
||||
|
||||
assertThat(onTimelineRefreshedCalled.get()).isTrue();
|
||||
assertThat(onSourcePreparedCalled.get()).isTrue();
|
||||
assertThat(externalCallerSourceInfoRefreshedCalled.get()).isTrue();
|
||||
MediaSource internalSource = internalSourceReference.get();
|
||||
assertThat(internalSource).isNotNull();
|
||||
|
Loading…
x
Reference in New Issue
Block a user