diff --git a/testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeRenderer.java b/testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeRenderer.java index b13092fb0d..a66043b77f 100644 --- a/testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeRenderer.java +++ b/testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeRenderer.java @@ -35,16 +35,19 @@ import junit.framework.Assert; public class FakeRenderer extends BaseRenderer { private final List expectedFormats; + private final DecoderInputBuffer buffer; public int positionResetCount; public int formatReadCount; public int bufferReadCount; public boolean isEnded; + public boolean isReady; public FakeRenderer(Format... expectedFormats) { super(expectedFormats.length == 0 ? C.TRACK_TYPE_UNKNOWN : MimeTypes.getTrackType(expectedFormats[0].sampleMimeType)); this.expectedFormats = Collections.unmodifiableList(Arrays.asList(expectedFormats)); + this.buffer = new DecoderInputBuffer(DecoderInputBuffer.BUFFER_REPLACEMENT_MODE_NORMAL); } @Override @@ -55,29 +58,26 @@ public class FakeRenderer extends BaseRenderer { @Override public void render(long positionUs, long elapsedRealtimeUs) throws ExoPlaybackException { - if (isEnded) { - return; - } - - // Verify the format matches the expected format. - FormatHolder formatHolder = new FormatHolder(); - DecoderInputBuffer buffer = - new DecoderInputBuffer(DecoderInputBuffer.BUFFER_REPLACEMENT_MODE_NORMAL); - int result = readSource(formatHolder, buffer, false); - if (result == C.RESULT_FORMAT_READ) { - formatReadCount++; - Assert.assertTrue(expectedFormats.contains(formatHolder.format)); - } else if (result == C.RESULT_BUFFER_READ) { - bufferReadCount++; - if (buffer.isEndOfStream()) { - isEnded = true; + if (!isEnded) { + // Verify the format matches the expected format. + FormatHolder formatHolder = new FormatHolder(); + int result = readSource(formatHolder, buffer, false); + if (result == C.RESULT_FORMAT_READ) { + formatReadCount++; + Assert.assertTrue(expectedFormats.contains(formatHolder.format)); + } else if (result == C.RESULT_BUFFER_READ) { + bufferReadCount++; + if (buffer.isEndOfStream()) { + isEnded = true; + } } } + isReady = buffer.timeUs >= positionUs; } @Override public boolean isReady() { - return isSourceReady(); + return isReady || isSourceReady(); } @Override @@ -87,8 +87,8 @@ public class FakeRenderer extends BaseRenderer { @Override public int supportsFormat(Format format) throws ExoPlaybackException { - return getTrackType() == MimeTypes.getTrackType(format.sampleMimeType) ? FORMAT_HANDLED - : FORMAT_UNSUPPORTED_TYPE; + return getTrackType() == MimeTypes.getTrackType(format.sampleMimeType) + ? (FORMAT_HANDLED | ADAPTIVE_SEAMLESS) : FORMAT_UNSUPPORTED_TYPE; } }