mirror of
https://github.com/androidx/media.git
synced 2025-04-30 06:46:50 +08:00
Rollback of 7e6236cfdb
*** 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:
parent
24a164827e
commit
1dbb19a44c
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user