mirror of
https://github.com/androidx/media.git
synced 2025-04-30 06:46:50 +08:00
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:
parent
e5110e6442
commit
754dfd76c8
@ -749,18 +749,17 @@ public final class CompositionPlayer extends SimpleBasePlayer
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void setPrimaryPlayerSequence(ExoPlayer player, EditedMediaItemSequence sequence) {
|
private void setPrimaryPlayerSequence(ExoPlayer player, EditedMediaItemSequence sequence) {
|
||||||
ConcatenatingMediaSource2.Builder mediaSourceBuilder =
|
ConcatenatingMediaSource2.Builder mediaSourceBuilder = new ConcatenatingMediaSource2.Builder();
|
||||||
new ConcatenatingMediaSource2.Builder().useDefaultMediaSourceFactory(context);
|
DefaultMediaSourceFactory defaultMediaSourceFactory = new DefaultMediaSourceFactory(context);
|
||||||
|
if (externalImageLoader != null) {
|
||||||
|
defaultMediaSourceFactory.setExternalImageLoader(externalImageLoader);
|
||||||
|
}
|
||||||
|
|
||||||
for (int i = 0; i < sequence.editedMediaItems.size(); i++) {
|
for (int i = 0; i < sequence.editedMediaItems.size(); i++) {
|
||||||
EditedMediaItem editedMediaItem = sequence.editedMediaItems.get(i);
|
EditedMediaItem editedMediaItem = sequence.editedMediaItems.get(i);
|
||||||
checkArgument(editedMediaItem.durationUs != C.TIME_UNSET);
|
checkArgument(editedMediaItem.durationUs != C.TIME_UNSET);
|
||||||
long durationUs = editedMediaItem.getPresentationDurationUs();
|
long durationUs = editedMediaItem.getPresentationDurationUs();
|
||||||
// Generate silence for primary sequence.
|
// Generate silence for primary sequence.
|
||||||
DefaultMediaSourceFactory defaultMediaSourceFactory = new DefaultMediaSourceFactory(context);
|
|
||||||
if (externalImageLoader != null) {
|
|
||||||
defaultMediaSourceFactory.setExternalImageLoader(externalImageLoader);
|
|
||||||
}
|
|
||||||
MediaSource silenceMediaSource =
|
MediaSource silenceMediaSource =
|
||||||
new ClippingMediaSource(
|
new ClippingMediaSource(
|
||||||
new SilenceMediaSource(editedMediaItem.durationUs),
|
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
|
// TODO: b/331392198 - Repeat only looping sequences, after sequences can be of arbitrary
|
||||||
// length.
|
// length.
|
||||||
ConcatenatingMediaSource2.Builder mediaSourceBuilder =
|
ConcatenatingMediaSource2.Builder mediaSourceBuilder = new ConcatenatingMediaSource2.Builder();
|
||||||
new ConcatenatingMediaSource2.Builder().useDefaultMediaSourceFactory(context);
|
DefaultMediaSourceFactory defaultMediaSourceFactory = new DefaultMediaSourceFactory(context);
|
||||||
|
|
||||||
long accumulatedDurationUs = 0;
|
long accumulatedDurationUs = 0;
|
||||||
int i = 0;
|
int i = 0;
|
||||||
while (accumulatedDurationUs < primarySequenceDurationUs) {
|
while (accumulatedDurationUs < primarySequenceDurationUs) {
|
||||||
EditedMediaItem editedMediaItem = sequence.editedMediaItems.get(i);
|
EditedMediaItem editedMediaItem = sequence.editedMediaItems.get(i);
|
||||||
long itemPresentationDurationUs = editedMediaItem.getPresentationDurationUs();
|
long itemPresentationDurationUs = editedMediaItem.getPresentationDurationUs();
|
||||||
|
MediaItem mediaItem = editedMediaItem.mediaItem;
|
||||||
if (accumulatedDurationUs + itemPresentationDurationUs <= primarySequenceDurationUs) {
|
if (accumulatedDurationUs + itemPresentationDurationUs <= primarySequenceDurationUs) {
|
||||||
mediaSourceBuilder.add(
|
mediaSourceBuilder.add(
|
||||||
editedMediaItem.mediaItem,
|
defaultMediaSourceFactory.createMediaSource(mediaItem),
|
||||||
/* initialPlaceholderDurationMs= */ usToMs(itemPresentationDurationUs));
|
/* initialPlaceholderDurationMs= */ usToMs(itemPresentationDurationUs));
|
||||||
accumulatedDurationUs += itemPresentationDurationUs;
|
accumulatedDurationUs += itemPresentationDurationUs;
|
||||||
} else {
|
} else {
|
||||||
MediaItem mediaItem = editedMediaItem.mediaItem;
|
|
||||||
long remainingDurationUs = primarySequenceDurationUs - accumulatedDurationUs;
|
long remainingDurationUs = primarySequenceDurationUs - accumulatedDurationUs;
|
||||||
// TODO: b/289989542 - Handle already clipped, or speed adjusted media.
|
// TODO: b/289989542 - Handle already clipped, or speed adjusted media.
|
||||||
mediaSourceBuilder.add(
|
mediaSourceBuilder.add(
|
||||||
new ClippingMediaSource(
|
new ClippingMediaSource(
|
||||||
new DefaultMediaSourceFactory(context).createMediaSource(mediaItem),
|
defaultMediaSourceFactory.createMediaSource(mediaItem),
|
||||||
mediaItem.clippingConfiguration.startPositionUs,
|
mediaItem.clippingConfiguration.startPositionUs,
|
||||||
mediaItem.clippingConfiguration.startPositionUs + remainingDurationUs),
|
mediaItem.clippingConfiguration.startPositionUs + remainingDurationUs),
|
||||||
/* initialPlaceholderDurationMs= */ usToMs(remainingDurationUs));
|
/* initialPlaceholderDurationMs= */ usToMs(remainingDurationUs));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user