Fix TextTrackRenderer.isEnded().

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=118455206
This commit is contained in:
andrewlewis 2016-03-29 05:50:58 -07:00 committed by Oliver Woodman
parent ce9b309aa1
commit ce47d7be38
2 changed files with 27 additions and 3 deletions

View File

@ -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

View File

@ -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.
* *