mirror of
https://github.com/androidx/media.git
synced 2025-05-08 08:00:49 +08:00
MediaCodecVideoRendererTest: remove LooperMode.LEGACY
PiperOrigin-RevId: 322536247
This commit is contained in:
parent
f81a353bf8
commit
433734dce7
@ -26,9 +26,11 @@ import static org.mockito.Mockito.inOrder;
|
|||||||
import static org.mockito.Mockito.never;
|
import static org.mockito.Mockito.never;
|
||||||
import static org.mockito.Mockito.times;
|
import static org.mockito.Mockito.times;
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
|
import static org.robolectric.Shadows.shadowOf;
|
||||||
|
|
||||||
import android.graphics.SurfaceTexture;
|
import android.graphics.SurfaceTexture;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
|
import android.os.Looper;
|
||||||
import android.os.SystemClock;
|
import android.os.SystemClock;
|
||||||
import android.view.Surface;
|
import android.view.Surface;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
@ -58,11 +60,10 @@ import org.mockito.InOrder;
|
|||||||
import org.mockito.Mock;
|
import org.mockito.Mock;
|
||||||
import org.mockito.junit.MockitoJUnit;
|
import org.mockito.junit.MockitoJUnit;
|
||||||
import org.mockito.junit.MockitoRule;
|
import org.mockito.junit.MockitoRule;
|
||||||
import org.robolectric.annotation.LooperMode;
|
import org.robolectric.shadows.ShadowLooper;
|
||||||
|
|
||||||
/** Unit test for {@link MediaCodecVideoRenderer}. */
|
/** Unit test for {@link MediaCodecVideoRenderer}. */
|
||||||
@RunWith(AndroidJUnit4.class)
|
@RunWith(AndroidJUnit4.class)
|
||||||
@LooperMode(LooperMode.Mode.LEGACY)
|
|
||||||
public class MediaCodecVideoRendererTest {
|
public class MediaCodecVideoRendererTest {
|
||||||
@Rule public final MockitoRule mockito = MockitoJUnit.rule();
|
@Rule public final MockitoRule mockito = MockitoJUnit.rule();
|
||||||
|
|
||||||
@ -73,6 +74,7 @@ public class MediaCodecVideoRendererTest {
|
|||||||
.setHeight(1080)
|
.setHeight(1080)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
|
private Looper testMainLooper;
|
||||||
private MediaCodecVideoRenderer mediaCodecVideoRenderer;
|
private MediaCodecVideoRenderer mediaCodecVideoRenderer;
|
||||||
@Nullable private Format currentOutputFormat;
|
@Nullable private Format currentOutputFormat;
|
||||||
|
|
||||||
@ -80,6 +82,7 @@ public class MediaCodecVideoRendererTest {
|
|||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() throws Exception {
|
public void setUp() throws Exception {
|
||||||
|
testMainLooper = Looper.getMainLooper();
|
||||||
MediaCodecSelector mediaCodecSelector =
|
MediaCodecSelector mediaCodecSelector =
|
||||||
(mimeType, requiresSecureDecoder, requiresTunnelingDecoder) ->
|
(mimeType, requiresSecureDecoder, requiresTunnelingDecoder) ->
|
||||||
Collections.singletonList(
|
Collections.singletonList(
|
||||||
@ -99,7 +102,7 @@ public class MediaCodecVideoRendererTest {
|
|||||||
ApplicationProvider.getApplicationContext(),
|
ApplicationProvider.getApplicationContext(),
|
||||||
mediaCodecSelector,
|
mediaCodecSelector,
|
||||||
/* allowedJoiningTimeMs= */ 0,
|
/* allowedJoiningTimeMs= */ 0,
|
||||||
/* eventHandler= */ new Handler(),
|
/* eventHandler= */ new Handler(testMainLooper),
|
||||||
/* eventListener= */ eventListener,
|
/* eventListener= */ eventListener,
|
||||||
/* maxDroppedFramesToNotify= */ 1) {
|
/* maxDroppedFramesToNotify= */ 1) {
|
||||||
@Override
|
@Override
|
||||||
@ -152,6 +155,7 @@ public class MediaCodecVideoRendererTest {
|
|||||||
mediaCodecVideoRenderer.render(posUs, SystemClock.elapsedRealtime() * 1000);
|
mediaCodecVideoRenderer.render(posUs, SystemClock.elapsedRealtime() * 1000);
|
||||||
posUs += 40_000;
|
posUs += 40_000;
|
||||||
}
|
}
|
||||||
|
shadowOf(testMainLooper).idle();
|
||||||
|
|
||||||
verify(eventListener).onDroppedFrames(eq(1), anyLong());
|
verify(eventListener).onDroppedFrames(eq(1), anyLong());
|
||||||
}
|
}
|
||||||
@ -182,6 +186,7 @@ public class MediaCodecVideoRendererTest {
|
|||||||
mediaCodecVideoRenderer.render(positionUs, SystemClock.elapsedRealtime() * 1000);
|
mediaCodecVideoRenderer.render(positionUs, SystemClock.elapsedRealtime() * 1000);
|
||||||
positionUs += 10;
|
positionUs += 10;
|
||||||
} while (!mediaCodecVideoRenderer.isEnded());
|
} while (!mediaCodecVideoRenderer.isEnded());
|
||||||
|
shadowOf(testMainLooper).idle();
|
||||||
|
|
||||||
verify(eventListener)
|
verify(eventListener)
|
||||||
.onVideoSizeChanged(
|
.onVideoSizeChanged(
|
||||||
@ -234,6 +239,7 @@ public class MediaCodecVideoRendererTest {
|
|||||||
mediaCodecVideoRenderer.render(/* positionUs= */ pos, SystemClock.elapsedRealtime() * 1000);
|
mediaCodecVideoRenderer.render(/* positionUs= */ pos, SystemClock.elapsedRealtime() * 1000);
|
||||||
pos += 250;
|
pos += 250;
|
||||||
} while (!mediaCodecVideoRenderer.isEnded());
|
} while (!mediaCodecVideoRenderer.isEnded());
|
||||||
|
shadowOf(testMainLooper).idle();
|
||||||
|
|
||||||
InOrder orderVerifier = inOrder(eventListener);
|
InOrder orderVerifier = inOrder(eventListener);
|
||||||
orderVerifier.verify(eventListener).onVideoSizeChanged(anyInt(), anyInt(), anyInt(), eq(1f));
|
orderVerifier.verify(eventListener).onVideoSizeChanged(anyInt(), anyInt(), anyInt(), eq(1f));
|
||||||
@ -274,6 +280,7 @@ public class MediaCodecVideoRendererTest {
|
|||||||
mediaCodecVideoRenderer.render(positionUs, SystemClock.elapsedRealtime() * 1000);
|
mediaCodecVideoRenderer.render(positionUs, SystemClock.elapsedRealtime() * 1000);
|
||||||
positionUs += 10;
|
positionUs += 10;
|
||||||
} while (!mediaCodecVideoRenderer.isEnded());
|
} while (!mediaCodecVideoRenderer.isEnded());
|
||||||
|
shadowOf(testMainLooper).idle();
|
||||||
|
|
||||||
assertThat(currentOutputFormat).isEqualTo(VIDEO_H264);
|
assertThat(currentOutputFormat).isEqualTo(VIDEO_H264);
|
||||||
}
|
}
|
||||||
@ -300,6 +307,7 @@ public class MediaCodecVideoRendererTest {
|
|||||||
for (int i = 0; i < 10; i++) {
|
for (int i = 0; i < 10; i++) {
|
||||||
mediaCodecVideoRenderer.render(/* positionUs= */ 0, SystemClock.elapsedRealtime() * 1000);
|
mediaCodecVideoRenderer.render(/* positionUs= */ 0, SystemClock.elapsedRealtime() * 1000);
|
||||||
}
|
}
|
||||||
|
shadowOf(testMainLooper).idle();
|
||||||
|
|
||||||
verify(eventListener).onRenderedFirstFrame(any());
|
verify(eventListener).onRenderedFirstFrame(any());
|
||||||
}
|
}
|
||||||
@ -327,6 +335,7 @@ public class MediaCodecVideoRendererTest {
|
|||||||
for (int i = 0; i < 10; i++) {
|
for (int i = 0; i < 10; i++) {
|
||||||
mediaCodecVideoRenderer.render(/* positionUs= */ 0, SystemClock.elapsedRealtime() * 1000);
|
mediaCodecVideoRenderer.render(/* positionUs= */ 0, SystemClock.elapsedRealtime() * 1000);
|
||||||
}
|
}
|
||||||
|
shadowOf(testMainLooper).idle();
|
||||||
|
|
||||||
verify(eventListener, never()).onRenderedFirstFrame(any());
|
verify(eventListener, never()).onRenderedFirstFrame(any());
|
||||||
}
|
}
|
||||||
@ -354,12 +363,14 @@ public class MediaCodecVideoRendererTest {
|
|||||||
for (int i = 0; i < 10; i++) {
|
for (int i = 0; i < 10; i++) {
|
||||||
mediaCodecVideoRenderer.render(/* positionUs= */ 0, SystemClock.elapsedRealtime() * 1000);
|
mediaCodecVideoRenderer.render(/* positionUs= */ 0, SystemClock.elapsedRealtime() * 1000);
|
||||||
}
|
}
|
||||||
|
shadowOf(testMainLooper).idle();
|
||||||
|
|
||||||
verify(eventListener).onRenderedFirstFrame(any());
|
verify(eventListener).onRenderedFirstFrame(any());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void replaceStream_rendersFirstFrameOnlyAfterStartPosition() throws Exception {
|
public void replaceStream_rendersFirstFrameOnlyAfterStartPosition() throws Exception {
|
||||||
|
ShadowLooper shadowLooper = shadowOf(testMainLooper);
|
||||||
FakeSampleStream fakeSampleStream1 =
|
FakeSampleStream fakeSampleStream1 =
|
||||||
new FakeSampleStream(
|
new FakeSampleStream(
|
||||||
/* mediaSourceEventDispatcher= */ null,
|
/* mediaSourceEventDispatcher= */ null,
|
||||||
@ -404,11 +415,13 @@ public class MediaCodecVideoRendererTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Expect only the first frame of the first stream to have been rendered.
|
// Expect only the first frame of the first stream to have been rendered.
|
||||||
|
shadowLooper.idle();
|
||||||
verify(eventListener).onRenderedFirstFrame(any());
|
verify(eventListener).onRenderedFirstFrame(any());
|
||||||
|
|
||||||
// Render to the start position of the stream and verify the new first frame gets rendered (even
|
// Render to the start position of the stream and verify the new first frame gets rendered (even
|
||||||
// though its sampleTimeUs is far in the future).
|
// though its sampleTimeUs is far in the future).
|
||||||
mediaCodecVideoRenderer.render(/* positionUs= */ 50, SystemClock.elapsedRealtime() * 1000);
|
mediaCodecVideoRenderer.render(/* positionUs= */ 50, SystemClock.elapsedRealtime() * 1000);
|
||||||
|
shadowLooper.idle();
|
||||||
|
|
||||||
verify(eventListener, times(2)).onRenderedFirstFrame(any());
|
verify(eventListener, times(2)).onRenderedFirstFrame(any());
|
||||||
}
|
}
|
||||||
@ -455,6 +468,7 @@ public class MediaCodecVideoRendererTest {
|
|||||||
positionUs += 10;
|
positionUs += 10;
|
||||||
} while (!mediaCodecVideoRenderer.isEnded());
|
} while (!mediaCodecVideoRenderer.isEnded());
|
||||||
mediaCodecVideoRenderer.stop();
|
mediaCodecVideoRenderer.stop();
|
||||||
|
shadowOf(testMainLooper).idle();
|
||||||
|
|
||||||
InOrder orderVerifier = inOrder(eventListener);
|
InOrder orderVerifier = inOrder(eventListener);
|
||||||
orderVerifier.verify(eventListener).onVideoFrameProcessingOffset(anyLong(), eq(1), eq(mp4Uhd));
|
orderVerifier.verify(eventListener).onVideoFrameProcessingOffset(anyLong(), eq(1), eq(mp4Uhd));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user