From 7b0f83690cacd3c3560879309497ce9c830526b5 Mon Sep 17 00:00:00 2001 From: Colin Kho Date: Thu, 22 Aug 2024 16:24:44 -0700 Subject: [PATCH 1/2] Add LoadingInfo as a parameter to continueLoading on MediaPeriodHolder --- .../media3/exoplayer/ExoPlayerImplInternal.java | 8 ++++++-- .../media3/exoplayer/MediaPeriodHolder.java | 17 +++-------------- 2 files changed, 9 insertions(+), 16 deletions(-) diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/ExoPlayerImplInternal.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/ExoPlayerImplInternal.java index 183b718932..6bf524818b 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/ExoPlayerImplInternal.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/ExoPlayerImplInternal.java @@ -2647,10 +2647,14 @@ import java.util.concurrent.atomic.AtomicBoolean; private void maybeContinueLoading() { shouldContinueLoading = shouldContinueLoading(); if (shouldContinueLoading) { + LoadingInfo loadingInfo = new LoadingInfo.Builder() + .setPlaybackPositionUs(queue.getLoadingPeriod().toPeriodTime(rendererPositionUs)) + .setPlaybackSpeed(mediaClock.getPlaybackParameters().speed) + .setLastRebufferRealtimeMs(lastRebufferRealtimeMs) + .build(); queue .getLoadingPeriod() - .continueLoading( - rendererPositionUs, mediaClock.getPlaybackParameters().speed, lastRebufferRealtimeMs); + .continueLoading(loadingInfo); } updateIsLoading(); } diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/MediaPeriodHolder.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/MediaPeriodHolder.java index e5721c40c9..a2dcbfdb8e 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/MediaPeriodHolder.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/MediaPeriodHolder.java @@ -238,22 +238,11 @@ import java.io.IOException; * Continues loading the media period at the given renderer position. Should only be called if * this is the loading media period. * - * @param rendererPositionUs The load position in renderer time, in microseconds. - * @param playbackSpeed The playback speed indicating the current rate of playback. - * @param lastRebufferRealtimeMs The time at which the last rebuffering occurred, in milliseconds - * since boot including time spent in sleep. The time base used is the same as that measured - * by {@link android.os.SystemClock#elapsedRealtime}. + * @param loadingInfo The {@link LoadingInfo} when attempting to continue loading. */ - public void continueLoading( - long rendererPositionUs, float playbackSpeed, long lastRebufferRealtimeMs) { + public void continueLoading(LoadingInfo loadingInfo) { checkState(isLoadingMediaPeriod()); - long loadingPeriodPositionUs = toPeriodTime(rendererPositionUs); - mediaPeriod.continueLoading( - new LoadingInfo.Builder() - .setPlaybackPositionUs(loadingPeriodPositionUs) - .setPlaybackSpeed(playbackSpeed) - .setLastRebufferRealtimeMs(lastRebufferRealtimeMs) - .build()); + mediaPeriod.continueLoading(loadingInfo); } /** From bf88128383e876274ff763c2ae25c2ecc70de978 Mon Sep 17 00:00:00 2001 From: tonihei Date: Fri, 27 Sep 2024 14:47:21 +0100 Subject: [PATCH 2/2] Formatting and additional call for preloading period --- .../exoplayer/ExoPlayerImplInternal.java | 21 +++++++++++-------- .../media3/exoplayer/MediaPeriodHolder.java | 5 +++-- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/ExoPlayerImplInternal.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/ExoPlayerImplInternal.java index 6bf524818b..14854a9284 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/ExoPlayerImplInternal.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/ExoPlayerImplInternal.java @@ -2380,7 +2380,11 @@ import java.util.concurrent.atomic.AtomicBoolean; preloading.prepare(/* callback= */ this, preloading.info.startPositionUs); } else { preloading.continueLoading( - rendererPositionUs, playbackInfo.playbackParameters.speed, lastRebufferRealtimeMs); + new LoadingInfo.Builder() + .setPlaybackPositionUs(preloading.toPeriodTime(rendererPositionUs)) + .setPlaybackSpeed(mediaClock.getPlaybackParameters().speed) + .setLastRebufferRealtimeMs(lastRebufferRealtimeMs) + .build()); } } @@ -2647,14 +2651,13 @@ import java.util.concurrent.atomic.AtomicBoolean; private void maybeContinueLoading() { shouldContinueLoading = shouldContinueLoading(); if (shouldContinueLoading) { - LoadingInfo loadingInfo = new LoadingInfo.Builder() - .setPlaybackPositionUs(queue.getLoadingPeriod().toPeriodTime(rendererPositionUs)) - .setPlaybackSpeed(mediaClock.getPlaybackParameters().speed) - .setLastRebufferRealtimeMs(lastRebufferRealtimeMs) - .build(); - queue - .getLoadingPeriod() - .continueLoading(loadingInfo); + MediaPeriodHolder loadingPeriod = checkNotNull(queue.getLoadingPeriod()); + loadingPeriod.continueLoading( + new LoadingInfo.Builder() + .setPlaybackPositionUs(loadingPeriod.toPeriodTime(rendererPositionUs)) + .setPlaybackSpeed(mediaClock.getPlaybackParameters().speed) + .setLastRebufferRealtimeMs(lastRebufferRealtimeMs) + .build()); } updateIsLoading(); } diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/MediaPeriodHolder.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/MediaPeriodHolder.java index a2dcbfdb8e..cb82d463be 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/MediaPeriodHolder.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/MediaPeriodHolder.java @@ -235,10 +235,11 @@ import java.io.IOException; } /** - * Continues loading the media period at the given renderer position. Should only be called if + * Continues loading the media period with the given {@link LoadingInfo}. Should only be called if * this is the loading media period. * - * @param loadingInfo The {@link LoadingInfo} when attempting to continue loading. + * @param loadingInfo The {@link LoadingInfo} about the current player state relevant to this load + * request. */ public void continueLoading(LoadingInfo loadingInfo) { checkState(isLoadingMediaPeriod());