Fix TextTrackRenderer.isEnded().
------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=118455206
This commit is contained in:
parent
ce9b309aa1
commit
ce47d7be38
@ -15,6 +15,7 @@
|
|||||||
*/
|
*/
|
||||||
package com.google.android.exoplayer.text;
|
package com.google.android.exoplayer.text;
|
||||||
|
|
||||||
|
import com.google.android.exoplayer.C;
|
||||||
import com.google.android.exoplayer.ExoPlaybackException;
|
import com.google.android.exoplayer.ExoPlaybackException;
|
||||||
import com.google.android.exoplayer.Format;
|
import com.google.android.exoplayer.Format;
|
||||||
import com.google.android.exoplayer.FormatHolder;
|
import com.google.android.exoplayer.FormatHolder;
|
||||||
@ -53,6 +54,7 @@ public final class TextTrackRenderer extends SampleSourceTrackRenderer implement
|
|||||||
private final FormatHolder formatHolder;
|
private final FormatHolder formatHolder;
|
||||||
|
|
||||||
private boolean inputStreamEnded;
|
private boolean inputStreamEnded;
|
||||||
|
private boolean outputStreamEnded;
|
||||||
private SubtitleParser parser;
|
private SubtitleParser parser;
|
||||||
private SubtitleInputBuffer nextInputBuffer;
|
private SubtitleInputBuffer nextInputBuffer;
|
||||||
private SubtitleOutputBuffer subtitle;
|
private SubtitleOutputBuffer subtitle;
|
||||||
@ -107,6 +109,7 @@ public final class TextTrackRenderer extends SampleSourceTrackRenderer implement
|
|||||||
@Override
|
@Override
|
||||||
protected void reset(long positionUs) {
|
protected void reset(long positionUs) {
|
||||||
inputStreamEnded = false;
|
inputStreamEnded = false;
|
||||||
|
outputStreamEnded = false;
|
||||||
if (subtitle != null) {
|
if (subtitle != null) {
|
||||||
subtitle.release();
|
subtitle.release();
|
||||||
subtitle = null;
|
subtitle = null;
|
||||||
@ -125,6 +128,10 @@ public final class TextTrackRenderer extends SampleSourceTrackRenderer implement
|
|||||||
@Override
|
@Override
|
||||||
protected void render(long positionUs, long elapsedRealtimeUs, boolean sourceIsReady)
|
protected void render(long positionUs, long elapsedRealtimeUs, boolean sourceIsReady)
|
||||||
throws ExoPlaybackException {
|
throws ExoPlaybackException {
|
||||||
|
if (outputStreamEnded) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (nextSubtitle == null) {
|
if (nextSubtitle == null) {
|
||||||
try {
|
try {
|
||||||
nextSubtitle = parser.dequeueOutputBuffer();
|
nextSubtitle = parser.dequeueOutputBuffer();
|
||||||
@ -157,6 +164,12 @@ public final class TextTrackRenderer extends SampleSourceTrackRenderer implement
|
|||||||
}
|
}
|
||||||
subtitle = nextSubtitle;
|
subtitle = nextSubtitle;
|
||||||
nextSubtitle = null;
|
nextSubtitle = null;
|
||||||
|
if (subtitle.isEndOfStream()) {
|
||||||
|
outputStreamEnded = true;
|
||||||
|
subtitle.release();
|
||||||
|
subtitle = null;
|
||||||
|
return;
|
||||||
|
}
|
||||||
nextSubtitleEventIndex = subtitle.getNextEventTimeIndex(positionUs);
|
nextSubtitleEventIndex = subtitle.getNextEventTimeIndex(positionUs);
|
||||||
textRendererNeedsUpdate = true;
|
textRendererNeedsUpdate = true;
|
||||||
}
|
}
|
||||||
@ -177,13 +190,15 @@ public final class TextTrackRenderer extends SampleSourceTrackRenderer implement
|
|||||||
// Try and read the next subtitle from the source.
|
// Try and read the next subtitle from the source.
|
||||||
int result = readSource(formatHolder, nextInputBuffer);
|
int result = readSource(formatHolder, nextInputBuffer);
|
||||||
if (result == TrackStream.BUFFER_READ) {
|
if (result == TrackStream.BUFFER_READ) {
|
||||||
|
// Clear BUFFER_FLAG_DECODE_ONLY (see [Internal: b/27893809]) and queue the buffer.
|
||||||
|
nextInputBuffer.clearFlag(C.BUFFER_FLAG_DECODE_ONLY);
|
||||||
if (nextInputBuffer.isEndOfStream()) {
|
if (nextInputBuffer.isEndOfStream()) {
|
||||||
inputStreamEnded = true;
|
inputStreamEnded = true;
|
||||||
// TODO: Queue the end of stream buffer.
|
|
||||||
} else {
|
} else {
|
||||||
nextInputBuffer.subsampleOffsetUs = formatHolder.format.subsampleOffsetUs;
|
nextInputBuffer.subsampleOffsetUs = formatHolder.format.subsampleOffsetUs;
|
||||||
parser.queueInputBuffer(nextInputBuffer);
|
|
||||||
}
|
}
|
||||||
|
parser.queueInputBuffer(nextInputBuffer);
|
||||||
|
nextInputBuffer = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (ParserException e) {
|
} catch (ParserException e) {
|
||||||
@ -212,7 +227,7 @@ public final class TextTrackRenderer extends SampleSourceTrackRenderer implement
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean isEnded() {
|
protected boolean isEnded() {
|
||||||
return inputStreamEnded && (subtitle == null || getNextEventTime() == Long.MAX_VALUE);
|
return outputStreamEnded;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -72,6 +72,15 @@ public abstract class Buffer {
|
|||||||
flags |= flag;
|
flags |= flag;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes the {@code flag} from this buffer's flags, if it is set.
|
||||||
|
*
|
||||||
|
* @param flag The flag to remove.
|
||||||
|
*/
|
||||||
|
public final void clearFlag(int flag) {
|
||||||
|
flags &= ~flag;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns whether the specified flag has been set on this buffer.
|
* Returns whether the specified flag has been set on this buffer.
|
||||||
*
|
*
|
||||||
|
Loading…
x
Reference in New Issue
Block a user