Commit cb414e87 by ibaker Committed by Oliver Woodman

Change FakeRenderer to take a track type instead of a list of formats

The assertion about the expected formats doesn't really belong in a
fake, the assertions should be closer to the test method.

This gets in the way when I try and write a new test in
AnalyticsCollectorTest that doesn't use the expected, constant Format
(because i want to specify drmInitData) - but changing the expected
Format is tricky because it's hard-coded into the FakeVideoRenderer
inner class.

I replaced the assertion in FakeRenderer with assertions in test
methods that used to assert on the format count.

PiperOrigin-RevId: 301353072
parent 13ffb9c6
...@@ -399,6 +399,7 @@ public class DefaultMediaClockTest { ...@@ -399,6 +399,7 @@ public class DefaultMediaClockTest {
boolean isEnded, boolean isEnded,
boolean hasReadStreamToEnd) boolean hasReadStreamToEnd)
throws ExoPlaybackException { throws ExoPlaybackException {
super(C.TRACK_TYPE_UNKNOWN);
this.playbackSpeed = playbackSpeed; this.playbackSpeed = playbackSpeed;
this.playbackSpeedIsMutable = playbackSpeedIsMutable; this.playbackSpeedIsMutable = playbackSpeedIsMutable;
this.isReady = isReady; this.isReady = isReady;
......
...@@ -1248,7 +1248,7 @@ public final class AnalyticsCollectorTest { ...@@ -1248,7 +1248,7 @@ public final class AnalyticsCollectorTest {
private boolean renderedFirstFrameAfterEnable; private boolean renderedFirstFrameAfterEnable;
public FakeVideoRenderer(Handler handler, VideoRendererEventListener eventListener) { public FakeVideoRenderer(Handler handler, VideoRendererEventListener eventListener) {
super(ExoPlayerTestRunner.Builder.VIDEO_FORMAT); super(C.TRACK_TYPE_VIDEO);
eventDispatcher = new VideoRendererEventListener.EventDispatcher(handler, eventListener); eventDispatcher = new VideoRendererEventListener.EventDispatcher(handler, eventListener);
decoderCounters = new DecoderCounters(); decoderCounters = new DecoderCounters();
} }
...@@ -1327,7 +1327,7 @@ public final class AnalyticsCollectorTest { ...@@ -1327,7 +1327,7 @@ public final class AnalyticsCollectorTest {
private boolean notifiedAudioSessionId; private boolean notifiedAudioSessionId;
public FakeAudioRenderer(Handler handler, AudioRendererEventListener eventListener) { public FakeAudioRenderer(Handler handler, AudioRendererEventListener eventListener) {
super(ExoPlayerTestRunner.Builder.AUDIO_FORMAT); super(C.TRACK_TYPE_AUDIO);
eventDispatcher = new AudioRendererEventListener.EventDispatcher(handler, eventListener); eventDispatcher = new AudioRendererEventListener.EventDispatcher(handler, eventListener);
decoderCounters = new DecoderCounters(); decoderCounters = new DecoderCounters();
} }
......
...@@ -119,9 +119,9 @@ public class DownloadHelperTest { ...@@ -119,9 +119,9 @@ public class DownloadHelperTest {
@Before @Before
public void setUp() { public void setUp() {
FakeRenderer videoRenderer = new FakeRenderer(VIDEO_FORMAT_LOW, VIDEO_FORMAT_HIGH); FakeRenderer videoRenderer = new FakeRenderer(C.TRACK_TYPE_VIDEO);
FakeRenderer audioRenderer = new FakeRenderer(audioFormatUs, audioFormatZh); FakeRenderer audioRenderer = new FakeRenderer(C.TRACK_TYPE_AUDIO);
FakeRenderer textRenderer = new FakeRenderer(textFormatUs, textFormatZh); FakeRenderer textRenderer = new FakeRenderer(C.TRACK_TYPE_TEXT);
RenderersFactory renderersFactory = RenderersFactory renderersFactory =
(handler, videoListener, audioListener, metadata, text) -> (handler, videoListener, audioListener, metadata, text) ->
new Renderer[] {textRenderer, audioRenderer, videoRenderer}; new Renderer[] {textRenderer, audioRenderer, videoRenderer};
......
...@@ -46,7 +46,9 @@ import com.google.android.exoplayer2.util.HandlerWrapper; ...@@ -46,7 +46,9 @@ import com.google.android.exoplayer2.util.HandlerWrapper;
import com.google.android.exoplayer2.util.MimeTypes; import com.google.android.exoplayer2.util.MimeTypes;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Set;
import java.util.concurrent.CountDownLatch; import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException; import java.util.concurrent.TimeoutException;
...@@ -365,7 +367,16 @@ public final class ExoPlayerTestRunner implements Player.EventListener, ActionSc ...@@ -365,7 +367,16 @@ public final class ExoPlayerTestRunner implements Player.EventListener, ActionSc
} }
if (renderersFactory == null) { if (renderersFactory == null) {
if (renderers == null) { if (renderers == null) {
renderers = new Renderer[] {new FakeRenderer(supportedFormats)}; Set<Integer> trackTypes = new HashSet<>();
for (Format format : supportedFormats) {
trackTypes.add(MimeTypes.getTrackType(format.sampleMimeType));
}
renderers = new Renderer[trackTypes.size()];
int i = 0;
for (int trackType : trackTypes) {
renderers[i] = new FakeRenderer(trackType);
i++;
}
} }
renderersFactory = renderersFactory =
(eventHandler, (eventHandler,
......
...@@ -15,15 +15,14 @@ ...@@ -15,15 +15,14 @@
*/ */
package com.google.android.exoplayer2.testutil; package com.google.android.exoplayer2.testutil;
import com.google.android.exoplayer2.Format;
import com.google.android.exoplayer2.Renderer; import com.google.android.exoplayer2.Renderer;
import com.google.android.exoplayer2.util.MediaClock; import com.google.android.exoplayer2.util.MediaClock;
/** Fake abstract {@link Renderer} which is also a {@link MediaClock}. */ /** Fake abstract {@link Renderer} which is also a {@link MediaClock}. */
public abstract class FakeMediaClockRenderer extends FakeRenderer implements MediaClock { public abstract class FakeMediaClockRenderer extends FakeRenderer implements MediaClock {
public FakeMediaClockRenderer(Format... expectedFormats) { public FakeMediaClockRenderer(int trackType) {
super(expectedFormats); super(trackType);
} }
@Override @Override
......
...@@ -15,7 +15,6 @@ ...@@ -15,7 +15,6 @@
*/ */
package com.google.android.exoplayer2.testutil; package com.google.android.exoplayer2.testutil;
import static com.google.common.truth.Truth.assertThat;
import com.google.android.exoplayer2.BaseRenderer; import com.google.android.exoplayer2.BaseRenderer;
import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.C;
...@@ -28,13 +27,15 @@ import com.google.android.exoplayer2.decoder.DecoderInputBuffer; ...@@ -28,13 +27,15 @@ import com.google.android.exoplayer2.decoder.DecoderInputBuffer;
import com.google.android.exoplayer2.source.SampleStream; import com.google.android.exoplayer2.source.SampleStream;
import com.google.android.exoplayer2.util.Assertions; import com.google.android.exoplayer2.util.Assertions;
import com.google.android.exoplayer2.util.MimeTypes; import com.google.android.exoplayer2.util.MimeTypes;
import java.util.Arrays; import com.google.android.exoplayer2.util.Util;
import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
/** /**
* Fake {@link Renderer} that supports any format with the matching MIME type. The renderer * Fake {@link Renderer} that supports any format with the matching track type.
* verifies that it reads one of the given {@link Format}s. *
* <p>The renderer verifies that all the formats it reads have the provided track type.
*/ */
public class FakeRenderer extends BaseRenderer { public class FakeRenderer extends BaseRenderer {
...@@ -45,24 +46,22 @@ public class FakeRenderer extends BaseRenderer { ...@@ -45,24 +46,22 @@ public class FakeRenderer extends BaseRenderer {
*/ */
private static final long SOURCE_READAHEAD_US = 250000; private static final long SOURCE_READAHEAD_US = 250000;
private final List<Format> expectedFormats;
private final DecoderInputBuffer buffer; private final DecoderInputBuffer buffer;
private long playbackPositionUs; private long playbackPositionUs;
private long lastSamplePositionUs; private long lastSamplePositionUs;
private boolean hasPendingBuffer; private boolean hasPendingBuffer;
private List<Format> formatsRead;
public boolean isEnded; public boolean isEnded;
public int positionResetCount; public int positionResetCount;
public int formatReadCount;
public int sampleBufferReadCount; public int sampleBufferReadCount;
public FakeRenderer(Format... expectedFormats) { public FakeRenderer(int trackType) {
super(expectedFormats.length == 0 ? C.TRACK_TYPE_UNKNOWN super(trackType);
: MimeTypes.getTrackType(expectedFormats[0].sampleMimeType));
this.expectedFormats = Collections.unmodifiableList(Arrays.asList(expectedFormats));
buffer = new DecoderInputBuffer(DecoderInputBuffer.BUFFER_REPLACEMENT_MODE_NORMAL); buffer = new DecoderInputBuffer(DecoderInputBuffer.BUFFER_REPLACEMENT_MODE_NORMAL);
lastSamplePositionUs = Long.MIN_VALUE; lastSamplePositionUs = Long.MIN_VALUE;
formatsRead = new ArrayList<>();
} }
@Override @Override
...@@ -87,9 +86,19 @@ public class FakeRenderer extends BaseRenderer { ...@@ -87,9 +86,19 @@ public class FakeRenderer extends BaseRenderer {
@SampleStream.ReadDataResult @SampleStream.ReadDataResult
int result = readSource(formatHolder, buffer, /* formatRequired= */ false); int result = readSource(formatHolder, buffer, /* formatRequired= */ false);
if (result == C.RESULT_FORMAT_READ) { if (result == C.RESULT_FORMAT_READ) {
formatReadCount++; Format format = Assertions.checkNotNull(formatHolder.format);
assertThat(expectedFormats).contains(formatHolder.format); if (MimeTypes.getTrackType(format.sampleMimeType) != getTrackType()) {
onFormatChanged(Assertions.checkNotNull(formatHolder.format)); throw ExoPlaybackException.createForRenderer(
new IllegalStateException(
Util.formatInvariant(
"Format track type (%s) doesn't match renderer track type (%s).",
MimeTypes.getTrackType(format.sampleMimeType), getTrackType())),
getIndex(),
format,
FORMAT_UNSUPPORTED_TYPE);
}
formatsRead.add(format);
onFormatChanged(format);
} else if (result == C.RESULT_BUFFER_READ) { } else if (result == C.RESULT_BUFFER_READ) {
if (buffer.isEndOfStream()) { if (buffer.isEndOfStream()) {
isEnded = true; isEnded = true;
...@@ -125,7 +134,8 @@ public class FakeRenderer extends BaseRenderer { ...@@ -125,7 +134,8 @@ public class FakeRenderer extends BaseRenderer {
@Override @Override
@Capabilities @Capabilities
public int supportsFormat(Format format) throws ExoPlaybackException { public int supportsFormat(Format format) throws ExoPlaybackException {
return getTrackType() == MimeTypes.getTrackType(format.sampleMimeType) int trackType = MimeTypes.getTrackType(format.sampleMimeType);
return trackType != C.TRACK_TYPE_UNKNOWN && trackType == getTrackType()
? RendererCapabilities.create(FORMAT_HANDLED, ADAPTIVE_SEAMLESS, TUNNELING_NOT_SUPPORTED) ? RendererCapabilities.create(FORMAT_HANDLED, ADAPTIVE_SEAMLESS, TUNNELING_NOT_SUPPORTED)
: RendererCapabilities.create(FORMAT_UNSUPPORTED_TYPE); : RendererCapabilities.create(FORMAT_UNSUPPORTED_TYPE);
} }
...@@ -133,6 +143,11 @@ public class FakeRenderer extends BaseRenderer { ...@@ -133,6 +143,11 @@ public class FakeRenderer extends BaseRenderer {
/** Called when the renderer reads a new format. */ /** Called when the renderer reads a new format. */
protected void onFormatChanged(Format format) {} protected void onFormatChanged(Format format) {}
/** Returns the list of formats read by the renderer. */
public List<Format> getFormatsRead() {
return Collections.unmodifiableList(formatsRead);
}
/** /**
* Called before the renderer processes a buffer. * Called before the renderer processes a buffer.
* *
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment