Limit dynamic scheduling by the playing period transition point

In the case of replace stream media item transition, it is important that dynamic scheduling does not set the next work task later than the transition boundary.

#cherrypick

PiperOrigin-RevId: 723502204
This commit is contained in:
michaelkatz 2025-02-05 07:26:30 -08:00 committed by Copybara-Service
parent 85158ec841
commit edc44eefd2

View File

@ -1377,6 +1377,16 @@ import java.util.concurrent.atomic.AtomicBoolean;
rendererHolder.getMinDurationToProgressUs( rendererHolder.getMinDurationToProgressUs(
rendererPositionUs, rendererPositionElapsedRealtimeUs))); rendererPositionUs, rendererPositionElapsedRealtimeUs)));
} }
// Do not schedule next doSomeWork past the playing period transition point.
MediaPeriodHolder nextPlayingPeriodHolder =
queue.getPlayingPeriod() != null ? queue.getPlayingPeriod().getNext() : null;
if (nextPlayingPeriodHolder != null
&& rendererPositionUs
+ msToUs(wakeUpTimeIntervalMs) * playbackInfo.playbackParameters.speed
>= nextPlayingPeriodHolder.getStartPositionRendererTime()) {
wakeUpTimeIntervalMs = min(wakeUpTimeIntervalMs, BUFFERING_MAXIMUM_INTERVAL_MS);
}
} }
handler.sendEmptyMessageAtTime( handler.sendEmptyMessageAtTime(
MSG_DO_SOME_WORK, thisOperationStartTimeMs + wakeUpTimeIntervalMs); MSG_DO_SOME_WORK, thisOperationStartTimeMs + wakeUpTimeIntervalMs);