From db93cce7d757c560da1003bc7941247c2444301d Mon Sep 17 00:00:00 2001 From: Mattia Iavarone Date: Sat, 21 Dec 2019 19:08:20 +0100 Subject: [PATCH] Wait for first frame in onStartPreview --- .../cameraview/engine/Camera2IntegrationTest.java | 4 ++-- .../cameraview/engine/Camera2Engine.java | 15 ++++++++++++++- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/engine/Camera2IntegrationTest.java b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/engine/Camera2IntegrationTest.java index 19d16c02..ecf3fd8d 100644 --- a/cameraview/src/androidTest/java/com/otaliastudios/cameraview/engine/Camera2IntegrationTest.java +++ b/cameraview/src/androidTest/java/com/otaliastudios/cameraview/engine/Camera2IntegrationTest.java @@ -36,7 +36,7 @@ public class Camera2IntegrationTest extends CameraIntegrationTest return Engine.CAMERA2; } - @Override + /* @Override protected void onOpenSync() { super.onOpenSync(); // Extra wait for the first frame to be dispatched. @@ -54,7 +54,7 @@ public class Camera2IntegrationTest extends CameraIntegrationTest } }.start(controller); try { latch.await(); } catch (InterruptedException ignore) {} - } + } */ @Override protected long getMeteringTimeoutMillis() { diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/engine/Camera2Engine.java b/cameraview/src/main/java/com/otaliastudios/cameraview/engine/Camera2Engine.java index afaf8839..a315d9e3 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/engine/Camera2Engine.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/engine/Camera2Engine.java @@ -628,7 +628,20 @@ public class Camera2Engine extends CameraBaseEngine implements } }); } - return Tasks.forResult(null); + + // Wait for the first frame. + final TaskCompletionSource task = new TaskCompletionSource<>(); + new BaseAction() { + @Override + public void onCaptureCompleted(@NonNull ActionHolder holder, + @NonNull CaptureRequest request, + @NonNull TotalCaptureResult result) { + super.onCaptureCompleted(holder, request, result); + setState(STATE_COMPLETED); + task.trySetResult(null); + } + }.start(this); + return task.getTask(); } //endregion