Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(323)

Unified Diff: webrtc/api/androidtests/src/org/webrtc/CameraVideoCapturerTest.java

Issue 2024843002: Refactor VideoCapturerAndroid tests in WebRTC. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Changes according to magjed's comments #2 Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: webrtc/api/androidtests/src/org/webrtc/CameraVideoCapturerTest.java
diff --git a/webrtc/api/androidtests/src/org/webrtc/CameraVideoCapturerTest.java b/webrtc/api/androidtests/src/org/webrtc/CameraVideoCapturerTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..8a4ea69b8285f83c44637d56ad094cf46dac844f
--- /dev/null
+++ b/webrtc/api/androidtests/src/org/webrtc/CameraVideoCapturerTest.java
@@ -0,0 +1,187 @@
+/*
+ * Copyright 2015 The WebRTC project authors. All Rights Reserved.
+ *
+ * Use of this source code is governed by a BSD-style license
+ * that can be found in the LICENSE file in the root of the source
+ * tree. An additional intellectual property rights grant can be found
+ * in the file PATENTS. All contributing project authors may
+ * be found in the AUTHORS file in the root of the source tree.
+ */
+package org.webrtc;
+
+import android.test.InstrumentationTestCase;
+import android.test.suitebuilder.annotation.SmallTest;
+import android.test.suitebuilder.annotation.MediumTest;
+import android.test.suitebuilder.annotation.Suppress;
+
+import org.webrtc.Logging;
+
+public abstract class CameraVideoCapturerTest extends InstrumentationTestCase {
+ static final String TAG = "CameraVideoCapturerTest";
+
+ abstract protected CameraVideoCapturer createCapturer(
+ String name, CameraVideoCapturer.CameraEventsHandler eventsHandler);
+ abstract protected String getNameOfFrontFacingDevice();
+ abstract protected String getNameOfBackFacingDevice();
+ abstract protected boolean haveTwoCameras();
+ abstract protected boolean isCapturingToTexture();
+
+ private void startVideoCapturerWithNameTestHelper(String deviceName) throws InterruptedException {
+ if (deviceName == null) {
+ Logging.w(TAG, "Skipping video capturer test because device name is null.");
+ return;
+ }
+
+ CameraVideoCapturer capturer = createCapturer(deviceName, null);
+ CameraVideoCapturerTestFixtures.startCapturerAndRender(capturer);
+ }
+
+ @Override
+ protected void setUp() {
+ assertTrue(PeerConnectionFactory.initializeAndroidGlobals(
+ getInstrumentation().getContext(), true, true, true));
+ }
+
+ // This test that the default camera can be started and that the camera can
+ // later be switched to another camera.
+ // It tests both the Java and the C++ layer.
+ @Suppress
+ @SmallTest
+ public void testSwitchVideoCapturer() throws InterruptedException {
+ if (!haveTwoCameras()) {
+ Logging.w(TAG,
+ "Skipping test switch video capturer because the device doesn't have two cameras.");
+ }
+
+ CameraVideoCapturer capturer = createCapturer("", null);
+ CameraVideoCapturerTestFixtures.switchCamera(capturer);
+ }
+
+ @Suppress
+ @SmallTest
+ public void testCreateAndRelease() {
+ CameraVideoCapturerTestFixtures.release(createCapturer("", null));
+ }
+
+ @Suppress
+ @SmallTest
+ public void testCreateNonExistingCamera() {
+ try {
+ CameraVideoCapturer capturer = createCapturer("non-existing camera", null);
+ } catch (IllegalArgumentException e) {
+ return;
+ }
+
+ fail("Expected illegal argument exception when creating non-existing camera.");
+ }
+
+ // This test that the camera can be started and that the frames are forwarded
+ // to a Java video renderer using a "default" capturer.
+ // It tests both the Java and the C++ layer.
+ @Suppress
+ @SmallTest
+ public void testStartVideoCapturer() throws InterruptedException {
+ CameraVideoCapturer capturer = createCapturer("", null);
+ CameraVideoCapturerTestFixtures.startCapturerAndRender(capturer);
+ }
+
+ @Suppress
+ @MediumTest
+ public void testCameraEvents() throws InterruptedException {
+ CameraVideoCapturerTestFixtures.CameraEvents cameraEvents =
+ CameraVideoCapturerTestFixtures.createCameraEvents();
+ CameraVideoCapturer capturer = createCapturer("", cameraEvents);
+ CameraVideoCapturerTestFixtures.cameraEventsInvoked(
+ capturer, cameraEvents, getInstrumentation().getContext(), isCapturingToTexture());
+ }
+
+ // This test that the VideoSource that the CameraVideoCapturer is connected to can
+ // be stopped and restarted. It tests both the Java and the C++ layer.
+ @Suppress
+ @SmallTest
+ public void testStopRestartVideoSource() throws InterruptedException {
+ CameraVideoCapturer capturer = createCapturer("", null);
+ CameraVideoCapturerTestFixtures.stopRestartVideoSource(capturer);
+ }
+
+ // This test that the camera can be started at different resolutions.
+ // It does not test or use the C++ layer.
+ @Suppress
+ @SmallTest
+ public void testStartStopWithDifferentResolutions() throws InterruptedException {
+ CameraVideoCapturer capturer = createCapturer("", null);
+ CameraVideoCapturerTestFixtures.startStopWithDifferentResolutions(capturer,
+ getInstrumentation().getContext(), isCapturingToTexture());
+ }
+
+ // This test what happens if buffers are returned after the capturer have
+ // been stopped and restarted. It does not test or use the C++ layer.
+ @Suppress
+ @SmallTest
+ public void testReturnBufferLate() throws InterruptedException {
+ CameraVideoCapturer capturer = createCapturer("", null);
+ CameraVideoCapturerTestFixtures.returnBufferLate(capturer,
+ getInstrumentation().getContext(), isCapturingToTexture());
+ }
+
+ // This test that we can capture frames, keep the frames in a local renderer, stop capturing,
+ // and then return the frames. The difference between the test testReturnBufferLate() is that we
+ // also test the JNI and C++ AndroidVideoCapturer parts.
+ @Suppress
+ @MediumTest
+ public void testReturnBufferLateEndToEnd() throws InterruptedException {
+ final CameraVideoCapturer capturer = createCapturer("", null);
+ CameraVideoCapturerTestFixtures.returnBufferLateEndToEnd(capturer);
+ }
+
+ // This test that CameraEventsHandler.onError is triggered if video buffers are not returned to
+ // the capturer.
+ @Suppress
+ @MediumTest
+ public void testCameraFreezedEventOnBufferStarvation() throws InterruptedException {
+ CameraVideoCapturerTestFixtures.CameraEvents cameraEvents =
+ CameraVideoCapturerTestFixtures.createCameraEvents();
+ CameraVideoCapturer capturer = createCapturer("", cameraEvents);
+ CameraVideoCapturerTestFixtures.cameraFreezedEventOnBufferStarvationUsingTextures(capturer,
+ cameraEvents, getInstrumentation().getContext(), isCapturingToTexture());
+ }
+
+ // This test that frames forwarded to a renderer is scaled if onOutputFormatRequest is
+ // called. This test both Java and C++ parts of of the stack.
+ @Suppress
+ @MediumTest
+ public void testScaleCameraOutput() throws InterruptedException {
+ CameraVideoCapturer capturer = createCapturer("", null);
+ CameraVideoCapturerTestFixtures.scaleCameraOutput(capturer);
+ }
+
+ // This test that the camera can be started and that the frames are forwarded
+ // to a Java video renderer using the front facing video capturer.
+ // It tests both the Java and the C++ layer.
+ @Suppress
+ @SmallTest
+ public void testStartFrontFacingVideoCapturer() throws InterruptedException {
+ String deviceName = getNameOfFrontFacingDevice();
+ startVideoCapturerWithNameTestHelper(deviceName);
+ }
+
+ // This test that the camera can be started and that the frames are forwarded
+ // to a Java video renderer using the back facing video capturer.
+ // It tests both the Java and the C++ layer.
+ @Suppress
+ @SmallTest
+ public void testStartBackFacingVideoCapturer() throws InterruptedException {
+ String deviceName = getNameOfBackFacingDevice();
+ startVideoCapturerWithNameTestHelper(deviceName);
+ }
+
+ // Test what happens when attempting to call e.g. switchCamera() after camera has been stopped.
+ @Suppress
+ @MediumTest
+ public void testCameraCallsAfterStop() throws InterruptedException {
+ CameraVideoCapturer capturer = createCapturer("", null);
+
+ CameraVideoCapturerTestFixtures.cameraCallsAfterStop(capturer,
+ getInstrumentation().getContext(), isCapturingToTexture());
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698