Convert Android camera tests to use the new createVideoSource API.

Review-Url: https://codereview.webrtc.org/2171023003
Cr-Commit-Position: refs/heads/master@{#13528}
This commit is contained in:
sakal
2016-07-26 05:41:36 -07:00
committed by Commit bot
parent 86cc6ffc7c
commit 2fa14623cc
2 changed files with 26 additions and 12 deletions

View File

@ -267,6 +267,7 @@ public class Camera2Capturer implements
Logging.d(TAG, "Close and release."); Logging.d(TAG, "Close and release.");
setCameraState(CameraState.STOPPING); setCameraState(CameraState.STOPPING);
capturerObserver.onCapturerStopped();
// Remove all pending Runnables posted from |this|. // Remove all pending Runnables posted from |this|.
cameraThreadHandler.removeCallbacksAndMessages(this /* token */); cameraThreadHandler.removeCallbacksAndMessages(this /* token */);
@ -575,7 +576,6 @@ public class Camera2Capturer implements
if (eventsHandler != null) { if (eventsHandler != null) {
eventsHandler.onCameraClosed(); eventsHandler.onCameraClosed();
} }
capturerObserver.onCapturerStopped();
} }
} }
@ -862,6 +862,11 @@ public class Camera2Capturer implements
int oesTextureId, float[] transformMatrix, long timestampNs) { int oesTextureId, float[] transformMatrix, long timestampNs) {
checkIsOnCameraThread(); checkIsOnCameraThread();
if (cameraState != CameraState.RUNNING) {
Logging.d(TAG, "Texture frame received while camera was not running.");
return;
}
if (eventsHandler != null && !firstFrameReported) { if (eventsHandler != null && !firstFrameReported) {
eventsHandler.onFirstFrameAvailable(); eventsHandler.onFirstFrameAvailable();
firstFrameReported = true; firstFrameReported = true;

View File

@ -22,6 +22,10 @@ import java.util.concurrent.CountDownLatch;
class CameraVideoCapturerTestFixtures { class CameraVideoCapturerTestFixtures {
static final String TAG = "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 { static private class RendererCallbacks implements VideoRenderer.Callbacks {
private int framesRendered = 0; private int framesRendered = 0;
@ -344,6 +348,11 @@ class CameraVideoCapturerTestFixtures {
} }
private void disposeCapturer(CapturerInstance instance) { 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.capturer.dispose();
instance.surfaceTextureHelper.returnTextureFrame(); instance.surfaceTextureHelper.returnTextureFrame();
instance.surfaceTextureHelper.dispose(); instance.surfaceTextureHelper.dispose();
@ -352,8 +361,8 @@ class CameraVideoCapturerTestFixtures {
private VideoTrackWithRenderer createVideoTrackWithRenderer(CameraVideoCapturer capturer, private VideoTrackWithRenderer createVideoTrackWithRenderer(CameraVideoCapturer capturer,
VideoRenderer.Callbacks rendererCallbacks) { VideoRenderer.Callbacks rendererCallbacks) {
VideoTrackWithRenderer videoTrackWithRenderer = new VideoTrackWithRenderer(); VideoTrackWithRenderer videoTrackWithRenderer = new VideoTrackWithRenderer();
videoTrackWithRenderer.source = videoTrackWithRenderer.source = peerConnectionFactory.createVideoSource(capturer);
peerConnectionFactory.createVideoSource(capturer, new MediaConstraints()); capturer.startCapture(DEFAULT_WIDTH, DEFAULT_HEIGHT, DEFAULT_FPS);
videoTrackWithRenderer.track = videoTrackWithRenderer.track =
peerConnectionFactory.createVideoTrack("dummy", videoTrackWithRenderer.source); peerConnectionFactory.createVideoTrack("dummy", videoTrackWithRenderer.source);
videoTrackWithRenderer.track.addRenderer(new VideoRenderer(rendererCallbacks)); videoTrackWithRenderer.track.addRenderer(new VideoRenderer(rendererCallbacks));
@ -402,8 +411,8 @@ class CameraVideoCapturerTestFixtures {
final VideoTrackWithRenderer videoTrackWithRenderer = final VideoTrackWithRenderer videoTrackWithRenderer =
createVideoTrackWithRenderer(capturerInstance.capturer); createVideoTrackWithRenderer(capturerInstance.capturer);
assertTrue(videoTrackWithRenderer.rendererCallbacks.waitForNextFrameToRender() > 0); assertTrue(videoTrackWithRenderer.rendererCallbacks.waitForNextFrameToRender() > 0);
disposeVideoTrackWithRenderer(videoTrackWithRenderer);
disposeCapturer(capturerInstance); disposeCapturer(capturerInstance);
disposeVideoTrackWithRenderer(videoTrackWithRenderer);
} }
// Test methods // Test methods
@ -466,8 +475,8 @@ class CameraVideoCapturerTestFixtures {
assertTrue(cameraSwitchSuccessful[0]); assertTrue(cameraSwitchSuccessful[0]);
// Ensure that frames are received. // Ensure that frames are received.
assertTrue(videoTrackWithRenderer.rendererCallbacks.waitForNextFrameToRender() > 0); assertTrue(videoTrackWithRenderer.rendererCallbacks.waitForNextFrameToRender() > 0);
disposeVideoTrackWithRenderer(videoTrackWithRenderer);
disposeCapturer(capturerInstance); disposeCapturer(capturerInstance);
disposeVideoTrackWithRenderer(videoTrackWithRenderer);
} }
public void cameraEventsInvoked() throws InterruptedException { public void cameraEventsInvoked() throws InterruptedException {
@ -493,8 +502,8 @@ class CameraVideoCapturerTestFixtures {
// We can't change |capturer| at this point, but we should not crash. // We can't change |capturer| at this point, but we should not crash.
capturerInstance.capturer.switchCamera(null /* switchEventsHandler */); capturerInstance.capturer.switchCamera(null /* switchEventsHandler */);
capturerInstance.capturer.onOutputFormatRequest(640, 480, 15); capturerInstance.capturer.onOutputFormatRequest(DEFAULT_WIDTH, DEFAULT_HEIGHT, DEFAULT_FPS);
capturerInstance.capturer.changeCaptureFormat(640, 480, 15); capturerInstance.capturer.changeCaptureFormat(DEFAULT_WIDTH, DEFAULT_HEIGHT, DEFAULT_FPS);
disposeCapturer(capturerInstance); disposeCapturer(capturerInstance);
} }
@ -507,15 +516,15 @@ class CameraVideoCapturerTestFixtures {
assertTrue(videoTrackWithRenderer.rendererCallbacks.waitForNextFrameToRender() > 0); assertTrue(videoTrackWithRenderer.rendererCallbacks.waitForNextFrameToRender() > 0);
assertEquals(MediaSource.State.LIVE, videoTrackWithRenderer.source.state()); assertEquals(MediaSource.State.LIVE, videoTrackWithRenderer.source.state());
videoTrackWithRenderer.source.stop(); capturerInstance.capturer.stopCapture();
assertEquals(MediaSource.State.ENDED, videoTrackWithRenderer.source.state()); assertEquals(MediaSource.State.ENDED, videoTrackWithRenderer.source.state());
videoTrackWithRenderer.source.restart(); startCapture(capturerInstance);
assertTrue(videoTrackWithRenderer.rendererCallbacks.waitForNextFrameToRender() > 0); assertTrue(videoTrackWithRenderer.rendererCallbacks.waitForNextFrameToRender() > 0);
assertEquals(MediaSource.State.LIVE, videoTrackWithRenderer.source.state()); assertEquals(MediaSource.State.LIVE, videoTrackWithRenderer.source.state());
disposeVideoTrackWithRenderer(videoTrackWithRenderer);
disposeCapturer(capturerInstance); disposeCapturer(capturerInstance);
disposeVideoTrackWithRenderer(videoTrackWithRenderer);
} }
public void startStopWithDifferentResolutions() throws InterruptedException { public void startStopWithDifferentResolutions() throws InterruptedException {
@ -585,8 +594,8 @@ class CameraVideoCapturerTestFixtures {
capturerInstance.capturer.stopCapture(); capturerInstance.capturer.stopCapture();
// Dispose everything. // Dispose everything.
disposeVideoTrackWithRenderer(videoTrackWithRenderer);
disposeCapturer(capturerInstance); disposeCapturer(capturerInstance);
disposeVideoTrackWithRenderer(videoTrackWithRenderer);
// Return the frame(s), on a different thread out of spite. // Return the frame(s), on a different thread out of spite.
final List<I420Frame> pendingFrames = final List<I420Frame> pendingFrames =
@ -643,8 +652,8 @@ class CameraVideoCapturerTestFixtures {
&& videoTrackWithRenderer.rendererCallbacks.frameHeight() == scaledHeight); && videoTrackWithRenderer.rendererCallbacks.frameHeight() == scaledHeight);
} while (!gotExpectedResolution && numberOfInspectedFrames < 30); } while (!gotExpectedResolution && numberOfInspectedFrames < 30);
disposeVideoTrackWithRenderer(videoTrackWithRenderer);
disposeCapturer(capturerInstance); disposeCapturer(capturerInstance);
disposeVideoTrackWithRenderer(videoTrackWithRenderer);
assertTrue(gotExpectedResolution); assertTrue(gotExpectedResolution);
} }