Commit 93085e2c by kimvde Committed by Tianyi Feng

Rollback of https://github.com/google/ExoPlayer/commit/782f19edcf9dcc4ecf47dc32776429990c4a928f

*** Original commit ***

Release SequenceAssetLoader when ended

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

***

PiperOrigin-RevId: 519993003
parent 26fdb3e0
...@@ -94,7 +94,6 @@ import java.util.concurrent.atomic.AtomicInteger; ...@@ -94,7 +94,6 @@ import java.util.concurrent.atomic.AtomicInteger;
private boolean audioLoopingEnded; private boolean audioLoopingEnded;
private boolean videoLoopingEnded; private boolean videoLoopingEnded;
private int processedInputsSize; private int processedInputsSize;
private boolean released;
private volatile long currentAssetDurationUs; private volatile long currentAssetDurationUs;
...@@ -166,10 +165,7 @@ import java.util.concurrent.atomic.AtomicInteger; ...@@ -166,10 +165,7 @@ import java.util.concurrent.atomic.AtomicInteger;
@Override @Override
public void release() { public void release() {
if (!released) {
currentAssetLoader.release(); currentAssetLoader.release();
released = true;
}
} }
/** /**
...@@ -372,15 +368,13 @@ import java.util.concurrent.atomic.AtomicInteger; ...@@ -372,15 +368,13 @@ import java.util.concurrent.atomic.AtomicInteger;
long globalTimestampUs = totalDurationUs + inputBuffer.timeUs - currentAssetStartTimeUs; long globalTimestampUs = totalDurationUs + inputBuffer.timeUs - currentAssetStartTimeUs;
if (isLooping && globalTimestampUs >= maxSequenceDurationUs) { if (isLooping && globalTimestampUs >= maxSequenceDurationUs) {
if (isMaxSequenceDurationUsFinal && !audioLoopingEnded) { if (isMaxSequenceDurationUsFinal && !audioLoopingEnded) {
nonEndedTracks.decrementAndGet();
checkNotNull(inputBuffer.data).limit(0); checkNotNull(inputBuffer.data).limit(0);
inputBuffer.setFlags(C.BUFFER_FLAG_END_OF_STREAM); inputBuffer.setFlags(C.BUFFER_FLAG_END_OF_STREAM);
// We know that queueInputBuffer() will always return true for the underlying // 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. // SampleConsumer so there is no need to handle the case where the sample wasn't queued.
checkState(sampleConsumer.queueInputBuffer()); checkState(sampleConsumer.queueInputBuffer());
audioLoopingEnded = true; audioLoopingEnded = true;
if (nonEndedTracks.decrementAndGet() == 0) {
release();
}
} }
return false; return false;
} }
...@@ -393,14 +387,9 @@ import java.util.concurrent.atomic.AtomicInteger; ...@@ -393,14 +387,9 @@ import java.util.concurrent.atomic.AtomicInteger;
if (nonEndedTracks.get() == 0) { if (nonEndedTracks.get() == 0) {
switchAssetLoader(); switchAssetLoader();
} }
} else {
checkState(sampleConsumer.queueInputBuffer());
if (nonEndedTracks.get() == 0) {
release();
}
}
return true; return true;
} }
}
checkState(sampleConsumer.queueInputBuffer()); checkState(sampleConsumer.queueInputBuffer());
return true; return true;
...@@ -459,19 +448,15 @@ import java.util.concurrent.atomic.AtomicInteger; ...@@ -459,19 +448,15 @@ import java.util.concurrent.atomic.AtomicInteger;
@Override @Override
public void signalEndOfVideoInput() { public void signalEndOfVideoInput() {
nonEndedTracks.decrementAndGet();
boolean videoEnded = boolean videoEnded =
isLooping ? videoLoopingEnded : currentMediaItemIndex == editedMediaItems.size() - 1; isLooping ? videoLoopingEnded : currentMediaItemIndex == editedMediaItems.size() - 1;
if (videoEnded) { if (videoEnded) {
sampleConsumer.signalEndOfVideoInput(); sampleConsumer.signalEndOfVideoInput();
} } else if (nonEndedTracks.get() == 0) {
if (nonEndedTracks.decrementAndGet() == 0) {
if (videoEnded) {
release();
} else {
switchAssetLoader(); switchAssetLoader();
} }
} }
}
private void switchAssetLoader() { private void switchAssetLoader() {
handler.post( handler.post(
...@@ -494,9 +479,5 @@ import java.util.concurrent.atomic.AtomicInteger; ...@@ -494,9 +479,5 @@ import java.util.concurrent.atomic.AtomicInteger;
currentAssetLoader.start(); currentAssetLoader.start();
}); });
} }
private void release() {
handler.post(SequenceAssetLoader.this::release);
}
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment