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();
|
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() {
|
||||||
|
@ -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 {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user