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(); replaceSubtitleDecoder();
} else { } else {
releaseSubtitleBuffers(); 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() { private void initSubtitleDecoder() {
waitingForKeyFrame = true; waitingForKeyFrame = true;
subtitleDecoder = subtitleDecoderFactory.createDecoder(checkNotNull(streamFormat)); subtitleDecoder = subtitleDecoderFactory.createDecoder(checkNotNull(streamFormat));
subtitleDecoder.setOutputStartTimeUs(getLastResetPositionUs());
} }
private void replaceSubtitleDecoder() { private void replaceSubtitleDecoder() {

View File

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