From 958f12e2cc9526f52240fca91cedbbc2b8dd8f58 Mon Sep 17 00:00:00 2001 From: tonihei Date: Tue, 18 Jul 2017 06:07:49 -0700 Subject: [PATCH] Make isReady of FakeRenderer more realistic. Currently the renderer is only ready when the input stream has more data to read. Actual renderers, however, are also ready as long as their output buffer contains some audio/video samples to play, roughly corresponding to the fact that the playback time hasn't reached the timestamp of the last buffered sample. Added a isready flag to FakeRenderer to simulate this behaviour. ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=162343074 --- .../exoplayer2/testutil/FakeRenderer.java | 38 +++++++++---------- 1 file changed, 19 insertions(+), 19 deletions(-) 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; } }