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) {
addDrmConfigurationToIntent(localConfiguration.drmConfiguration, intent, extrasKeySuffix);
}
if (!localConfiguration.subtitles.isEmpty()) {
checkState(localConfiguration.subtitles.size() == 1);
MediaItem.Subtitle subtitle = localConfiguration.subtitles.get(0);
intent.putExtra(SUBTITLE_URI_EXTRA + extrasKeySuffix, subtitle.uri.toString());
intent.putExtra(SUBTITLE_MIME_TYPE_EXTRA + extrasKeySuffix, subtitle.mimeType);
intent.putExtra(SUBTITLE_LANGUAGE_EXTRA + extrasKeySuffix, subtitle.language);
if (!localConfiguration.subtitleConfigurations.isEmpty()) {
checkState(localConfiguration.subtitleConfigurations.size() == 1);
MediaItem.SubtitleConfiguration subtitleConfiguration =
localConfiguration.subtitleConfigurations.get(0);
intent.putExtra(SUBTITLE_URI_EXTRA + extrasKeySuffix, subtitleConfiguration.uri.toString());
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)) {
return requestExternalStoragePermission(activity);
}
for (int i = 0; i < mediaItem.localConfiguration.subtitles.size(); i++) {
if (isLocalFileUri(mediaItem.localConfiguration.subtitles.get(i).uri)) {
for (int i = 0; i < mediaItem.localConfiguration.subtitleConfigurations.size(); i++) {
if (isLocalFileUri(mediaItem.localConfiguration.subtitleConfigurations.get(i).uri)) {
return requestExternalStoragePermission(activity);
}
}
@ -261,8 +261,8 @@ public final class Util {
if (isTrafficRestricted(mediaItem.localConfiguration.uri)) {
return false;
}
for (int i = 0; i < mediaItem.localConfiguration.subtitles.size(); i++) {
if (isTrafficRestricted(mediaItem.localConfiguration.subtitles.get(i).uri)) {
for (int i = 0; i < mediaItem.localConfiguration.subtitleConfigurations.size(); i++) {
if (isTrafficRestricted(mediaItem.localConfiguration.subtitleConfigurations.get(i).uri)) {
return false;
}
}

View File

@ -173,8 +173,8 @@ public final class DefaultMediaSourceFactory implements MediaSourceFactory {
/**
* Sets whether a {@link ProgressiveMediaSource} or {@link SingleSampleMediaSource} is constructed
* to handle {@link MediaItem.LocalConfiguration#subtitles}. Defaults to false (i.e. {@link
* SingleSampleMediaSource}.
* to handle {@link MediaItem.LocalConfiguration#subtitleConfigurations}. Defaults to false (i.e.
* {@link SingleSampleMediaSource}.
*
* <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);
List<MediaItem.Subtitle> subtitles = castNonNull(mediaItem.localConfiguration).subtitles;
if (!subtitles.isEmpty()) {
MediaSource[] mediaSources = new MediaSource[subtitles.size() + 1];
List<MediaItem.SubtitleConfiguration> subtitleConfigurations =
castNonNull(mediaItem.localConfiguration).subtitleConfigurations;
if (!subtitleConfigurations.isEmpty()) {
MediaSource[] mediaSources = new MediaSource[subtitleConfigurations.size() + 1];
mediaSources[0] = mediaSource;
for (int i = 0; i < subtitles.size(); i++) {
for (int i = 0; i < subtitleConfigurations.size(); i++) {
if (useProgressiveMediaSourceForSubtitles
&& MimeTypes.TEXT_VTT.equals(subtitles.get(i).mimeType)) {
&& MimeTypes.TEXT_VTT.equals(subtitleConfigurations.get(i).mimeType)) {
int index = i;
ProgressiveMediaSource.Factory progressiveMediaSourceFactory =
new ProgressiveMediaSource.Factory(
@ -391,23 +392,23 @@ public final class DefaultMediaSourceFactory implements MediaSourceFactory {
new SubtitleExtractor(
new WebvttDecoder(),
new Format.Builder()
.setSampleMimeType(subtitles.get(index).mimeType)
.setLanguage(subtitles.get(index).language)
.setSelectionFlags(subtitles.get(index).selectionFlags)
.setRoleFlags(subtitles.get(index).roleFlags)
.setLabel(subtitles.get(index).label)
.setSampleMimeType(subtitleConfigurations.get(index).mimeType)
.setLanguage(subtitleConfigurations.get(index).language)
.setSelectionFlags(subtitleConfigurations.get(index).selectionFlags)
.setRoleFlags(subtitleConfigurations.get(index).roleFlags)
.setLabel(subtitleConfigurations.get(index).label)
.build())
});
mediaSources[i + 1] =
progressiveMediaSourceFactory.createMediaSource(
MediaItem.fromUri(subtitles.get(i).uri.toString()));
MediaItem.fromUri(subtitleConfigurations.get(i).uri.toString()));
} else {
SingleSampleMediaSource.Factory singleSampleSourceFactory =
new SingleSampleMediaSource.Factory(dataSourceFactory)
.setLoadErrorHandlingPolicy(loadErrorHandlingPolicy);
mediaSources[i + 1] =
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.TransferListener;
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}.
@ -115,14 +115,15 @@ public final class SingleSampleMediaSource extends BaseMediaSource {
/**
* 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.
* @return The new {@link SingleSampleMediaSource}.
*/
public SingleSampleMediaSource createMediaSource(MediaItem.Subtitle subtitle, long durationUs) {
public SingleSampleMediaSource createMediaSource(
MediaItem.SubtitleConfiguration subtitleConfiguration, long durationUs) {
return new SingleSampleMediaSource(
trackId,
subtitle,
subtitleConfiguration,
dataSourceFactory,
durationUs,
loadErrorHandlingPolicy,
@ -144,7 +145,7 @@ public final class SingleSampleMediaSource extends BaseMediaSource {
private SingleSampleMediaSource(
@Nullable String trackId,
MediaItem.Subtitle subtitle,
MediaItem.SubtitleConfiguration subtitleConfiguration,
DataSource.Factory dataSourceFactory,
long durationUs,
LoadErrorHandlingPolicy loadErrorHandlingPolicy,
@ -157,21 +158,24 @@ public final class SingleSampleMediaSource extends BaseMediaSource {
mediaItem =
new MediaItem.Builder()
.setUri(Uri.EMPTY)
.setMediaId(subtitle.uri.toString())
.setSubtitles(Collections.singletonList(subtitle))
.setMediaId(subtitleConfiguration.uri.toString())
.setSubtitleConfigurations(ImmutableList.of(subtitleConfiguration))
.setTag(tag)
.build();
format =
new Format.Builder()
.setId(trackId)
.setSampleMimeType(firstNonNull(subtitle.mimeType, MimeTypes.TEXT_UNKNOWN))
.setLanguage(subtitle.language)
.setSelectionFlags(subtitle.selectionFlags)
.setRoleFlags(subtitle.roleFlags)
.setLabel(subtitle.label)
.setSampleMimeType(firstNonNull(subtitleConfiguration.mimeType, MimeTypes.TEXT_UNKNOWN))
.setLanguage(subtitleConfiguration.language)
.setSelectionFlags(subtitleConfiguration.selectionFlags)
.setRoleFlags(subtitleConfiguration.roleFlags)
.setLabel(subtitleConfiguration.label)
.build();
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 =
new SinglePeriodTimeline(
durationUs,