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 {
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);
}
}
......
......@@ -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;
}
}
......
......@@ -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);
}
}
......
......@@ -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,
......
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