From 72889923be4ef584ad6f997fee6a9301ebc3e7b7 Mon Sep 17 00:00:00 2001 From: Mattia Iavarone Date: Fri, 27 Oct 2017 17:45:59 +0200 Subject: [PATCH] Dispatch actual preview frames --- .../cameraview/IntegrationTest.java | 20 +++++++++++++++++++ .../com/otaliastudios/cameraview/Camera1.java | 13 +++++++++++- 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/IntegrationTest.java b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/IntegrationTest.java index 7f798576..7a855e4d 100644 --- a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/IntegrationTest.java +++ b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/IntegrationTest.java @@ -504,4 +504,24 @@ public class IntegrationTest extends BaseTest { assertTrue(b.getHeight() == size.getHeight() || b.getHeight() == size.getWidth()); } + //endregion + + //region Frame Processing + + @Test + public void testFrameProcessing() throws Exception { + FrameProcessor processor = mock(FrameProcessor.class); + camera.addFrameProcessor(processor); + + camera.start(); + waitForOpen(true); + + // Expect 30 frames + CountDownLatch latch = new CountDownLatch(30); + doCountDown(latch).when(processor).process(any(Frame.class)); + boolean did = latch.await(4, TimeUnit.SECONDS); + assertTrue(did); + } + + //endregion } diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/Camera1.java b/cameraview/src/main/java/com/otaliastudios/cameraview/Camera1.java index 0537cf9f..adfca95e 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/Camera1.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/Camera1.java @@ -21,7 +21,7 @@ import java.util.List; @SuppressWarnings("deprecation") -class Camera1 extends CameraController { +class Camera1 extends CameraController implements Camera.PreviewCallback { private static final String TAG = Camera1.class.getSimpleName(); private static final CameraLogger LOG = CameraLogger.create(TAG); @@ -147,6 +147,9 @@ class Camera1 extends CameraController { params.setPictureSize(mCaptureSize.getWidth(), mCaptureSize.getHeight()); // <- allowed mCamera.setParameters(params); } + + mCamera.setPreviewCallback(this); // Frame processing + LOG.i("setup:", "Starting preview with startPreview()."); mCamera.startPreview(); LOG.i("setup:", "Started preview with startPreview()."); @@ -496,11 +499,19 @@ class Camera1 extends CameraController { mIsCapturingImage = false; } }); + mCamera.setPreviewCallback(Camera1.this); } }); return true; } + @Override + public void onPreviewFrame(byte[] data, Camera camera) { + mCameraCallbacks.dispatchFrame(data, + System.currentTimeMillis(), + computeExifRotation()); + } + @Override boolean shouldFlipSizes() { int offset = computeSensorToDisplayOffset();