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.");
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;

View File

@ -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<I420Frame> pendingFrames =
@ -643,8 +652,8 @@ class CameraVideoCapturerTestFixtures {
&& videoTrackWithRenderer.rendererCallbacks.frameHeight() == scaledHeight);
} while (!gotExpectedResolution && numberOfInspectedFrames < 30);
disposeVideoTrackWithRenderer(videoTrackWithRenderer);
disposeCapturer(capturerInstance);
disposeVideoTrackWithRenderer(videoTrackWithRenderer);
assertTrue(gotExpectedResolution);
}