*** Original commit ***

Rollback of fc539da061

*** Original commit ***

Release SequenceAssetLoader when ended

Before, the SequenceAssetLoader was released at the end of the export.
Release resources earlier if possible.

***

***

PiperOrigin-RevId: 520036433
This commit is contained in:
kimvde 2023-03-28 15:33:38 +00:00 committed by Tianyi Feng
parent 24a164827e
commit 1dbb19a44c

View File

@ -94,6 +94,7 @@ import java.util.concurrent.atomic.AtomicInteger;
private boolean audioLoopingEnded;
private boolean videoLoopingEnded;
private int processedInputsSize;
private boolean released;
private volatile long currentAssetDurationUs;
@ -165,7 +166,10 @@ import java.util.concurrent.atomic.AtomicInteger;
@Override
public void release() {
if (!released) {
currentAssetLoader.release();
released = true;
}
}
/**
@ -368,13 +372,15 @@ import java.util.concurrent.atomic.AtomicInteger;
long globalTimestampUs = totalDurationUs + inputBuffer.timeUs - currentAssetStartTimeUs;
if (isLooping && globalTimestampUs >= maxSequenceDurationUs) {
if (isMaxSequenceDurationUsFinal && !audioLoopingEnded) {
nonEndedTracks.decrementAndGet();
checkNotNull(inputBuffer.data).limit(0);
inputBuffer.setFlags(C.BUFFER_FLAG_END_OF_STREAM);
// We know that queueInputBuffer() will always return true for the underlying
// SampleConsumer so there is no need to handle the case where the sample wasn't queued.
checkState(sampleConsumer.queueInputBuffer());
audioLoopingEnded = true;
if (nonEndedTracks.decrementAndGet() == 0) {
release();
}
}
return false;
}
@ -387,9 +393,14 @@ import java.util.concurrent.atomic.AtomicInteger;
if (nonEndedTracks.get() == 0) {
switchAssetLoader();
}
return true;
} else {
checkState(sampleConsumer.queueInputBuffer());
if (nonEndedTracks.get() == 0) {
release();
}
}
return true;
}
checkState(sampleConsumer.queueInputBuffer());
return true;
@ -448,15 +459,19 @@ import java.util.concurrent.atomic.AtomicInteger;
@Override
public void signalEndOfVideoInput() {
nonEndedTracks.decrementAndGet();
boolean videoEnded =
isLooping ? videoLoopingEnded : currentMediaItemIndex == editedMediaItems.size() - 1;
if (videoEnded) {
sampleConsumer.signalEndOfVideoInput();
} else if (nonEndedTracks.get() == 0) {
}
if (nonEndedTracks.decrementAndGet() == 0) {
if (videoEnded) {
release();
} else {
switchAssetLoader();
}
}
}
private void switchAssetLoader() {
handler.post(
@ -479,5 +494,9 @@ import java.util.concurrent.atomic.AtomicInteger;
currentAssetLoader.start();
});
}
private void release() {
handler.post(SequenceAssetLoader.this::release);
}
}
}