From 754dfd76c8ee186e6d1667bf75a1621f3567db36 Mon Sep 17 00:00:00 2001 From: shahddaghash Date: Thu, 21 Nov 2024 03:50:39 -0800 Subject: [PATCH] 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 --- .../media3/transformer/CompositionPlayer.java | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/CompositionPlayer.java b/libraries/transformer/src/main/java/androidx/media3/transformer/CompositionPlayer.java index 626a11056a..f6264f0aff 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/CompositionPlayer.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/CompositionPlayer.java @@ -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));