Simplify use of defaultMediaSourceFactory in CompositionPlayer

Changes includes making sure the same `defaultMediaSourceFactory` is used when creating a new media source in `setPrimaryPlayerSequence` and `setSecondaryPlayerSequence`.
This is pre-work for introducing a new attribute `mediaSourceFactory` that can be optionally used instead of the default one. This will allow developers to pass a customized media source factory to CompositionPlayer.

PiperOrigin-RevId: 698721139
This commit is contained in:
shahddaghash 2024-11-21 03:50:39 -08:00 committed by Copybara-Service
parent e5110e6442
commit 754dfd76c8

View File

@ -749,18 +749,17 @@ public final class CompositionPlayer extends SimpleBasePlayer
}
private void setPrimaryPlayerSequence(ExoPlayer player, EditedMediaItemSequence sequence) {
ConcatenatingMediaSource2.Builder mediaSourceBuilder =
new ConcatenatingMediaSource2.Builder().useDefaultMediaSourceFactory(context);
ConcatenatingMediaSource2.Builder mediaSourceBuilder = new ConcatenatingMediaSource2.Builder();
DefaultMediaSourceFactory defaultMediaSourceFactory = new DefaultMediaSourceFactory(context);
if (externalImageLoader != null) {
defaultMediaSourceFactory.setExternalImageLoader(externalImageLoader);
}
for (int i = 0; i < sequence.editedMediaItems.size(); i++) {
EditedMediaItem editedMediaItem = sequence.editedMediaItems.get(i);
checkArgument(editedMediaItem.durationUs != C.TIME_UNSET);
long durationUs = editedMediaItem.getPresentationDurationUs();
// Generate silence for primary sequence.
DefaultMediaSourceFactory defaultMediaSourceFactory = new DefaultMediaSourceFactory(context);
if (externalImageLoader != null) {
defaultMediaSourceFactory.setExternalImageLoader(externalImageLoader);
}
MediaSource silenceMediaSource =
new ClippingMediaSource(
new SilenceMediaSource(editedMediaItem.durationUs),
@ -791,26 +790,26 @@ public final class CompositionPlayer extends SimpleBasePlayer
// TODO: b/331392198 - Repeat only looping sequences, after sequences can be of arbitrary
// length.
ConcatenatingMediaSource2.Builder mediaSourceBuilder =
new ConcatenatingMediaSource2.Builder().useDefaultMediaSourceFactory(context);
ConcatenatingMediaSource2.Builder mediaSourceBuilder = new ConcatenatingMediaSource2.Builder();
DefaultMediaSourceFactory defaultMediaSourceFactory = new DefaultMediaSourceFactory(context);
long accumulatedDurationUs = 0;
int i = 0;
while (accumulatedDurationUs < primarySequenceDurationUs) {
EditedMediaItem editedMediaItem = sequence.editedMediaItems.get(i);
long itemPresentationDurationUs = editedMediaItem.getPresentationDurationUs();
MediaItem mediaItem = editedMediaItem.mediaItem;
if (accumulatedDurationUs + itemPresentationDurationUs <= primarySequenceDurationUs) {
mediaSourceBuilder.add(
editedMediaItem.mediaItem,
defaultMediaSourceFactory.createMediaSource(mediaItem),
/* initialPlaceholderDurationMs= */ usToMs(itemPresentationDurationUs));
accumulatedDurationUs += itemPresentationDurationUs;
} else {
MediaItem mediaItem = editedMediaItem.mediaItem;
long remainingDurationUs = primarySequenceDurationUs - accumulatedDurationUs;
// TODO: b/289989542 - Handle already clipped, or speed adjusted media.
mediaSourceBuilder.add(
new ClippingMediaSource(
new DefaultMediaSourceFactory(context).createMediaSource(mediaItem),
defaultMediaSourceFactory.createMediaSource(mediaItem),
mediaItem.clippingConfiguration.startPositionUs,
mediaItem.clippingConfiguration.startPositionUs + remainingDurationUs),
/* initialPlaceholderDurationMs= */ usToMs(remainingDurationUs));