mirror of
https://github.com/androidx/media.git
synced 2025-04-30 06:46:50 +08:00
Rename CompositeAssetLoader to SequenceAssetLoader
This clarifies that a SequenceAssetLoader loads data corresponding to an EditedMediaItemSequence. PiperOrigin-RevId: 514442681
This commit is contained in:
parent
f94d3cf6c4
commit
ce9fa88c0d
@ -44,10 +44,10 @@ import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
/**
|
||||
* An {@link AssetLoader} that is composed of a sequence of non-overlapping {@linkplain AssetLoader
|
||||
* asset loaders}.
|
||||
* An {@link AssetLoader} that is composed of a {@linkplain EditedMediaItemSequence sequence} of
|
||||
* non-overlapping {@linkplain AssetLoader asset loaders}.
|
||||
*/
|
||||
/* package */ final class CompositeAssetLoader implements AssetLoader, AssetLoader.Listener {
|
||||
/* package */ final class SequenceAssetLoader implements AssetLoader, AssetLoader.Listener {
|
||||
|
||||
private static final Format FORCE_AUDIO_TRACK_FORMAT =
|
||||
new Format.Builder()
|
||||
@ -61,7 +61,7 @@ import java.util.concurrent.atomic.AtomicInteger;
|
||||
private final boolean forceAudioTrack;
|
||||
private final AssetLoader.Factory assetLoaderFactory;
|
||||
private final HandlerWrapper handler;
|
||||
private final Listener compositeAssetLoaderListener;
|
||||
private final Listener sequenceAssetLoaderListener;
|
||||
/**
|
||||
* A mapping from track types to {@link SampleConsumer} instances.
|
||||
*
|
||||
@ -88,7 +88,7 @@ import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
private volatile long currentDurationUs;
|
||||
|
||||
public CompositeAssetLoader(
|
||||
public SequenceAssetLoader(
|
||||
EditedMediaItemSequence sequence,
|
||||
boolean forceAudioTrack,
|
||||
AssetLoader.Factory assetLoaderFactory,
|
||||
@ -98,7 +98,7 @@ import java.util.concurrent.atomic.AtomicInteger;
|
||||
editedMediaItems = sequence.editedMediaItems;
|
||||
this.forceAudioTrack = forceAudioTrack;
|
||||
this.assetLoaderFactory = assetLoaderFactory;
|
||||
compositeAssetLoaderListener = listener;
|
||||
sequenceAssetLoaderListener = listener;
|
||||
currentMediaItemIndex = new AtomicInteger();
|
||||
handler = clock.createHandler(looper, /* callback= */ null);
|
||||
sampleConsumersByTrackType = new HashMap<>();
|
||||
@ -182,9 +182,9 @@ import java.util.concurrent.atomic.AtomicInteger;
|
||||
+ ". An unset duration is only allowed for the last EditedMediaItem in the sequence.");
|
||||
currentDurationUs = durationUs;
|
||||
if (editedMediaItems.size() == 1) {
|
||||
compositeAssetLoaderListener.onDurationUs(durationUs);
|
||||
sequenceAssetLoaderListener.onDurationUs(durationUs);
|
||||
} else if (currentMediaItemIndex == 0) {
|
||||
compositeAssetLoaderListener.onDurationUs(C.TIME_UNSET);
|
||||
sequenceAssetLoaderListener.onDurationUs(C.TIME_UNSET);
|
||||
}
|
||||
}
|
||||
|
||||
@ -210,12 +210,12 @@ import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
if (!trackCountReported) {
|
||||
int trackCount = nonEndedTracks.get() + (addForcedAudioTrack ? 1 : 0);
|
||||
compositeAssetLoaderListener.onTrackCount(trackCount);
|
||||
sequenceAssetLoaderListener.onTrackCount(trackCount);
|
||||
trackCountReported = true;
|
||||
}
|
||||
|
||||
boolean decodeOutput =
|
||||
compositeAssetLoaderListener.onTrackAdded(
|
||||
sequenceAssetLoaderListener.onTrackAdded(
|
||||
inputFormat, supportedOutputTypes, streamStartPositionUs, streamOffsetUs);
|
||||
|
||||
if (isAudio) {
|
||||
@ -225,7 +225,7 @@ import java.util.concurrent.atomic.AtomicInteger;
|
||||
}
|
||||
|
||||
if (addForcedAudioTrack) {
|
||||
compositeAssetLoaderListener.onTrackAdded(
|
||||
sequenceAssetLoaderListener.onTrackAdded(
|
||||
FORCE_AUDIO_TRACK_FORMAT,
|
||||
SUPPORTED_OUTPUT_TYPE_DECODED,
|
||||
streamStartPositionUs,
|
||||
@ -242,7 +242,7 @@ import java.util.concurrent.atomic.AtomicInteger;
|
||||
SampleConsumer sampleConsumer;
|
||||
if (currentMediaItemIndex.get() == 0) {
|
||||
@Nullable
|
||||
SampleConsumer wrappedSampleConsumer = compositeAssetLoaderListener.onOutputFormat(format);
|
||||
SampleConsumer wrappedSampleConsumer = sequenceAssetLoaderListener.onOutputFormat(format);
|
||||
if (wrappedSampleConsumer == null) {
|
||||
return null;
|
||||
}
|
||||
@ -252,7 +252,7 @@ import java.util.concurrent.atomic.AtomicInteger;
|
||||
if (forceAudioTrack && nonEndedTracks.get() == 1 && trackType == C.TRACK_TYPE_VIDEO) {
|
||||
SampleConsumer wrappedAudioSampleConsumer =
|
||||
checkStateNotNull(
|
||||
compositeAssetLoaderListener.onOutputFormat(
|
||||
sequenceAssetLoaderListener.onOutputFormat(
|
||||
FORCE_AUDIO_TRACK_FORMAT
|
||||
.buildUpon()
|
||||
.setSampleMimeType(MimeTypes.AUDIO_RAW)
|
||||
@ -289,7 +289,7 @@ import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
@Override
|
||||
public void onError(ExportException exportException) {
|
||||
compositeAssetLoaderListener.onError(exportException);
|
||||
sequenceAssetLoaderListener.onError(exportException);
|
||||
}
|
||||
|
||||
private void onMediaItemChanged(int trackType, @Nullable Format format) {
|
||||
@ -402,7 +402,7 @@ import java.util.concurrent.atomic.AtomicInteger;
|
||||
assetLoaderFactory.createAssetLoader(
|
||||
editedMediaItem,
|
||||
checkNotNull(Looper.myLooper()),
|
||||
/* listener= */ CompositeAssetLoader.this);
|
||||
/* listener= */ SequenceAssetLoader.this);
|
||||
currentAssetLoader.start();
|
||||
});
|
||||
}
|
@ -99,7 +99,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
||||
private final Clock clock;
|
||||
private final HandlerThread internalHandlerThread;
|
||||
private final HandlerWrapper internalHandler;
|
||||
private final List<CompositeAssetLoader> compositeAssetLoaders;
|
||||
private final List<SequenceAssetLoader> sequenceAssetLoaders;
|
||||
private final AtomicInteger trackCountsToReport;
|
||||
private final AtomicInteger tracksToAdd;
|
||||
private final AtomicBoolean outputHasAudio;
|
||||
@ -137,23 +137,23 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
||||
this.clock = clock;
|
||||
internalHandlerThread = new HandlerThread("Transformer:Internal");
|
||||
internalHandlerThread.start();
|
||||
compositeAssetLoaders = new ArrayList<>();
|
||||
sequenceAssetLoaders = new ArrayList<>();
|
||||
Looper internalLooper = internalHandlerThread.getLooper();
|
||||
for (int i = 0; i < composition.sequences.size(); i++) {
|
||||
CompositeAssetLoaderListener compositeAssetLoaderListener =
|
||||
new CompositeAssetLoaderListener(
|
||||
SequenceAssetLoaderListener sequenceAssetLoaderListener =
|
||||
new SequenceAssetLoaderListener(
|
||||
/* sequenceIndex= */ i,
|
||||
composition,
|
||||
transformationRequest,
|
||||
fallbackListener,
|
||||
debugViewProvider);
|
||||
compositeAssetLoaders.add(
|
||||
new CompositeAssetLoader(
|
||||
sequenceAssetLoaders.add(
|
||||
new SequenceAssetLoader(
|
||||
composition.sequences.get(i),
|
||||
composition.forceAudioTrack,
|
||||
assetLoaderFactory,
|
||||
internalLooper,
|
||||
compositeAssetLoaderListener,
|
||||
sequenceAssetLoaderListener,
|
||||
clock));
|
||||
}
|
||||
trackCountsToReport = new AtomicInteger(composition.sequences.size());
|
||||
@ -286,8 +286,8 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
||||
}
|
||||
|
||||
private void startInternal() {
|
||||
for (int i = 0; i < compositeAssetLoaders.size(); i++) {
|
||||
compositeAssetLoaders.get(i).start();
|
||||
for (int i = 0; i < sequenceAssetLoaders.size(); i++) {
|
||||
sequenceAssetLoaders.get(i).start();
|
||||
}
|
||||
}
|
||||
|
||||
@ -312,8 +312,8 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
||||
private void endInternal(@EndReason int endReason, @Nullable ExportException exportException) {
|
||||
ImmutableList.Builder<ExportResult.ProcessedInput> processedInputsBuilder =
|
||||
new ImmutableList.Builder<>();
|
||||
for (int i = 0; i < compositeAssetLoaders.size(); i++) {
|
||||
processedInputsBuilder.addAll(compositeAssetLoaders.get(i).getProcessedInputs());
|
||||
for (int i = 0; i < sequenceAssetLoaders.size(); i++) {
|
||||
processedInputsBuilder.addAll(sequenceAssetLoaders.get(i).getProcessedInputs());
|
||||
}
|
||||
exportResultBuilder
|
||||
.setProcessedInputs(processedInputsBuilder.build())
|
||||
@ -324,9 +324,9 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
||||
@Nullable ExportException releaseExportException = null;
|
||||
if (!released) {
|
||||
released = true;
|
||||
for (int i = 0; i < compositeAssetLoaders.size(); i++) {
|
||||
for (int i = 0; i < sequenceAssetLoaders.size(); i++) {
|
||||
try {
|
||||
compositeAssetLoaders.get(i).release();
|
||||
sequenceAssetLoaders.get(i).release();
|
||||
} catch (RuntimeException e) {
|
||||
if (releaseExportException == null) {
|
||||
releaseExportException = ExportException.createForUnexpected(e);
|
||||
@ -391,19 +391,19 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
||||
private void updateProgressInternal(ProgressHolder progressHolder) {
|
||||
int progressSum = 0;
|
||||
ProgressHolder individualProgressHolder = new ProgressHolder();
|
||||
for (int i = 0; i < compositeAssetLoaders.size(); i++) {
|
||||
progressState = compositeAssetLoaders.get(i).getProgress(individualProgressHolder);
|
||||
for (int i = 0; i < sequenceAssetLoaders.size(); i++) {
|
||||
progressState = sequenceAssetLoaders.get(i).getProgress(individualProgressHolder);
|
||||
if (progressState != PROGRESS_STATE_AVAILABLE) {
|
||||
transformerConditionVariable.open();
|
||||
return;
|
||||
}
|
||||
progressSum += individualProgressHolder.progress;
|
||||
}
|
||||
progressHolder.progress = progressSum / compositeAssetLoaders.size();
|
||||
progressHolder.progress = progressSum / sequenceAssetLoaders.size();
|
||||
transformerConditionVariable.open();
|
||||
}
|
||||
|
||||
private final class CompositeAssetLoaderListener implements AssetLoader.Listener {
|
||||
private final class SequenceAssetLoaderListener implements AssetLoader.Listener {
|
||||
|
||||
private final int sequenceIndex;
|
||||
private final ImmutableList<EditedMediaItem> editedMediaItems;
|
||||
@ -413,7 +413,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
||||
private final DebugViewProvider debugViewProvider;
|
||||
private final Map<Integer, AddedTrackInfo> addedTrackInfoByTrackType;
|
||||
|
||||
public CompositeAssetLoaderListener(
|
||||
public SequenceAssetLoaderListener(
|
||||
int sequenceIndex,
|
||||
Composition composition,
|
||||
TransformationRequest transformationRequest,
|
||||
@ -486,7 +486,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
||||
AddedTrackInfo trackInfo = checkStateNotNull(addedTrackInfoByTrackType.get(trackType));
|
||||
SamplePipeline samplePipeline = getSamplePipeline(assetLoaderOutputFormat, trackInfo);
|
||||
|
||||
compositeAssetLoaders
|
||||
sequenceAssetLoaders
|
||||
.get(sequenceIndex)
|
||||
.addOnMediaItemChangedListener(samplePipeline, trackType);
|
||||
internalHandler.obtainMessage(MSG_REGISTER_SAMPLE_PIPELINE, samplePipeline).sendToTarget();
|
||||
|
Loading…
x
Reference in New Issue
Block a user