Commit b192465b by ibaker Committed by Oliver Woodman

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
parent d4343ed8
...@@ -196,12 +196,13 @@ public class IntentUtil { ...@@ -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);
} }
} }
......
...@@ -233,8 +233,8 @@ public final class Util { ...@@ -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 { ...@@ -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;
} }
} }
......
...@@ -173,8 +173,8 @@ public final class DefaultMediaSourceFactory implements MediaSourceFactory { ...@@ -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 { ...@@ -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 { ...@@ -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);
} }
} }
......
...@@ -30,7 +30,7 @@ import com.google.android.exoplayer2.upstream.DefaultLoadErrorHandlingPolicy; ...@@ -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 { ...@@ -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 { ...@@ -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 { ...@@ -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,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment