From 2fa14623ccd0410bea89563e7c4fb3dd4488daf9 Mon Sep 17 00:00:00 2001 From: sakal Date: Tue, 26 Jul 2016 05:41:36 -0700 Subject: [PATCH] Convert Android camera tests to use the new createVideoSource API. Review-Url: https://codereview.webrtc.org/2171023003 Cr-Commit-Position: refs/heads/master@{#13528} --- .../java/src/org/webrtc/Camera2Capturer.java | 7 ++++- .../CameraVideoCapturerTestFixtures.java | 31 ++++++++++++------- 2 files changed, 26 insertions(+), 12 deletions(-) diff --git a/webrtc/api/android/java/src/org/webrtc/Camera2Capturer.java b/webrtc/api/android/java/src/org/webrtc/Camera2Capturer.java index c3c912acd5..958eb7b3c0 100644 --- a/webrtc/api/android/java/src/org/webrtc/Camera2Capturer.java +++ b/webrtc/api/android/java/src/org/webrtc/Camera2Capturer.java @@ -267,6 +267,7 @@ public class Camera2Capturer implements Logging.d(TAG, "Close and release."); setCameraState(CameraState.STOPPING); + capturerObserver.onCapturerStopped(); // Remove all pending Runnables posted from |this|. cameraThreadHandler.removeCallbacksAndMessages(this /* token */); @@ -575,7 +576,6 @@ public class Camera2Capturer implements if (eventsHandler != null) { eventsHandler.onCameraClosed(); } - capturerObserver.onCapturerStopped(); } } @@ -862,6 +862,11 @@ public class Camera2Capturer implements int oesTextureId, float[] transformMatrix, long timestampNs) { checkIsOnCameraThread(); + if (cameraState != CameraState.RUNNING) { + Logging.d(TAG, "Texture frame received while camera was not running."); + return; + } + if (eventsHandler != null && !firstFrameReported) { eventsHandler.onFirstFrameAvailable(); firstFrameReported = true; diff --git a/webrtc/api/androidtests/src/org/webrtc/CameraVideoCapturerTestFixtures.java b/webrtc/api/androidtests/src/org/webrtc/CameraVideoCapturerTestFixtures.java index 4c933db0e3..7f89ac8a61 100644 --- a/webrtc/api/androidtests/src/org/webrtc/CameraVideoCapturerTestFixtures.java +++ b/webrtc/api/androidtests/src/org/webrtc/CameraVideoCapturerTestFixtures.java @@ -22,6 +22,10 @@ import java.util.concurrent.CountDownLatch; class CameraVideoCapturerTestFixtures { static final String TAG = "CameraVideoCapturerTestFixtures"; + // Default values used for starting capturing + static final int DEFAULT_WIDTH = 640; + static final int DEFAULT_HEIGHT = 480; + static final int DEFAULT_FPS = 15; static private class RendererCallbacks implements VideoRenderer.Callbacks { private int framesRendered = 0; @@ -344,6 +348,11 @@ class CameraVideoCapturerTestFixtures { } private void disposeCapturer(CapturerInstance instance) { + try { + instance.capturer.stopCapture(); + } catch (InterruptedException e) { + // TODO(sakal): Remove this once stopCapture no longer throws InterruptedException + } instance.capturer.dispose(); instance.surfaceTextureHelper.returnTextureFrame(); instance.surfaceTextureHelper.dispose(); @@ -352,8 +361,8 @@ class CameraVideoCapturerTestFixtures { private VideoTrackWithRenderer createVideoTrackWithRenderer(CameraVideoCapturer capturer, VideoRenderer.Callbacks rendererCallbacks) { VideoTrackWithRenderer videoTrackWithRenderer = new VideoTrackWithRenderer(); - videoTrackWithRenderer.source = - peerConnectionFactory.createVideoSource(capturer, new MediaConstraints()); + videoTrackWithRenderer.source = peerConnectionFactory.createVideoSource(capturer); + capturer.startCapture(DEFAULT_WIDTH, DEFAULT_HEIGHT, DEFAULT_FPS); videoTrackWithRenderer.track = peerConnectionFactory.createVideoTrack("dummy", videoTrackWithRenderer.source); videoTrackWithRenderer.track.addRenderer(new VideoRenderer(rendererCallbacks)); @@ -402,8 +411,8 @@ class CameraVideoCapturerTestFixtures { final VideoTrackWithRenderer videoTrackWithRenderer = createVideoTrackWithRenderer(capturerInstance.capturer); assertTrue(videoTrackWithRenderer.rendererCallbacks.waitForNextFrameToRender() > 0); - disposeVideoTrackWithRenderer(videoTrackWithRenderer); disposeCapturer(capturerInstance); + disposeVideoTrackWithRenderer(videoTrackWithRenderer); } // Test methods @@ -466,8 +475,8 @@ class CameraVideoCapturerTestFixtures { assertTrue(cameraSwitchSuccessful[0]); // Ensure that frames are received. assertTrue(videoTrackWithRenderer.rendererCallbacks.waitForNextFrameToRender() > 0); - disposeVideoTrackWithRenderer(videoTrackWithRenderer); disposeCapturer(capturerInstance); + disposeVideoTrackWithRenderer(videoTrackWithRenderer); } public void cameraEventsInvoked() throws InterruptedException { @@ -493,8 +502,8 @@ class CameraVideoCapturerTestFixtures { // We can't change |capturer| at this point, but we should not crash. capturerInstance.capturer.switchCamera(null /* switchEventsHandler */); - capturerInstance.capturer.onOutputFormatRequest(640, 480, 15); - capturerInstance.capturer.changeCaptureFormat(640, 480, 15); + capturerInstance.capturer.onOutputFormatRequest(DEFAULT_WIDTH, DEFAULT_HEIGHT, DEFAULT_FPS); + capturerInstance.capturer.changeCaptureFormat(DEFAULT_WIDTH, DEFAULT_HEIGHT, DEFAULT_FPS); disposeCapturer(capturerInstance); } @@ -507,15 +516,15 @@ class CameraVideoCapturerTestFixtures { assertTrue(videoTrackWithRenderer.rendererCallbacks.waitForNextFrameToRender() > 0); assertEquals(MediaSource.State.LIVE, videoTrackWithRenderer.source.state()); - videoTrackWithRenderer.source.stop(); + capturerInstance.capturer.stopCapture(); assertEquals(MediaSource.State.ENDED, videoTrackWithRenderer.source.state()); - videoTrackWithRenderer.source.restart(); + startCapture(capturerInstance); assertTrue(videoTrackWithRenderer.rendererCallbacks.waitForNextFrameToRender() > 0); assertEquals(MediaSource.State.LIVE, videoTrackWithRenderer.source.state()); - disposeVideoTrackWithRenderer(videoTrackWithRenderer); disposeCapturer(capturerInstance); + disposeVideoTrackWithRenderer(videoTrackWithRenderer); } public void startStopWithDifferentResolutions() throws InterruptedException { @@ -585,8 +594,8 @@ class CameraVideoCapturerTestFixtures { capturerInstance.capturer.stopCapture(); // Dispose everything. - disposeVideoTrackWithRenderer(videoTrackWithRenderer); disposeCapturer(capturerInstance); + disposeVideoTrackWithRenderer(videoTrackWithRenderer); // Return the frame(s), on a different thread out of spite. final List pendingFrames = @@ -643,8 +652,8 @@ class CameraVideoCapturerTestFixtures { && videoTrackWithRenderer.rendererCallbacks.frameHeight() == scaledHeight); } while (!gotExpectedResolution && numberOfInspectedFrames < 30); - disposeVideoTrackWithRenderer(videoTrackWithRenderer); disposeCapturer(capturerInstance); + disposeVideoTrackWithRenderer(videoTrackWithRenderer); assertTrue(gotExpectedResolution); }