Use output start time instead of deprecated isDecodeOnly in CeaDecoder

PiperOrigin-RevId: 619133908
This commit is contained in:
tonihei 2024-03-26 03:43:53 -07:00 committed by Copybara-Service
parent c3c964627f
commit 0f42dd4752
2 changed files with 8 additions and 5 deletions

View File

@ -241,7 +241,9 @@ public final class TextRenderer extends BaseRenderer implements Callback {
replaceSubtitleDecoder();
} else {
releaseSubtitleBuffers();
checkNotNull(subtitleDecoder).flush();
SubtitleDecoder subtitleDecoder = checkNotNull(this.subtitleDecoder);
subtitleDecoder.flush();
subtitleDecoder.setOutputStartTimeUs(getLastResetPositionUs());
}
}
}
@ -507,6 +509,7 @@ public final class TextRenderer extends BaseRenderer implements Callback {
private void initSubtitleDecoder() {
waitingForKeyFrame = true;
subtitleDecoder = subtitleDecoderFactory.createDecoder(checkNotNull(streamFormat));
subtitleDecoder.setOutputStartTimeUs(getLastResetPositionUs());
}
private void replaceSubtitleDecoder() {

View File

@ -41,6 +41,7 @@ import java.util.PriorityQueue;
@Nullable private CeaInputBuffer dequeuedInputBuffer;
private long playbackPositionUs;
private long queuedInputBufferCount;
private long outputStartTimeUs;
@SuppressWarnings("nullness:methodref.receiver.bound")
public CeaDecoder() {
@ -53,6 +54,7 @@ import java.util.PriorityQueue;
availableOutputBuffers.add(new CeaOutputBuffer(this::releaseOutputBuffer));
}
queuedInputBuffers = new PriorityQueue<>();
outputStartTimeUs = C.TIME_UNSET;
}
@Override
@ -60,7 +62,7 @@ import java.util.PriorityQueue;
@Override
public final void setOutputStartTimeUs(long outputStartTimeUs) {
// Do nothing.
this.outputStartTimeUs = outputStartTimeUs;
}
@Override
@ -79,13 +81,11 @@ import java.util.PriorityQueue;
return dequeuedInputBuffer;
}
// Still using deprecated decoder-only flag until this decoder is replaced by a SubtitleParser.
@SuppressWarnings("deprecation")
@Override
public void queueInputBuffer(SubtitleInputBuffer inputBuffer) throws SubtitleDecoderException {
Assertions.checkArgument(inputBuffer == dequeuedInputBuffer);
CeaInputBuffer ceaInputBuffer = (CeaInputBuffer) inputBuffer;
if (ceaInputBuffer.isDecodeOnly()) {
if (outputStartTimeUs != C.TIME_UNSET && ceaInputBuffer.timeUs < outputStartTimeUs) {
// We can start decoding anywhere in CEA formats, so discarding on the input side is fine.
releaseInputBuffer(ceaInputBuffer);
} else {