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
This commit is contained in:
parent
13ffb9c684
commit
cb414e8743
@ -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;
|
||||||
|
@ -120,7 +120,7 @@ public final class ExoPlayerTest {
|
|||||||
public void playEmptyTimeline() throws Exception {
|
public void playEmptyTimeline() throws Exception {
|
||||||
Timeline timeline = Timeline.EMPTY;
|
Timeline timeline = Timeline.EMPTY;
|
||||||
Timeline expectedMaskingTimeline = new MaskingMediaSource.DummyTimeline(/* tag= */ null);
|
Timeline expectedMaskingTimeline = new MaskingMediaSource.DummyTimeline(/* tag= */ null);
|
||||||
FakeRenderer renderer = new FakeRenderer();
|
FakeRenderer renderer = new FakeRenderer(C.TRACK_TYPE_UNKNOWN);
|
||||||
ExoPlayerTestRunner testRunner =
|
ExoPlayerTestRunner testRunner =
|
||||||
new Builder()
|
new Builder()
|
||||||
.setTimeline(timeline)
|
.setTimeline(timeline)
|
||||||
@ -133,7 +133,7 @@ public final class ExoPlayerTest {
|
|||||||
testRunner.assertTimelineChangeReasonsEqual(
|
testRunner.assertTimelineChangeReasonsEqual(
|
||||||
Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED,
|
Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED,
|
||||||
Player.TIMELINE_CHANGE_REASON_SOURCE_UPDATE);
|
Player.TIMELINE_CHANGE_REASON_SOURCE_UPDATE);
|
||||||
assertThat(renderer.formatReadCount).isEqualTo(0);
|
assertThat(renderer.getFormatsRead()).isEmpty();
|
||||||
assertThat(renderer.sampleBufferReadCount).isEqualTo(0);
|
assertThat(renderer.sampleBufferReadCount).isEqualTo(0);
|
||||||
assertThat(renderer.isEnded).isFalse();
|
assertThat(renderer.isEnded).isFalse();
|
||||||
}
|
}
|
||||||
@ -143,7 +143,7 @@ public final class ExoPlayerTest {
|
|||||||
public void playSinglePeriodTimeline() throws Exception {
|
public void playSinglePeriodTimeline() throws Exception {
|
||||||
Object manifest = new Object();
|
Object manifest = new Object();
|
||||||
Timeline timeline = new FakeTimeline(/* windowCount= */ 1, manifest);
|
Timeline timeline = new FakeTimeline(/* windowCount= */ 1, manifest);
|
||||||
FakeRenderer renderer = new FakeRenderer(Builder.VIDEO_FORMAT);
|
FakeRenderer renderer = new FakeRenderer(C.TRACK_TYPE_VIDEO);
|
||||||
ExoPlayerTestRunner testRunner =
|
ExoPlayerTestRunner testRunner =
|
||||||
new Builder()
|
new Builder()
|
||||||
.setTimeline(timeline)
|
.setTimeline(timeline)
|
||||||
@ -158,7 +158,7 @@ public final class ExoPlayerTest {
|
|||||||
Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED,
|
Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED,
|
||||||
Player.TIMELINE_CHANGE_REASON_SOURCE_UPDATE);
|
Player.TIMELINE_CHANGE_REASON_SOURCE_UPDATE);
|
||||||
testRunner.assertTrackGroupsEqual(new TrackGroupArray(new TrackGroup(Builder.VIDEO_FORMAT)));
|
testRunner.assertTrackGroupsEqual(new TrackGroupArray(new TrackGroup(Builder.VIDEO_FORMAT)));
|
||||||
assertThat(renderer.formatReadCount).isEqualTo(1);
|
assertThat(renderer.getFormatsRead()).containsExactly(Builder.VIDEO_FORMAT);
|
||||||
assertThat(renderer.sampleBufferReadCount).isEqualTo(1);
|
assertThat(renderer.sampleBufferReadCount).isEqualTo(1);
|
||||||
assertThat(renderer.isEnded).isTrue();
|
assertThat(renderer.isEnded).isTrue();
|
||||||
}
|
}
|
||||||
@ -167,7 +167,7 @@ public final class ExoPlayerTest {
|
|||||||
@Test
|
@Test
|
||||||
public void playMultiPeriodTimeline() throws Exception {
|
public void playMultiPeriodTimeline() throws Exception {
|
||||||
Timeline timeline = new FakeTimeline(/* windowCount= */ 3);
|
Timeline timeline = new FakeTimeline(/* windowCount= */ 3);
|
||||||
FakeRenderer renderer = new FakeRenderer(Builder.VIDEO_FORMAT);
|
FakeRenderer renderer = new FakeRenderer(C.TRACK_TYPE_VIDEO);
|
||||||
ExoPlayerTestRunner testRunner =
|
ExoPlayerTestRunner testRunner =
|
||||||
new Builder()
|
new Builder()
|
||||||
.setTimeline(timeline)
|
.setTimeline(timeline)
|
||||||
@ -182,7 +182,8 @@ public final class ExoPlayerTest {
|
|||||||
testRunner.assertTimelineChangeReasonsEqual(
|
testRunner.assertTimelineChangeReasonsEqual(
|
||||||
Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED,
|
Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED,
|
||||||
Player.TIMELINE_CHANGE_REASON_SOURCE_UPDATE);
|
Player.TIMELINE_CHANGE_REASON_SOURCE_UPDATE);
|
||||||
assertThat(renderer.formatReadCount).isEqualTo(3);
|
assertThat(renderer.getFormatsRead())
|
||||||
|
.containsExactly(Builder.VIDEO_FORMAT, Builder.VIDEO_FORMAT, Builder.VIDEO_FORMAT);
|
||||||
assertThat(renderer.sampleBufferReadCount).isEqualTo(3);
|
assertThat(renderer.sampleBufferReadCount).isEqualTo(3);
|
||||||
assertThat(renderer.isEnded).isTrue();
|
assertThat(renderer.isEnded).isTrue();
|
||||||
}
|
}
|
||||||
@ -193,7 +194,7 @@ public final class ExoPlayerTest {
|
|||||||
// TimelineWindowDefinition.DEFAULT_WINDOW_DURATION_US / 100 = 1000 us per period.
|
// TimelineWindowDefinition.DEFAULT_WINDOW_DURATION_US / 100 = 1000 us per period.
|
||||||
Timeline timeline =
|
Timeline timeline =
|
||||||
new FakeTimeline(new TimelineWindowDefinition(/* periodCount= */ 100, /* id= */ 0));
|
new FakeTimeline(new TimelineWindowDefinition(/* periodCount= */ 100, /* id= */ 0));
|
||||||
FakeRenderer renderer = new FakeRenderer(Builder.VIDEO_FORMAT);
|
FakeRenderer renderer = new FakeRenderer(C.TRACK_TYPE_VIDEO);
|
||||||
ExoPlayerTestRunner testRunner =
|
ExoPlayerTestRunner testRunner =
|
||||||
new Builder()
|
new Builder()
|
||||||
.setTimeline(timeline)
|
.setTimeline(timeline)
|
||||||
@ -208,7 +209,7 @@ public final class ExoPlayerTest {
|
|||||||
testRunner.assertTimelineChangeReasonsEqual(
|
testRunner.assertTimelineChangeReasonsEqual(
|
||||||
Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED,
|
Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED,
|
||||||
Player.TIMELINE_CHANGE_REASON_SOURCE_UPDATE);
|
Player.TIMELINE_CHANGE_REASON_SOURCE_UPDATE);
|
||||||
assertThat(renderer.formatReadCount).isEqualTo(100);
|
assertThat(renderer.getFormatsRead()).hasSize(100);
|
||||||
assertThat(renderer.sampleBufferReadCount).isEqualTo(100);
|
assertThat(renderer.sampleBufferReadCount).isEqualTo(100);
|
||||||
assertThat(renderer.isEnded).isTrue();
|
assertThat(renderer.isEnded).isTrue();
|
||||||
}
|
}
|
||||||
@ -242,9 +243,9 @@ public final class ExoPlayerTest {
|
|||||||
/* isDynamic= */ false,
|
/* isDynamic= */ false,
|
||||||
/* durationUs= */ 100_000);
|
/* durationUs= */ 100_000);
|
||||||
Timeline timeline = new FakeTimeline(windowDefinition0, windowDefinition1, windowDefinition2);
|
Timeline timeline = new FakeTimeline(windowDefinition0, windowDefinition1, windowDefinition2);
|
||||||
final FakeRenderer videoRenderer = new FakeRenderer(Builder.VIDEO_FORMAT);
|
final FakeRenderer videoRenderer = new FakeRenderer(C.TRACK_TYPE_VIDEO);
|
||||||
FakeMediaClockRenderer audioRenderer =
|
FakeMediaClockRenderer audioRenderer =
|
||||||
new FakeMediaClockRenderer(Builder.AUDIO_FORMAT) {
|
new FakeMediaClockRenderer(C.TRACK_TYPE_AUDIO) {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public long getPositionUs() {
|
public long getPositionUs() {
|
||||||
@ -290,7 +291,7 @@ public final class ExoPlayerTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void resettingMediaSourcesGivesFreshSourceInfo() throws Exception {
|
public void resettingMediaSourcesGivesFreshSourceInfo() throws Exception {
|
||||||
FakeRenderer renderer = new FakeRenderer(Builder.VIDEO_FORMAT);
|
FakeRenderer renderer = new FakeRenderer(C.TRACK_TYPE_VIDEO);
|
||||||
Timeline firstTimeline =
|
Timeline firstTimeline =
|
||||||
new FakeTimeline(
|
new FakeTimeline(
|
||||||
new TimelineWindowDefinition(
|
new TimelineWindowDefinition(
|
||||||
@ -370,7 +371,7 @@ public final class ExoPlayerTest {
|
|||||||
@Test
|
@Test
|
||||||
public void repeatModeChanges() throws Exception {
|
public void repeatModeChanges() throws Exception {
|
||||||
Timeline timeline = new FakeTimeline(/* windowCount= */ 3);
|
Timeline timeline = new FakeTimeline(/* windowCount= */ 3);
|
||||||
FakeRenderer renderer = new FakeRenderer(Builder.VIDEO_FORMAT);
|
FakeRenderer renderer = new FakeRenderer(C.TRACK_TYPE_VIDEO);
|
||||||
ActionSchedule actionSchedule =
|
ActionSchedule actionSchedule =
|
||||||
new ActionSchedule.Builder(TAG)
|
new ActionSchedule.Builder(TAG)
|
||||||
.pause()
|
.pause()
|
||||||
@ -427,7 +428,7 @@ public final class ExoPlayerTest {
|
|||||||
};
|
};
|
||||||
ConcatenatingMediaSource mediaSource =
|
ConcatenatingMediaSource mediaSource =
|
||||||
new ConcatenatingMediaSource(false, new FakeShuffleOrder(3), fakeMediaSources);
|
new ConcatenatingMediaSource(false, new FakeShuffleOrder(3), fakeMediaSources);
|
||||||
FakeRenderer renderer = new FakeRenderer(Builder.VIDEO_FORMAT);
|
FakeRenderer renderer = new FakeRenderer(C.TRACK_TYPE_VIDEO);
|
||||||
ActionSchedule actionSchedule =
|
ActionSchedule actionSchedule =
|
||||||
new ActionSchedule.Builder(TAG)
|
new ActionSchedule.Builder(TAG)
|
||||||
.pause()
|
.pause()
|
||||||
@ -507,7 +508,7 @@ public final class ExoPlayerTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void periodHoldersReleasedAfterSeekWithRepeatModeAll() throws Exception {
|
public void periodHoldersReleasedAfterSeekWithRepeatModeAll() throws Exception {
|
||||||
FakeRenderer renderer = new FakeRenderer(Builder.VIDEO_FORMAT);
|
FakeRenderer renderer = new FakeRenderer(C.TRACK_TYPE_VIDEO);
|
||||||
ActionSchedule actionSchedule =
|
ActionSchedule actionSchedule =
|
||||||
new ActionSchedule.Builder(TAG)
|
new ActionSchedule.Builder(TAG)
|
||||||
.setRepeatMode(Player.REPEAT_MODE_ALL)
|
.setRepeatMode(Player.REPEAT_MODE_ALL)
|
||||||
@ -727,8 +728,8 @@ public final class ExoPlayerTest {
|
|||||||
Timeline timeline = new FakeTimeline(/* windowCount= */ 1);
|
Timeline timeline = new FakeTimeline(/* windowCount= */ 1);
|
||||||
MediaSource mediaSource =
|
MediaSource mediaSource =
|
||||||
new FakeMediaSource(timeline, Builder.VIDEO_FORMAT, Builder.AUDIO_FORMAT);
|
new FakeMediaSource(timeline, Builder.VIDEO_FORMAT, Builder.AUDIO_FORMAT);
|
||||||
FakeRenderer videoRenderer = new FakeRenderer(Builder.VIDEO_FORMAT);
|
FakeRenderer videoRenderer = new FakeRenderer(C.TRACK_TYPE_VIDEO);
|
||||||
FakeRenderer audioRenderer = new FakeRenderer(Builder.AUDIO_FORMAT);
|
FakeRenderer audioRenderer = new FakeRenderer(C.TRACK_TYPE_AUDIO);
|
||||||
FakeTrackSelector trackSelector = new FakeTrackSelector();
|
FakeTrackSelector trackSelector = new FakeTrackSelector();
|
||||||
|
|
||||||
new Builder()
|
new Builder()
|
||||||
@ -756,8 +757,8 @@ public final class ExoPlayerTest {
|
|||||||
Timeline timeline = new FakeTimeline(/* windowCount= */ 2);
|
Timeline timeline = new FakeTimeline(/* windowCount= */ 2);
|
||||||
MediaSource mediaSource =
|
MediaSource mediaSource =
|
||||||
new FakeMediaSource(timeline, Builder.VIDEO_FORMAT, Builder.AUDIO_FORMAT);
|
new FakeMediaSource(timeline, Builder.VIDEO_FORMAT, Builder.AUDIO_FORMAT);
|
||||||
FakeRenderer videoRenderer = new FakeRenderer(Builder.VIDEO_FORMAT);
|
FakeRenderer videoRenderer = new FakeRenderer(C.TRACK_TYPE_VIDEO);
|
||||||
FakeRenderer audioRenderer = new FakeRenderer(Builder.AUDIO_FORMAT);
|
FakeRenderer audioRenderer = new FakeRenderer(C.TRACK_TYPE_AUDIO);
|
||||||
FakeTrackSelector trackSelector = new FakeTrackSelector();
|
FakeTrackSelector trackSelector = new FakeTrackSelector();
|
||||||
|
|
||||||
new Builder()
|
new Builder()
|
||||||
@ -785,8 +786,8 @@ public final class ExoPlayerTest {
|
|||||||
Timeline timeline = new FakeTimeline(/* windowCount= */ 1);
|
Timeline timeline = new FakeTimeline(/* windowCount= */ 1);
|
||||||
MediaSource mediaSource =
|
MediaSource mediaSource =
|
||||||
new FakeMediaSource(timeline, Builder.VIDEO_FORMAT, Builder.AUDIO_FORMAT);
|
new FakeMediaSource(timeline, Builder.VIDEO_FORMAT, Builder.AUDIO_FORMAT);
|
||||||
FakeRenderer videoRenderer = new FakeRenderer(Builder.VIDEO_FORMAT);
|
FakeRenderer videoRenderer = new FakeRenderer(C.TRACK_TYPE_VIDEO);
|
||||||
FakeRenderer audioRenderer = new FakeRenderer(Builder.AUDIO_FORMAT);
|
FakeRenderer audioRenderer = new FakeRenderer(C.TRACK_TYPE_AUDIO);
|
||||||
final FakeTrackSelector trackSelector = new FakeTrackSelector();
|
final FakeTrackSelector trackSelector = new FakeTrackSelector();
|
||||||
ActionSchedule disableTrackAction =
|
ActionSchedule disableTrackAction =
|
||||||
new ActionSchedule.Builder(TAG)
|
new ActionSchedule.Builder(TAG)
|
||||||
@ -823,8 +824,8 @@ public final class ExoPlayerTest {
|
|||||||
Timeline timeline = new FakeTimeline(/* windowCount= */ 1);
|
Timeline timeline = new FakeTimeline(/* windowCount= */ 1);
|
||||||
MediaSource mediaSource =
|
MediaSource mediaSource =
|
||||||
new FakeMediaSource(timeline, Builder.VIDEO_FORMAT, Builder.AUDIO_FORMAT);
|
new FakeMediaSource(timeline, Builder.VIDEO_FORMAT, Builder.AUDIO_FORMAT);
|
||||||
FakeRenderer videoRenderer = new FakeRenderer(Builder.VIDEO_FORMAT);
|
FakeRenderer videoRenderer = new FakeRenderer(C.TRACK_TYPE_VIDEO);
|
||||||
FakeRenderer audioRenderer = new FakeRenderer(Builder.AUDIO_FORMAT);
|
FakeRenderer audioRenderer = new FakeRenderer(C.TRACK_TYPE_AUDIO);
|
||||||
final FakeTrackSelector trackSelector =
|
final FakeTrackSelector trackSelector =
|
||||||
new FakeTrackSelector(/* mayReuseTrackSelection= */ true);
|
new FakeTrackSelector(/* mayReuseTrackSelection= */ true);
|
||||||
ActionSchedule disableTrackAction =
|
ActionSchedule disableTrackAction =
|
||||||
@ -2356,7 +2357,7 @@ public final class ExoPlayerTest {
|
|||||||
public void setAndSwitchSurface() throws Exception {
|
public void setAndSwitchSurface() throws Exception {
|
||||||
final List<Integer> rendererMessages = new ArrayList<>();
|
final List<Integer> rendererMessages = new ArrayList<>();
|
||||||
Renderer videoRenderer =
|
Renderer videoRenderer =
|
||||||
new FakeRenderer(Builder.VIDEO_FORMAT) {
|
new FakeRenderer(C.TRACK_TYPE_VIDEO) {
|
||||||
@Override
|
@Override
|
||||||
public void handleMessage(int what, @Nullable Object object) throws ExoPlaybackException {
|
public void handleMessage(int what, @Nullable Object object) throws ExoPlaybackException {
|
||||||
super.handleMessage(what, object);
|
super.handleMessage(what, object);
|
||||||
@ -2842,7 +2843,7 @@ public final class ExoPlayerTest {
|
|||||||
};
|
};
|
||||||
ConcatenatingMediaSource concatenatingMediaSource =
|
ConcatenatingMediaSource concatenatingMediaSource =
|
||||||
new ConcatenatingMediaSource(workingMediaSource, failingMediaSource);
|
new ConcatenatingMediaSource(workingMediaSource, failingMediaSource);
|
||||||
FakeRenderer renderer = new FakeRenderer(Builder.VIDEO_FORMAT);
|
FakeRenderer renderer = new FakeRenderer(C.TRACK_TYPE_VIDEO);
|
||||||
ExoPlayerTestRunner testRunner =
|
ExoPlayerTestRunner testRunner =
|
||||||
new Builder()
|
new Builder()
|
||||||
.setMediaSources(concatenatingMediaSource)
|
.setMediaSources(concatenatingMediaSource)
|
||||||
@ -2885,7 +2886,7 @@ public final class ExoPlayerTest {
|
|||||||
.executeRunnable(() -> concatenatingMediaSource.addMediaSource(failingMediaSource))
|
.executeRunnable(() -> concatenatingMediaSource.addMediaSource(failingMediaSource))
|
||||||
.play()
|
.play()
|
||||||
.build();
|
.build();
|
||||||
FakeRenderer renderer = new FakeRenderer(Builder.VIDEO_FORMAT);
|
FakeRenderer renderer = new FakeRenderer(C.TRACK_TYPE_VIDEO);
|
||||||
ExoPlayerTestRunner testRunner =
|
ExoPlayerTestRunner testRunner =
|
||||||
new Builder()
|
new Builder()
|
||||||
.setMediaSources(concatenatingMediaSource)
|
.setMediaSources(concatenatingMediaSource)
|
||||||
@ -3205,7 +3206,7 @@ public final class ExoPlayerTest {
|
|||||||
setUnsupportedPlaybackParametersConsecutivelyNotifiesListenerForEveryChangeOnceAndResetsOnceHandled()
|
setUnsupportedPlaybackParametersConsecutivelyNotifiesListenerForEveryChangeOnceAndResetsOnceHandled()
|
||||||
throws Exception {
|
throws Exception {
|
||||||
Renderer renderer =
|
Renderer renderer =
|
||||||
new FakeMediaClockRenderer(Builder.AUDIO_FORMAT) {
|
new FakeMediaClockRenderer(C.TRACK_TYPE_AUDIO) {
|
||||||
@Override
|
@Override
|
||||||
public long getPositionUs() {
|
public long getPositionUs() {
|
||||||
return 0;
|
return 0;
|
||||||
@ -5700,9 +5701,9 @@ public final class ExoPlayerTest {
|
|||||||
new FakeMediaSource(new FakeTimeline(/* windowCount= */ 1), Builder.VIDEO_FORMAT);
|
new FakeMediaSource(new FakeTimeline(/* windowCount= */ 1), Builder.VIDEO_FORMAT);
|
||||||
FakeMediaSource source2 =
|
FakeMediaSource source2 =
|
||||||
new FakeMediaSource(new FakeTimeline(/* windowCount= */ 1), Builder.AUDIO_FORMAT);
|
new FakeMediaSource(new FakeTimeline(/* windowCount= */ 1), Builder.AUDIO_FORMAT);
|
||||||
FakeRenderer videoRenderer = new FakeRenderer(Builder.VIDEO_FORMAT);
|
FakeRenderer videoRenderer = new FakeRenderer(C.TRACK_TYPE_VIDEO);
|
||||||
FakeRenderer audioRenderer =
|
FakeRenderer audioRenderer =
|
||||||
new FakeRenderer(Builder.AUDIO_FORMAT) {
|
new FakeRenderer(C.TRACK_TYPE_AUDIO) {
|
||||||
@Override
|
@Override
|
||||||
protected void onEnabled(boolean joining, boolean mayRenderStartOfStream)
|
protected void onEnabled(boolean joining, boolean mayRenderStartOfStream)
|
||||||
throws ExoPlaybackException {
|
throws ExoPlaybackException {
|
||||||
@ -5761,14 +5762,14 @@ public final class ExoPlayerTest {
|
|||||||
FakeMediaSource source2 =
|
FakeMediaSource source2 =
|
||||||
new FakeMediaSource(new FakeTimeline(/* windowCount= */ 1), Builder.AUDIO_FORMAT);
|
new FakeMediaSource(new FakeTimeline(/* windowCount= */ 1), Builder.AUDIO_FORMAT);
|
||||||
FakeRenderer videoRenderer =
|
FakeRenderer videoRenderer =
|
||||||
new FakeRenderer(Builder.VIDEO_FORMAT) {
|
new FakeRenderer(C.TRACK_TYPE_VIDEO) {
|
||||||
@Override
|
@Override
|
||||||
protected void onStopped() throws ExoPlaybackException {
|
protected void onStopped() throws ExoPlaybackException {
|
||||||
// Fail when stopping the renderer. This will happen during the period transition.
|
// Fail when stopping the renderer. This will happen during the period transition.
|
||||||
throw createRendererException(new IllegalStateException(), Builder.VIDEO_FORMAT);
|
throw createRendererException(new IllegalStateException(), Builder.VIDEO_FORMAT);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
FakeRenderer audioRenderer = new FakeRenderer(Builder.AUDIO_FORMAT);
|
FakeRenderer audioRenderer = new FakeRenderer(C.TRACK_TYPE_AUDIO);
|
||||||
AtomicReference<TrackGroupArray> trackGroupsAfterError = new AtomicReference<>();
|
AtomicReference<TrackGroupArray> trackGroupsAfterError = new AtomicReference<>();
|
||||||
AtomicReference<TrackSelectionArray> trackSelectionsAfterError = new AtomicReference<>();
|
AtomicReference<TrackSelectionArray> trackSelectionsAfterError = new AtomicReference<>();
|
||||||
AtomicInteger windowIndexAfterError = new AtomicInteger();
|
AtomicInteger windowIndexAfterError = new AtomicInteger();
|
||||||
@ -5822,9 +5823,9 @@ public final class ExoPlayerTest {
|
|||||||
new FakeTimeline(/* windowCount= */ 1), Builder.VIDEO_FORMAT, Builder.AUDIO_FORMAT);
|
new FakeTimeline(/* windowCount= */ 1), Builder.VIDEO_FORMAT, Builder.AUDIO_FORMAT);
|
||||||
FakeMediaSource source2 =
|
FakeMediaSource source2 =
|
||||||
new FakeMediaSource(new FakeTimeline(/* windowCount= */ 1), Builder.AUDIO_FORMAT);
|
new FakeMediaSource(new FakeTimeline(/* windowCount= */ 1), Builder.AUDIO_FORMAT);
|
||||||
FakeRenderer videoRenderer = new FakeRenderer(Builder.VIDEO_FORMAT);
|
FakeRenderer videoRenderer = new FakeRenderer(C.TRACK_TYPE_VIDEO);
|
||||||
FakeRenderer audioRenderer =
|
FakeRenderer audioRenderer =
|
||||||
new FakeRenderer(Builder.AUDIO_FORMAT) {
|
new FakeRenderer(C.TRACK_TYPE_AUDIO) {
|
||||||
@Override
|
@Override
|
||||||
protected void onStreamChanged(Format[] formats, long offsetUs)
|
protected void onStreamChanged(Format[] formats, long offsetUs)
|
||||||
throws ExoPlaybackException {
|
throws ExoPlaybackException {
|
||||||
@ -5884,9 +5885,9 @@ public final class ExoPlayerTest {
|
|||||||
FakeMediaSource source2 =
|
FakeMediaSource source2 =
|
||||||
new FakeMediaSource(new FakeTimeline(/* windowCount= */ 1), Builder.AUDIO_FORMAT);
|
new FakeMediaSource(new FakeTimeline(/* windowCount= */ 1), Builder.AUDIO_FORMAT);
|
||||||
AtomicInteger audioRendererEnableCount = new AtomicInteger(0);
|
AtomicInteger audioRendererEnableCount = new AtomicInteger(0);
|
||||||
FakeRenderer videoRenderer = new FakeRenderer(Builder.VIDEO_FORMAT);
|
FakeRenderer videoRenderer = new FakeRenderer(C.TRACK_TYPE_VIDEO);
|
||||||
FakeRenderer audioRenderer =
|
FakeRenderer audioRenderer =
|
||||||
new FakeRenderer(Builder.AUDIO_FORMAT) {
|
new FakeRenderer(C.TRACK_TYPE_AUDIO) {
|
||||||
@Override
|
@Override
|
||||||
protected void onEnabled(boolean joining, boolean mayRenderStartOfStream)
|
protected void onEnabled(boolean joining, boolean mayRenderStartOfStream)
|
||||||
throws ExoPlaybackException {
|
throws ExoPlaybackException {
|
||||||
|
@ -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 {
|
|||||||
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 {
|
|||||||
|
|
||||||
@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;
|
|||||||
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
|
|||||||
}
|
}
|
||||||
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 @@
|
|||||||
*/
|
*/
|
||||||
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 @@
|
|||||||
*/
|
*/
|
||||||
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;
|
|||||||
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 {
|
|||||||
*/
|
*/
|
||||||
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 {
|
|||||||
@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 {
|
|||||||
@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 {
|
|||||||
/** 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.
|
||||||
*
|
*
|
||||||
|
Loading…
x
Reference in New Issue
Block a user