Migrate usages of MediaItem.Subtitle to SubtitleConfiguration

Usages of the (already deprecated) Subtitle constructors were not
migrated, as it would require migrating to the Builder which is a more
involved change.

PiperOrigin-RevId: 400153139
This commit is contained in:
ibaker 2021-10-01 10:57:00 +01:00 committed by Oliver Woodman
parent d4343ed858
commit b192465bba
4 changed files with 43 additions and 37 deletions

View File

@ -196,12 +196,13 @@ public class IntentUtil {
if (localConfiguration.drmConfiguration != null) { if (localConfiguration.drmConfiguration != null) {
addDrmConfigurationToIntent(localConfiguration.drmConfiguration, intent, extrasKeySuffix); addDrmConfigurationToIntent(localConfiguration.drmConfiguration, intent, extrasKeySuffix);
} }
if (!localConfiguration.subtitles.isEmpty()) { if (!localConfiguration.subtitleConfigurations.isEmpty()) {
checkState(localConfiguration.subtitles.size() == 1); checkState(localConfiguration.subtitleConfigurations.size() == 1);
MediaItem.Subtitle subtitle = localConfiguration.subtitles.get(0); MediaItem.SubtitleConfiguration subtitleConfiguration =
intent.putExtra(SUBTITLE_URI_EXTRA + extrasKeySuffix, subtitle.uri.toString()); localConfiguration.subtitleConfigurations.get(0);
intent.putExtra(SUBTITLE_MIME_TYPE_EXTRA + extrasKeySuffix, subtitle.mimeType); intent.putExtra(SUBTITLE_URI_EXTRA + extrasKeySuffix, subtitleConfiguration.uri.toString());
intent.putExtra(SUBTITLE_LANGUAGE_EXTRA + extrasKeySuffix, subtitle.language); intent.putExtra(SUBTITLE_MIME_TYPE_EXTRA + extrasKeySuffix, subtitleConfiguration.mimeType);
intent.putExtra(SUBTITLE_LANGUAGE_EXTRA + extrasKeySuffix, subtitleConfiguration.language);
} }
} }

View File

