Simplify MediaItem.Builder interactions in DefaultMediaSourceFactory

This takes advantage of the new MediaItem.LiveConfiguration.Builder

This change will always allocate a new LiveConfiguration.Builder and
LiveConfiguration, but preserves the behaviour of keeping the same
MediaItem instance if no values have changed.

PiperOrigin-RevId: 397961427
This commit is contained in:
ibaker 2021-09-21 12:10:22 +01:00 committed by Christos Tsilopoulos
parent ea45f9ffb8
commit ab484a4b11

View File

@ -350,42 +350,29 @@ public final class DefaultMediaSourceFactory implements MediaSourceFactory {
Assertions.checkNotNull( Assertions.checkNotNull(
mediaSourceFactory, "No suitable media source factory found for content type: " + type); mediaSourceFactory, "No suitable media source factory found for content type: " + type);
// Make sure to retain the very same media item instance, if no value needs to be overridden. MediaItem.LiveConfiguration.Builder liveConfigurationBuilder =
if ((mediaItem.liveConfiguration.targetOffsetMs == C.TIME_UNSET mediaItem.liveConfiguration.buildUpon();
&& liveTargetOffsetMs != C.TIME_UNSET) if (mediaItem.liveConfiguration.targetOffsetMs == C.TIME_UNSET) {
|| (mediaItem.liveConfiguration.minPlaybackSpeed == C.RATE_UNSET liveConfigurationBuilder.setTargetOffsetMs(liveTargetOffsetMs);
&& liveMinSpeed != C.RATE_UNSET)
|| (mediaItem.liveConfiguration.maxPlaybackSpeed == C.RATE_UNSET
&& liveMaxSpeed != C.RATE_UNSET)
|| (mediaItem.liveConfiguration.minOffsetMs == C.TIME_UNSET
&& liveMinOffsetMs != C.TIME_UNSET)
|| (mediaItem.liveConfiguration.maxOffsetMs == C.TIME_UNSET
&& liveMaxOffsetMs != C.TIME_UNSET)) {
mediaItem =
mediaItem
.buildUpon()
.setLiveTargetOffsetMs(
mediaItem.liveConfiguration.targetOffsetMs == C.TIME_UNSET
? liveTargetOffsetMs
: mediaItem.liveConfiguration.targetOffsetMs)
.setLiveMinPlaybackSpeed(
mediaItem.liveConfiguration.minPlaybackSpeed == C.RATE_UNSET
? liveMinSpeed
: mediaItem.liveConfiguration.minPlaybackSpeed)
.setLiveMaxPlaybackSpeed(
mediaItem.liveConfiguration.maxPlaybackSpeed == C.RATE_UNSET
? liveMaxSpeed
: mediaItem.liveConfiguration.maxPlaybackSpeed)
.setLiveMinOffsetMs(
mediaItem.liveConfiguration.minOffsetMs == C.TIME_UNSET
? liveMinOffsetMs
: mediaItem.liveConfiguration.minOffsetMs)
.setLiveMaxOffsetMs(
mediaItem.liveConfiguration.maxOffsetMs == C.TIME_UNSET
? liveMaxOffsetMs
: mediaItem.liveConfiguration.maxOffsetMs)
.build();
} }
if (mediaItem.liveConfiguration.minPlaybackSpeed == C.RATE_UNSET) {
liveConfigurationBuilder.setMinPlaybackSpeed(liveMinSpeed);
}
if (mediaItem.liveConfiguration.maxPlaybackSpeed == C.RATE_UNSET) {
liveConfigurationBuilder.setMaxPlaybackSpeed(liveMaxSpeed);
}
if (mediaItem.liveConfiguration.minOffsetMs == C.TIME_UNSET) {
liveConfigurationBuilder.setMinOffsetMs(liveMinOffsetMs);
}
if (mediaItem.liveConfiguration.maxOffsetMs == C.TIME_UNSET) {
liveConfigurationBuilder.setMaxOffsetMs(liveMaxOffsetMs);
}
MediaItem.LiveConfiguration liveConfiguration = liveConfigurationBuilder.build();
// Make sure to retain the very same media item instance, if no value needs to be overridden.
if (!liveConfiguration.equals(mediaItem.liveConfiguration)) {
mediaItem = mediaItem.buildUpon().setLiveConfiguration(liveConfiguration).build();
}
MediaSource mediaSource = mediaSourceFactory.createMediaSource(mediaItem); MediaSource mediaSource = mediaSourceFactory.createMediaSource(mediaItem);
List<MediaItem.Subtitle> subtitles = castNonNull(mediaItem.playbackProperties).subtitles; List<MediaItem.Subtitle> subtitles = castNonNull(mediaItem.playbackProperties).subtitles;