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:
@ -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;
|
||||||
|
|||||||
@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user