@ -233,8 +233,8 @@ public final class Util {
if (isLocalFileUri(mediaItem.localConfiguration.uri)) { if (isLocalFileUri(mediaItem.localConfiguration.uri)) {
return requestExternalStoragePermission(activity); return requestExternalStoragePermission(activity);
} }
for (int i = 0; i < mediaItem.localConfiguration.subtitles.size(); i++) { for (int i = 0; i < mediaItem.localConfiguration.subtitleConfigurations.size(); i++) {
if (isLocalFileUri(mediaItem.localConfiguration.subtitles.get(i).uri)) { if (isLocalFileUri(mediaItem.localConfiguration.subtitleConfigurations.get(i).uri)) {
return requestExternalStoragePermission(activity); return requestExternalStoragePermission(activity);
} }
} }
@ -261,8 +261,8 @@ public final class Util {
if (isTrafficRestricted(mediaItem.localConfiguration.uri)) { if (isTrafficRestricted(mediaItem.localConfiguration.uri)) {
return false; return false;
} }
for (int i = 0; i < mediaItem.localConfiguration.subtitles.size(); i++) { for (int i = 0; i < mediaItem.localConfiguration.subtitleConfigurations.size(); i++) {
if (isTrafficRestricted(mediaItem.localConfiguration.subtitles.get(i).uri)) { if (isTrafficRestricted(mediaItem.localConfiguration.subtitleConfigurations.get(i).uri)) {
return false; return false;
} }
} }

View File

@ -173,8 +173,8 @@ public final class DefaultMediaSourceFactory implements MediaSourceFactory {
/** /**
* Sets whether a {@link ProgressiveMediaSource} or {@link SingleSampleMediaSource} is constructed * Sets whether a {@link ProgressiveMediaSource} or {@link SingleSampleMediaSource} is constructed
* to handle {@link MediaItem.LocalConfiguration#subtitles}. Defaults to false (i.e. {@link * to handle {@link MediaItem.LocalConfiguration#subtitleConfigurations}. Defaults to false (i.e.
* SingleSampleMediaSource}. * {@link SingleSampleMediaSource}.
* *
* <p>This method is experimental, and will be renamed or removed in a future release. * <p>This method is experimental, and will be renamed or removed in a future release.
* *
@ -375,13 +375,14 @@ public final class DefaultMediaSourceFactory implements MediaSourceFactory {
MediaSource mediaSource = mediaSourceFactory.createMediaSource(mediaItem); MediaSource mediaSource = mediaSourceFactory.createMediaSource(mediaItem);
List<MediaItem.Subtitle> subtitles = castNonNull(mediaItem.localConfiguration).subtitles; List<MediaItem.SubtitleConfiguration> subtitleConfigurations =
if (!subtitles.isEmpty()) { castNonNull(mediaItem.localConfiguration).subtitleConfigurations;
MediaSource[] mediaSources = new MediaSource[subtitles.size() + 1]; if (!subtitleConfigurations.isEmpty()) {
MediaSource[] mediaSources = new MediaSource[subtitleConfigurations.size() + 1];
mediaSources[0] = mediaSource; mediaSources[0] = mediaSource;
for (int i = 0; i < subtitles.size(); i++) { for (int i = 0; i < subtitleConfigurations.size(); i++) {
if (useProgressiveMediaSourceForSubtitles if (useProgressiveMediaSourceForSubtitles
&& MimeTypes.TEXT_VTT.equals(subtitles.get(i).mimeType)) { && MimeTypes.TEXT_VTT.equals(subtitleConfigurations.get(i).mimeType)) {
int index = i; int index = i;
ProgressiveMediaSource.Factory progressiveMediaSourceFactory = ProgressiveMediaSource.Factory progressiveMediaSourceFactory =
new ProgressiveMediaSource.Factory( new ProgressiveMediaSource.Factory(
@ -391,23 +392,23 @@ public final class DefaultMediaSourceFactory implements MediaSourceFactory {
new SubtitleExtractor( new SubtitleExtractor(
new WebvttDecoder(), new WebvttDecoder(),
new Format.Builder() new Format.Builder()
.setSampleMimeType(subtitles.get(index).mimeType) .setSampleMimeType(subtitleConfigurations.get(index).mimeType)
.setLanguage(subtitles.get(index).language) .setLanguage(subtitleConfigurations.get(index).language)
.setSelectionFlags(subtitles.get(index).selectionFlags) .setSelectionFlags(subtitleConfigurations.get(index).selectionFlags)
.setRoleFlags(subtitles.get(index).roleFlags) .setRoleFlags(subtitleConfigurations.get(index).roleFlags)
.setLabel(subtitles.get(index).label) .setLabel(subtitleConfigurations.get(index).label)
.build()) .build())
}); });
mediaSources[i + 1] = mediaSources[i + 1] =
progressiveMediaSourceFactory.createMediaSource( progressiveMediaSourceFactory.createMediaSource(
MediaItem.fromUri(subtitles.get(i).uri.toString())); MediaItem.fromUri(subtitleConfigurations.get(i).uri.toString()));
} else { } else {
SingleSampleMediaSource.Factory singleSampleSourceFactory = SingleSampleMediaSource.Factory singleSampleSourceFactory =
new SingleSampleMediaSource.Factory(dataSourceFactory) new SingleSampleMediaSource.Factory(dataSourceFactory)
.setLoadErrorHandlingPolicy(loadErrorHandlingPolicy); .setLoadErrorHandlingPolicy(loadErrorHandlingPolicy);
mediaSources[i + 1] = mediaSources[i + 1] =
singleSampleSourceFactory.createMediaSource( singleSampleSourceFactory.createMediaSource(
subtitles.get(i), /* durationUs= */ C.TIME_UNSET); subtitleConfigurations.get(i), /* durationUs= */ C.TIME_UNSET);
} }
} }

View File

@ -30,7 +30,7 @@ import com.google.android.exoplayer2.upstream.DefaultLoadErrorHandlingPolicy;
import com.google.android.exoplayer2.upstream.LoadErrorHandlingPolicy; import com.google.android.exoplayer2.upstream.LoadErrorHandlingPolicy;
import com.google.android.exoplayer2.upstream.TransferListener; import com.google.android.exoplayer2.upstream.TransferListener;
import com.google.android.exoplayer2.util.MimeTypes; import com.google.android.exoplayer2.util.MimeTypes;
import java.util.Collections; import com.google.common.collect.ImmutableList;
/** /**
* Loads data at a given {@link Uri} as a single sample belonging to a single {@link MediaPeriod}. * Loads data at a given {@link Uri} as a single sample belonging to a single {@link MediaPeriod}.
@ -115,14 +115,15 @@ public final class SingleSampleMediaSource extends BaseMediaSource {
/** /**
* Returns a new {@link SingleSampleMediaSource} using the current parameters. * Returns a new {@link SingleSampleMediaSource} using the current parameters.
* *
* @param subtitle The {@link MediaItem.Subtitle}. * @param subtitleConfiguration The {@link MediaItem.SubtitleConfiguration}.
* @param durationUs The duration of the media stream in microseconds. * @param durationUs The duration of the media stream in microseconds.
* @return The new {@link SingleSampleMediaSource}. * @return The new {@link SingleSampleMediaSource}.
*/ */
public SingleSampleMediaSource createMediaSource(MediaItem.Subtitle subtitle, long durationUs) { public SingleSampleMediaSource createMediaSource(
MediaItem.SubtitleConfiguration subtitleConfiguration, long durationUs) {
return new SingleSampleMediaSource( return new SingleSampleMediaSource(
trackId, trackId,
subtitle, subtitleConfiguration,
dataSourceFactory, dataSourceFactory,
durationUs, durationUs,
loadErrorHandlingPolicy, loadErrorHandlingPolicy,
@ -144,7 +145,7 @@ public final class SingleSampleMediaSource extends BaseMediaSource {
private SingleSampleMediaSource( private SingleSampleMediaSource(
@Nullable String trackId, @Nullable String trackId,
MediaItem.Subtitle subtitle, MediaItem.SubtitleConfiguration subtitleConfiguration,
DataSource.Factory dataSourceFactory, DataSource.Factory dataSourceFactory,
long durationUs, long durationUs,
LoadErrorHandlingPolicy loadErrorHandlingPolicy, LoadErrorHandlingPolicy loadErrorHandlingPolicy,
@ -157,21 +158,24 @@ public final class SingleSampleMediaSource extends BaseMediaSource {
mediaItem = mediaItem =
new MediaItem.Builder() new MediaItem.Builder()
.setUri(Uri.EMPTY) .setUri(Uri.EMPTY)
.setMediaId(subtitle.uri.toString()) .setMediaId(subtitleConfiguration.uri.toString())
.setSubtitles(Collections.singletonList(subtitle)) .setSubtitleConfigurations(ImmutableList.of(subtitleConfiguration))
.setTag(tag) .setTag(tag)
.build(); .build();
format = format =
new Format.Builder() new Format.Builder()
.setId(trackId) .setId(trackId)
.setSampleMimeType(firstNonNull(subtitle.mimeType, MimeTypes.TEXT_UNKNOWN)) .setSampleMimeType(firstNonNull(subtitleConfiguration.mimeType, MimeTypes.TEXT_UNKNOWN))
.setLanguage(subtitle.language) .setLanguage(subtitleConfiguration.language)
.setSelectionFlags(subtitle.selectionFlags) .setSelectionFlags(subtitleConfiguration.selectionFlags)
.setRoleFlags(subtitle.roleFlags) .setRoleFlags(subtitleConfiguration.roleFlags)
.setLabel(subtitle.label) .setLabel(subtitleConfiguration.label)
.build(); .build();
dataSpec = dataSpec =
new DataSpec.Builder().setUri(subtitle.uri).setFlags(DataSpec.FLAG_ALLOW_GZIP).build(); new DataSpec.Builder()
.setUri(subtitleConfiguration.uri)
.setFlags(DataSpec.FLAG_ALLOW_GZIP)
.build();
timeline = timeline =
new SinglePeriodTimeline( new SinglePeriodTimeline(
durationUs, durationUs,