Use output start time instead of deprecated isDecodeOnly in CeaDecoder
PiperOrigin-RevId: 619133908
This commit is contained in:
parent
c3c964627f
commit
0f42dd4752
@ -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() {
|
||||
|
@ -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 {
|
||||
|
Loading…
x
Reference in New Issue
Block a user