aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2023-05-12 03:38:47 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2023-05-12 03:38:47 +0000
commitc83d3c99aad1fdaefc82e42433c1bd77d5517d16 (patch)
treebab7d2ad6e21bb125f8ecf07f8cd8af060c59dd9
parent7e70cf0d8ddb327fab144bc74acf4ca669720165 (diff)
parent4f0980572e69ff1dc5ba110a9b5d76aaacfe6dac (diff)
downloadsupport-snap-temp-L28600000960611542.tar.gz
Merge "Refactor Camera2CameraImplTest" into snap-temp-L28600000960611542snap-temp-L28600000960611542
-rw-r--r--camera/camera-camera2/src/androidTest/java/androidx/camera/camera2/internal/Camera2CameraImplTest.java280
1 files changed, 138 insertions, 142 deletions
diff --git a/camera/camera-camera2/src/androidTest/java/androidx/camera/camera2/internal/Camera2CameraImplTest.java b/camera/camera-camera2/src/androidTest/java/androidx/camera/camera2/internal/Camera2CameraImplTest.java
index 00153debf4e..7bae0e56055 100644
--- a/camera/camera-camera2/src/androidTest/java/androidx/camera/camera2/internal/Camera2CameraImplTest.java
+++ b/camera/camera-camera2/src/androidTest/java/androidx/camera/camera2/internal/Camera2CameraImplTest.java
@@ -16,6 +16,7 @@
package androidx.camera.camera2.internal;
+import static com.google.common.base.Preconditions.checkState;
import static com.google.common.truth.Truth.assertThat;
import static junit.framework.TestCase.assertTrue;
@@ -28,6 +29,9 @@ import static org.mockito.Mockito.timeout;
import static org.mockito.Mockito.verify;
import static org.mockito.internal.verification.VerificationModeFactory.times;
+import static java.util.Arrays.asList;
+import static java.util.Collections.singletonList;
+
import android.content.Context;
import android.graphics.ImageFormat;
import android.hardware.camera2.CameraDevice;
@@ -51,7 +55,6 @@ import androidx.camera.core.Camera;
import androidx.camera.core.CameraControl;
import androidx.camera.core.CameraSelector;
import androidx.camera.core.ImageCapture;
-import androidx.camera.core.InitializationException;
import androidx.camera.core.UseCase;
import androidx.camera.core.impl.CameraCaptureCallback;
import androidx.camera.core.impl.CameraCaptureResult;
@@ -90,10 +93,10 @@ import org.mockito.ArgumentCaptor;
import org.mockito.Mockito;
import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
+import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
+import java.util.Map;
import java.util.Set;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
@@ -114,7 +117,16 @@ public final class Camera2CameraImplTest {
private static final int DEFAULT_LENS_FACING = CameraSelector.LENS_FACING_BACK;
// For the purpose of this test, always say we have 1 camera available.
private static final int DEFAULT_AVAILABLE_CAMERA_COUNT = 1;
- private static final Set<CameraInternal.State> STABLE_STATES = new HashSet<>(Arrays.asList(
+ private static final int DEFAULT_TEMPLATE_TYPE = CameraDevice.TEMPLATE_PREVIEW;
+ private static final Map<Integer, Boolean> DEFAULT_TEMPLATE_TO_ZSL_DISABLED = new HashMap<>();
+
+ static {
+ DEFAULT_TEMPLATE_TO_ZSL_DISABLED.put(CameraDevice.TEMPLATE_PREVIEW, false);
+ DEFAULT_TEMPLATE_TO_ZSL_DISABLED.put(CameraDevice.TEMPLATE_RECORD, true);
+ DEFAULT_TEMPLATE_TO_ZSL_DISABLED.put(CameraDevice.TEMPLATE_ZERO_SHUTTER_LAG, false);
+ }
+
+ private static final Set<CameraInternal.State> STABLE_STATES = new HashSet<>(asList(
CameraInternal.State.CLOSED,
CameraInternal.State.OPEN,
CameraInternal.State.RELEASED));
@@ -126,7 +138,7 @@ public final class Camera2CameraImplTest {
new CameraUtil.PreTestCameraIdList(Camera2Config.defaultConfig())
);
- private ArrayList<FakeUseCase> mFakeUseCases = new ArrayList<>();
+ private final ArrayList<FakeUseCase> mFakeUseCases = new ArrayList<>();
private Camera2CameraImpl mCamera2CameraImpl;
private static HandlerThread sCameraHandlerThread;
private static Handler sCameraHandler;
@@ -138,7 +150,7 @@ public final class Camera2CameraImplTest {
SemaphoreReleasingCamera2Callbacks.SessionStateCallback mSessionStateCallback;
@BeforeClass
- public static void classSetup() throws InitializationException {
+ public static void classSetup() {
sCameraHandlerThread = new HandlerThread("cameraThread");
sCameraHandlerThread.start();
sCameraHandler = HandlerCompat.createAsync(sCameraHandlerThread.getLooper());
@@ -194,11 +206,11 @@ public final class Camera2CameraImplTest {
mCamera2CameraImpl.open();
UseCase useCase = createUseCase();
- mCamera2CameraImpl.attachUseCases(Collections.singletonList(useCase));
+ mCamera2CameraImpl.attachUseCases(singletonList(useCase));
verify(mMockOnImageAvailableListener, never()).onImageAvailable(any(ImageReader.class));
- mCamera2CameraImpl.detachUseCases(Collections.singletonList(useCase));
+ mCamera2CameraImpl.detachUseCases(singletonList(useCase));
mCamera2CameraImpl.release();
}
@@ -215,21 +227,21 @@ public final class Camera2CameraImplTest {
@Test
public void attachAndActiveUseCase() {
UseCase useCase1 = createUseCase();
- mCamera2CameraImpl.attachUseCases(Collections.singletonList(useCase1));
+ mCamera2CameraImpl.attachUseCases(singletonList(useCase1));
mCamera2CameraImpl.onUseCaseActive(useCase1);
verify(mMockOnImageAvailableListener, timeout(4000).atLeastOnce())
.onImageAvailable(any(ImageReader.class));
- mCamera2CameraImpl.detachUseCases(Collections.singletonList(useCase1));
+ mCamera2CameraImpl.detachUseCases(singletonList(useCase1));
}
@Test
public void detachUseCase() {
UseCase useCase1 = createUseCase();
- mCamera2CameraImpl.attachUseCases(Collections.singletonList(useCase1));
+ mCamera2CameraImpl.attachUseCases(singletonList(useCase1));
- mCamera2CameraImpl.detachUseCases(Collections.singletonList(useCase1));
+ mCamera2CameraImpl.detachUseCases(singletonList(useCase1));
mCamera2CameraImpl.onUseCaseActive(useCase1);
verify(mMockOnImageAvailableListener, never()).onImageAvailable(any(ImageReader.class));
@@ -241,8 +253,8 @@ public final class Camera2CameraImplTest {
@Test
public void unopenedCamera() {
UseCase useCase1 = createUseCase();
- mCamera2CameraImpl.attachUseCases(Collections.singletonList(useCase1));
- mCamera2CameraImpl.detachUseCases(Collections.singletonList(useCase1));
+ mCamera2CameraImpl.attachUseCases(singletonList(useCase1));
+ mCamera2CameraImpl.detachUseCases(singletonList(useCase1));
verify(mMockOnImageAvailableListener, never()).onImageAvailable(any(ImageReader.class));
}
@@ -250,8 +262,8 @@ public final class Camera2CameraImplTest {
@Test
public void closedCamera() {
UseCase useCase1 = createUseCase();
- mCamera2CameraImpl.attachUseCases(Collections.singletonList(useCase1));
- mCamera2CameraImpl.detachUseCases(Collections.singletonList(useCase1));
+ mCamera2CameraImpl.attachUseCases(singletonList(useCase1));
+ mCamera2CameraImpl.detachUseCases(singletonList(useCase1));
verify(mMockOnImageAvailableListener, never()).onImageAvailable(any(ImageReader.class));
}
@@ -263,12 +275,12 @@ public final class Camera2CameraImplTest {
mCamera2CameraImpl.release();
mCamera2CameraImpl.open();
- mCamera2CameraImpl.attachUseCases(Collections.singletonList(useCase1));
+ mCamera2CameraImpl.attachUseCases(singletonList(useCase1));
mCamera2CameraImpl.onUseCaseActive(useCase1);
verify(mMockOnImageAvailableListener, never()).onImageAvailable(any(ImageReader.class));
- mCamera2CameraImpl.detachUseCases(Collections.singletonList(useCase1));
+ mCamera2CameraImpl.detachUseCases(singletonList(useCase1));
}
@Test
@@ -277,54 +289,54 @@ public final class Camera2CameraImplTest {
mCamera2CameraImpl.open();
mCamera2CameraImpl.release();
- mCamera2CameraImpl.attachUseCases(Collections.singletonList(useCase1));
+ mCamera2CameraImpl.attachUseCases(singletonList(useCase1));
mCamera2CameraImpl.onUseCaseActive(useCase1);
verify(mMockOnImageAvailableListener, never()).onImageAvailable(any(ImageReader.class));
- mCamera2CameraImpl.detachUseCases(Collections.singletonList(useCase1));
+ mCamera2CameraImpl.detachUseCases(singletonList(useCase1));
}
@Test
public void attach_oneUseCase_isAttached() {
UseCase useCase1 = createUseCase();
- mCamera2CameraImpl.attachUseCases(Collections.singletonList(useCase1));
+ mCamera2CameraImpl.attachUseCases(singletonList(useCase1));
assertThat(mCamera2CameraImpl.isUseCaseAttached(useCase1)).isTrue();
- mCamera2CameraImpl.detachUseCases(Collections.singletonList(useCase1));
+ mCamera2CameraImpl.detachUseCases(singletonList(useCase1));
}
@Test
public void attach_sameUseCases_staysAttached() {
UseCase useCase1 = createUseCase();
- mCamera2CameraImpl.attachUseCases(Collections.singletonList(useCase1));
+ mCamera2CameraImpl.attachUseCases(singletonList(useCase1));
boolean attachedAfterFirstAdd = mCamera2CameraImpl.isUseCaseAttached(useCase1);
- mCamera2CameraImpl.attachUseCases(Collections.singletonList(useCase1));
+ mCamera2CameraImpl.attachUseCases(singletonList(useCase1));
assertThat(attachedAfterFirstAdd).isTrue();
assertThat(mCamera2CameraImpl.isUseCaseAttached(useCase1)).isTrue();
- mCamera2CameraImpl.detachUseCases(Collections.singletonList(useCase1));
+ mCamera2CameraImpl.detachUseCases(singletonList(useCase1));
}
@Test
public void attach_twoUseCases_bothBecomeAttached() {
UseCase useCase1 = createUseCase();
UseCase useCase2 = createUseCase();
- mCamera2CameraImpl.attachUseCases(Arrays.asList(useCase1, useCase2));
+ mCamera2CameraImpl.attachUseCases(asList(useCase1, useCase2));
assertThat(mCamera2CameraImpl.isUseCaseAttached(useCase1)).isTrue();
assertThat(mCamera2CameraImpl.isUseCaseAttached(useCase2)).isTrue();
- mCamera2CameraImpl.detachUseCases(Arrays.asList(useCase1, useCase2));
+ mCamera2CameraImpl.detachUseCases(asList(useCase1, useCase2));
}
@Test
public void detach_detachedUseCase_staysDetached() {
UseCase useCase1 = createUseCase();
- mCamera2CameraImpl.detachUseCases(Collections.singletonList(useCase1));
+ mCamera2CameraImpl.detachUseCases(singletonList(useCase1));
assertThat(mCamera2CameraImpl.isUseCaseAttached(useCase1)).isFalse();
}
@@ -333,34 +345,34 @@ public final class Camera2CameraImplTest {
public void detachOneAttachedUseCase_fromAttachedUseCases_onlyDetachedSingleUseCase() {
UseCase useCase1 = createUseCase();
UseCase useCase2 = createUseCase();
- mCamera2CameraImpl.attachUseCases(Arrays.asList(useCase1, useCase2));
+ mCamera2CameraImpl.attachUseCases(asList(useCase1, useCase2));
boolean useCase1isAttachedAfterFirstAdd = mCamera2CameraImpl.isUseCaseAttached(useCase1);
boolean useCase2isAttachedAfterFirstAdd = mCamera2CameraImpl.isUseCaseAttached(useCase2);
- mCamera2CameraImpl.detachUseCases(Collections.singletonList(useCase1));
+ mCamera2CameraImpl.detachUseCases(singletonList(useCase1));
assertThat(useCase1isAttachedAfterFirstAdd).isTrue();
assertThat(useCase2isAttachedAfterFirstAdd).isTrue();
assertThat(mCamera2CameraImpl.isUseCaseAttached(useCase1)).isFalse();
assertThat(mCamera2CameraImpl.isUseCaseAttached(useCase2)).isTrue();
- mCamera2CameraImpl.detachUseCases(Collections.singletonList(useCase2));
+ mCamera2CameraImpl.detachUseCases(singletonList(useCase2));
}
@Test
public void detachSameAttachedUseCaseTwice_onlyDetachesSameUseCase() {
UseCase useCase1 = createUseCase();
UseCase useCase2 = createUseCase();
- mCamera2CameraImpl.attachUseCases(Arrays.asList(useCase1, useCase2));
+ mCamera2CameraImpl.attachUseCases(asList(useCase1, useCase2));
- mCamera2CameraImpl.detachUseCases(Collections.singletonList(useCase1));
- mCamera2CameraImpl.detachUseCases(Collections.singletonList(useCase1));
+ mCamera2CameraImpl.detachUseCases(singletonList(useCase1));
+ mCamera2CameraImpl.detachUseCases(singletonList(useCase1));
assertThat(mCamera2CameraImpl.isUseCaseAttached(useCase1)).isFalse();
assertThat(mCamera2CameraImpl.isUseCaseAttached(useCase2)).isTrue();
- mCamera2CameraImpl.detachUseCases(Collections.singletonList(useCase2));
+ mCamera2CameraImpl.detachUseCases(singletonList(useCase2));
}
@Test
@@ -369,7 +381,7 @@ public final class Camera2CameraImplTest {
blockHandler();
UseCase useCase1 = createUseCase();
- mCamera2CameraImpl.attachUseCases(Arrays.asList(useCase1));
+ mCamera2CameraImpl.attachUseCases(singletonList(useCase1));
DeferrableSurface surface1 = useCase1.getSessionConfig().getSurfaces().get(0);
unblockHandler();
@@ -385,13 +397,13 @@ public final class Camera2CameraImplTest {
assertThat(surface1).isNotEqualTo(surface2);
- // Old surface is decremented when CameraCaptueSession is closed by new
+ // Old surface is decremented when CameraCaptureSession is closed by new
// CameraCaptureSession.
assertThat(surface1.getUseCount()).isEqualTo(0);
- // New surface is decremented when CameraCaptueSession is closed by
+ // New surface is decremented when CameraCaptureSession is closed by
// mCamera2CameraImpl.release()
assertThat(surface2.getUseCount()).isEqualTo(0);
- mCamera2CameraImpl.detachUseCases(Arrays.asList(useCase1));
+ mCamera2CameraImpl.detachUseCases(singletonList(useCase1));
}
@Test
@@ -402,7 +414,7 @@ public final class Camera2CameraImplTest {
blockHandler();
UseCase useCase1 = createUseCase();
- mCamera2CameraImpl.attachUseCases(Arrays.asList(useCase1));
+ mCamera2CameraImpl.attachUseCases(singletonList(useCase1));
CameraCaptureCallback captureCallback = mock(CameraCaptureCallback.class);
CaptureConfig.Builder captureConfigBuilder = new CaptureConfig.Builder();
@@ -411,12 +423,12 @@ public final class Camera2CameraImplTest {
captureConfigBuilder.addCameraCaptureCallback(captureCallback);
mCamera2CameraImpl.getCameraControlInternal().submitStillCaptureRequests(
- Arrays.asList(captureConfigBuilder.build()),
+ singletonList(captureConfigBuilder.build()),
ImageCapture.CAPTURE_MODE_MINIMIZE_LATENCY,
ImageCapture.FLASH_TYPE_ONE_SHOT_FLASH);
UseCase useCase2 = createUseCase();
- mCamera2CameraImpl.attachUseCases(Arrays.asList(useCase2));
+ mCamera2CameraImpl.attachUseCases(singletonList(useCase2));
// Unblock camera handler to make camera operation run quickly .
// To make the single request not able to run in 1st capture session. and verify if it can
@@ -428,7 +440,7 @@ public final class Camera2CameraImplTest {
verify(captureCallback, timeout(3000).times(1))
.onCaptureCompleted(any(CameraCaptureResult.class));
- mCamera2CameraImpl.detachUseCases(Arrays.asList(useCase1, useCase2));
+ mCamera2CameraImpl.detachUseCases(asList(useCase1, useCase2));
}
@Test
@@ -441,19 +453,19 @@ public final class Camera2CameraImplTest {
UseCase useCase1 = createUseCase();
UseCase useCase2 = createUseCase();
- mCamera2CameraImpl.attachUseCases(Arrays.asList(useCase1, useCase2));
+ mCamera2CameraImpl.attachUseCases(asList(useCase1, useCase2));
CameraCaptureCallback captureCallback = mock(CameraCaptureCallback.class);
CaptureConfig.Builder captureConfigBuilder = new CaptureConfig.Builder();
- captureConfigBuilder.setTemplateType(CameraDevice.TEMPLATE_PREVIEW);
+ captureConfigBuilder.setTemplateType(DEFAULT_TEMPLATE_TYPE);
captureConfigBuilder.addSurface(useCase1.getSessionConfig().getSurfaces().get(0));
captureConfigBuilder.addCameraCaptureCallback(captureCallback);
mCamera2CameraImpl.getCameraControlInternal().submitStillCaptureRequests(
- Arrays.asList(captureConfigBuilder.build()),
+ singletonList(captureConfigBuilder.build()),
ImageCapture.CAPTURE_MODE_MINIMIZE_LATENCY,
ImageCapture.FLASH_TYPE_ONE_SHOT_FLASH);
- mCamera2CameraImpl.detachUseCases(Arrays.asList(useCase1));
+ mCamera2CameraImpl.detachUseCases(singletonList(useCase1));
// Unblock camera handle to make camera operation run quickly .
// To make the single request not able to run in 1st capture session. and verify if it can
@@ -468,7 +480,7 @@ public final class Camera2CameraImplTest {
verify(captureCallback, times(0))
.onCaptureCompleted(any(CameraCaptureResult.class));
- mCamera2CameraImpl.detachUseCases(Arrays.asList(useCase2));
+ mCamera2CameraImpl.detachUseCases(singletonList(useCase2));
}
@Test
@@ -539,7 +551,11 @@ public final class Camera2CameraImplTest {
// Ensure real camera can't open due to max cameras being open
Camera mockCamera = mock(Camera.class);
- mCameraStateRegistry.registerCamera(mockCamera, CameraXExecutors.directExecutor(),
+ mCameraStateRegistry.registerCamera(
+ mockCamera,
+ CameraXExecutors.directExecutor(),
+ () -> {
+ },
() -> {
});
mCameraStateRegistry.tryOpenCamera(mockCamera);
@@ -580,18 +596,18 @@ public final class Camera2CameraImplTest {
throws InterruptedException {
mCamera2CameraImpl.open();
UseCase useCase1 = createUseCase();
- mCamera2CameraImpl.attachUseCases(Arrays.asList(useCase1));
+ mCamera2CameraImpl.attachUseCases(singletonList(useCase1));
mCamera2CameraImpl.onUseCaseActive(useCase1);
// Wait a little bit for the camera to open.
assertTrue(mSessionStateCallback.waitForOnConfigured(1));
// Remove the useCase1 and trigger the CaptureSession#close().
- mCamera2CameraImpl.detachUseCases(Arrays.asList(useCase1));
+ mCamera2CameraImpl.detachUseCases(singletonList(useCase1));
// Create the secondary use case immediately and open it before the first use case closed.
UseCase useCase2 = createUseCase();
- mCamera2CameraImpl.attachUseCases(Arrays.asList(useCase2));
+ mCamera2CameraImpl.attachUseCases(singletonList(useCase2));
mCamera2CameraImpl.onUseCaseActive(useCase2);
// Wait for the secondary capture session is configured.
assertTrue(mSessionStateCallback.waitForOnConfigured(1));
@@ -599,7 +615,7 @@ public final class Camera2CameraImplTest {
Observable.Observer<CameraInternal.State> mockObserver = mock(Observable.Observer.class);
mCamera2CameraImpl.getCameraState().addObserver(CameraXExecutors.directExecutor(),
mockObserver);
- mCamera2CameraImpl.detachUseCases(Arrays.asList(useCase2));
+ mCamera2CameraImpl.detachUseCases(singletonList(useCase2));
mCamera2CameraImpl.close();
// Wait for the CLOSED state. If the test fail, the CameraX might in wrong internal state,
@@ -614,27 +630,24 @@ public final class Camera2CameraImplTest {
// Create another use case to keep the camera open.
UseCase useCaseDummy = createUseCase();
UseCase useCase = createUseCase();
- mCamera2CameraImpl.attachUseCases(Arrays.asList(useCase, useCaseDummy));
+ mCamera2CameraImpl.attachUseCases(asList(useCase, useCaseDummy));
mCamera2CameraImpl.onUseCaseActive(useCase);
// Wait a little bit for the camera to open.
assertTrue(mSessionStateCallback.waitForOnConfigured(2));
// Remove the useCase and trigger the CaptureSession#close().
- mCamera2CameraImpl.detachUseCases(Arrays.asList(useCase));
+ mCamera2CameraImpl.detachUseCases(singletonList(useCase));
assertTrue(mSessionStateCallback.waitForOnClosed(2));
}
// Blocks the camera thread handler.
private void blockHandler() {
- sCameraHandler.post(new Runnable() {
- @Override
- public void run() {
- try {
- mSemaphore.acquire();
- } catch (InterruptedException e) {
-
- }
+ sCameraHandler.post(() -> {
+ try {
+ mSemaphore.acquire();
+ } catch (InterruptedException e) {
+ // Do nothing.
}
});
}
@@ -644,21 +657,27 @@ public final class Camera2CameraImplTest {
mSemaphore.release();
}
+ @NonNull
private UseCase createUseCase() {
- return createUseCase(CameraDevice.TEMPLATE_PREVIEW, /* isZslDisabled = */false);
+ return createUseCase(DEFAULT_TEMPLATE_TYPE);
}
- private UseCase createUseCase(int template, boolean isZslDisabled) {
+ @NonNull
+ private UseCase createUseCase(int template) {
+ boolean isZslDisabled = getDefaultZslDisabled(template);
FakeUseCaseConfig.Builder configBuilder =
new FakeUseCaseConfig.Builder().setSessionOptionUnpacker(
new Camera2SessionOptionUnpacker()).setTargetName("UseCase")
.setZslDisabled(isZslDisabled);
new Camera2Interop.Extender<>(configBuilder).setSessionStateCallback(mSessionStateCallback);
- CameraSelector selector =
- new CameraSelector.Builder().requireLensFacing(
- CameraSelector.LENS_FACING_BACK).build();
- TestUseCase testUseCase = new TestUseCase(template, configBuilder.getUseCaseConfig(),
- selector, mMockOnImageAvailableListener, mMockRepeatingCaptureCallback);
+ return createUseCase(configBuilder.getUseCaseConfig(), template);
+ }
+
+ @NonNull
+ private UseCase createUseCase(@NonNull FakeUseCaseConfig config, int template) {
+ TestUseCase testUseCase = new TestUseCase(template, config, DEFAULT_BACK_CAMERA,
+ mMockOnImageAvailableListener, mMockRepeatingCaptureCallback);
+
testUseCase.updateSuggestedResolution(new Size(640, 480));
mFakeUseCases.add(testUseCase);
return testUseCase;
@@ -669,8 +688,8 @@ public final class Camera2CameraImplTest {
TestUseCase useCase1 = spy((TestUseCase) createUseCase());
TestUseCase useCase2 = spy((TestUseCase) createUseCase());
- mCamera2CameraImpl.attachUseCases(Collections.singletonList(useCase1));
- mCamera2CameraImpl.attachUseCases(Arrays.asList(useCase1, useCase2));
+ mCamera2CameraImpl.attachUseCases(singletonList(useCase1));
+ mCamera2CameraImpl.attachUseCases(asList(useCase1, useCase2));
HandlerUtil.waitForLooperToIdle(sCameraHandler);
@@ -680,7 +699,7 @@ public final class Camera2CameraImplTest {
verify(useCase1, times(1)).onStateAttached();
verify(useCase2, times(1)).onStateAttached();
- mCamera2CameraImpl.detachUseCases(Arrays.asList(useCase1, useCase2));
+ mCamera2CameraImpl.detachUseCases(asList(useCase1, useCase2));
}
@Test
@@ -689,9 +708,9 @@ public final class Camera2CameraImplTest {
TestUseCase useCase2 = spy((TestUseCase) createUseCase());
TestUseCase useCase3 = spy((TestUseCase) createUseCase());
- mCamera2CameraImpl.attachUseCases(Arrays.asList(useCase1, useCase2));
+ mCamera2CameraImpl.attachUseCases(asList(useCase1, useCase2));
- mCamera2CameraImpl.detachUseCases(Arrays.asList(useCase1, useCase2, useCase3));
+ mCamera2CameraImpl.detachUseCases(asList(useCase1, useCase2, useCase3));
HandlerUtil.waitForLooperToIdle(sCameraHandler);
@@ -706,13 +725,14 @@ public final class Camera2CameraImplTest {
private boolean isCameraControlActive(Camera2CameraControlImpl camera2CameraControlImpl) {
ListenableFuture<Void> listenableFuture = camera2CameraControlImpl.setZoomRatio(2.0f);
try {
- // setZoom() will fail immediately when Cameracontrol is not active.
+ // setZoom() will fail immediately when CameraControl is not active.
listenableFuture.get(50, TimeUnit.MILLISECONDS);
} catch (ExecutionException e) {
if (e.getCause() instanceof CameraControl.OperationCanceledException) {
return false;
}
} catch (InterruptedException | TimeoutException e) {
+ // Do nothing.
}
return true;
}
@@ -726,12 +746,12 @@ public final class Camera2CameraImplTest {
UseCase useCase1 = createUseCase();
- mCamera2CameraImpl.attachUseCases(Collections.singletonList(useCase1));
+ mCamera2CameraImpl.attachUseCases(singletonList(useCase1));
HandlerUtil.waitForLooperToIdle(sCameraHandler);
assertThat(isCameraControlActive(camera2CameraControlImpl)).isTrue();
- mCamera2CameraImpl.detachUseCases(Collections.singletonList(useCase1));
+ mCamera2CameraImpl.detachUseCases(singletonList(useCase1));
}
@Test
@@ -740,11 +760,11 @@ public final class Camera2CameraImplTest {
(Camera2CameraControlImpl) mCamera2CameraImpl.getCameraControlInternal();
UseCase useCase1 = createUseCase();
- mCamera2CameraImpl.attachUseCases(Arrays.asList(useCase1));
+ mCamera2CameraImpl.attachUseCases(singletonList(useCase1));
HandlerUtil.waitForLooperToIdle(sCameraHandler);
assertThat(isCameraControlActive(camera2CameraControlImpl)).isTrue();
- mCamera2CameraImpl.detachUseCases(Arrays.asList(useCase1));
+ mCamera2CameraImpl.detachUseCases(singletonList(useCase1));
HandlerUtil.waitForLooperToIdle(sCameraHandler);
assertThat(isCameraControlActive(camera2CameraControlImpl)).isFalse();
@@ -752,9 +772,9 @@ public final class Camera2CameraImplTest {
@Test
public void attachUseCaseWithTemplatePreview() throws InterruptedException {
- UseCase preview = createUseCase(CameraDevice.TEMPLATE_PREVIEW, /* isZslDisabled = */false);
+ UseCase preview = createUseCase(CameraDevice.TEMPLATE_PREVIEW);
- mCamera2CameraImpl.attachUseCases(Arrays.asList(preview));
+ mCamera2CameraImpl.attachUseCases(singletonList(preview));
mCamera2CameraImpl.onUseCaseActive(preview);
HandlerUtil.waitForLooperToIdle(sCameraHandler);
@@ -769,15 +789,15 @@ public final class Camera2CameraImplTest {
assertThat(captureResult.get(CaptureResult.CONTROL_CAPTURE_INTENT))
.isEqualTo(CaptureRequest.CONTROL_CAPTURE_INTENT_PREVIEW);
- mCamera2CameraImpl.detachUseCases(Arrays.asList(preview));
+ mCamera2CameraImpl.detachUseCases(singletonList(preview));
}
@Test
public void attachUseCaseWithTemplateRecord() throws InterruptedException {
- UseCase preview = createUseCase(CameraDevice.TEMPLATE_PREVIEW, /* isZslDisabled = */false);
- UseCase record = createUseCase(CameraDevice.TEMPLATE_RECORD, /* isZslDisabled = */true);
+ UseCase preview = createUseCase(CameraDevice.TEMPLATE_PREVIEW);
+ UseCase record = createUseCase(CameraDevice.TEMPLATE_RECORD);
- mCamera2CameraImpl.attachUseCases(Arrays.asList(preview, record));
+ mCamera2CameraImpl.attachUseCases(asList(preview, record));
mCamera2CameraImpl.onUseCaseActive(preview);
mCamera2CameraImpl.onUseCaseActive(record);
HandlerUtil.waitForLooperToIdle(sCameraHandler);
@@ -793,7 +813,7 @@ public final class Camera2CameraImplTest {
assertThat(captureResult.get(CaptureResult.CONTROL_CAPTURE_INTENT))
.isEqualTo(CaptureRequest.CONTROL_CAPTURE_INTENT_VIDEO_RECORD);
- mCamera2CameraImpl.detachUseCases(Arrays.asList(preview, record));
+ mCamera2CameraImpl.detachUseCases(asList(preview, record));
}
@SdkSuppress(minSdkVersion = 23)
@@ -802,14 +822,10 @@ public final class Camera2CameraImplTest {
if (!mCamera2CameraImpl.getCameraInfo().isZslSupported()) {
return;
}
- UseCase preview = createUseCase(
- CameraDevice.TEMPLATE_PREVIEW,
- /* isZslDisabled = */false);
- UseCase zsl = createUseCase(
- CameraDevice.TEMPLATE_ZERO_SHUTTER_LAG,
- /* isZslDisabled = */false);
-
- mCamera2CameraImpl.attachUseCases(Arrays.asList(preview, zsl));
+ UseCase preview = createUseCase(CameraDevice.TEMPLATE_PREVIEW);
+ UseCase zsl = createUseCase(CameraDevice.TEMPLATE_ZERO_SHUTTER_LAG);
+
+ mCamera2CameraImpl.attachUseCases(asList(preview, zsl));
mCamera2CameraImpl.onUseCaseActive(preview);
mCamera2CameraImpl.onUseCaseActive(zsl);
HandlerUtil.waitForLooperToIdle(sCameraHandler);
@@ -828,7 +844,7 @@ public final class Camera2CameraImplTest {
mCamera2CameraImpl.getCameraControlInternal().isZslDisabledByByUserCaseConfig())
.isFalse();
- mCamera2CameraImpl.detachUseCases(Arrays.asList(preview, zsl));
+ mCamera2CameraImpl.detachUseCases(asList(preview, zsl));
HandlerUtil.waitForLooperToIdle(sCameraHandler);
assertThat(mCamera2CameraImpl.getCameraControlInternal()
.isZslDisabledByByUserCaseConfig()).isFalse();
@@ -840,13 +856,11 @@ public final class Camera2CameraImplTest {
if (!mCamera2CameraImpl.getCameraInfo().isZslSupported()) {
return;
}
- UseCase preview = createUseCase(CameraDevice.TEMPLATE_PREVIEW, /* isZslDisabled = */
- false);
- UseCase record = createUseCase(CameraDevice.TEMPLATE_RECORD, /* isZslDisabled = */true);
- UseCase zsl = createUseCase(CameraDevice.TEMPLATE_ZERO_SHUTTER_LAG,
- /* isZslDisabled = */false);
+ UseCase preview = createUseCase(CameraDevice.TEMPLATE_PREVIEW);
+ UseCase record = createUseCase(CameraDevice.TEMPLATE_RECORD);
+ UseCase zsl = createUseCase(CameraDevice.TEMPLATE_ZERO_SHUTTER_LAG);
- mCamera2CameraImpl.attachUseCases(Arrays.asList(preview, record, zsl));
+ mCamera2CameraImpl.attachUseCases(asList(preview, record, zsl));
mCamera2CameraImpl.onUseCaseActive(preview);
mCamera2CameraImpl.onUseCaseActive(record);
mCamera2CameraImpl.onUseCaseActive(zsl);
@@ -866,7 +880,7 @@ public final class Camera2CameraImplTest {
mCamera2CameraImpl.getCameraControlInternal().isZslDisabledByByUserCaseConfig())
.isTrue();
- mCamera2CameraImpl.detachUseCases(Arrays.asList(preview, record, zsl));
+ mCamera2CameraImpl.detachUseCases(asList(preview, record, zsl));
HandlerUtil.waitForLooperToIdle(sCameraHandler);
assertThat(
mCamera2CameraImpl.getCameraControlInternal().isZslDisabledByByUserCaseConfig())
@@ -879,13 +893,11 @@ public final class Camera2CameraImplTest {
if (!mCamera2CameraImpl.getCameraInfo().isZslSupported()) {
return;
}
- UseCase preview = createUseCase(CameraDevice.TEMPLATE_PREVIEW, /* isZslDisabled = */
- false);
- UseCase record = createUseCase(CameraDevice.TEMPLATE_RECORD, /* isZslDisabled = */true);
- UseCase zsl = createUseCase(CameraDevice.TEMPLATE_ZERO_SHUTTER_LAG,
- /* isZslDisabled = */false);
+ UseCase preview = createUseCase(CameraDevice.TEMPLATE_PREVIEW);
+ UseCase record = createUseCase(CameraDevice.TEMPLATE_RECORD);
+ UseCase zsl = createUseCase(CameraDevice.TEMPLATE_ZERO_SHUTTER_LAG);
- mCamera2CameraImpl.attachUseCases(Arrays.asList(preview, zsl));
+ mCamera2CameraImpl.attachUseCases(asList(preview, zsl));
mCamera2CameraImpl.onUseCaseActive(preview);
mCamera2CameraImpl.onUseCaseActive(zsl);
HandlerUtil.waitForLooperToIdle(sCameraHandler);
@@ -894,7 +906,7 @@ public final class Camera2CameraImplTest {
mCamera2CameraImpl.getCameraControlInternal().isZslDisabledByByUserCaseConfig())
.isFalse();
- mCamera2CameraImpl.attachUseCases(Arrays.asList(record));
+ mCamera2CameraImpl.attachUseCases(singletonList(record));
mCamera2CameraImpl.onUseCaseActive(record);
HandlerUtil.waitForLooperToIdle(sCameraHandler);
@@ -902,32 +914,32 @@ public final class Camera2CameraImplTest {
mCamera2CameraImpl.getCameraControlInternal().isZslDisabledByByUserCaseConfig())
.isTrue();
- mCamera2CameraImpl.detachUseCases(Arrays.asList(record));
+ mCamera2CameraImpl.detachUseCases(singletonList(record));
HandlerUtil.waitForLooperToIdle(sCameraHandler);
assertThat(
mCamera2CameraImpl.getCameraControlInternal().isZslDisabledByByUserCaseConfig())
.isFalse();
- mCamera2CameraImpl.attachUseCases(Arrays.asList(record));
+ mCamera2CameraImpl.attachUseCases(singletonList(record));
mCamera2CameraImpl.onUseCaseActive(record);
HandlerUtil.waitForLooperToIdle(sCameraHandler);
assertThat(
mCamera2CameraImpl.getCameraControlInternal().isZslDisabledByByUserCaseConfig())
.isTrue();
- mCamera2CameraImpl.detachUseCases(Arrays.asList(zsl));
+ mCamera2CameraImpl.detachUseCases(singletonList(zsl));
HandlerUtil.waitForLooperToIdle(sCameraHandler);
assertThat(
mCamera2CameraImpl.getCameraControlInternal().isZslDisabledByByUserCaseConfig())
.isTrue();
- mCamera2CameraImpl.detachUseCases(Arrays.asList(preview));
+ mCamera2CameraImpl.detachUseCases(singletonList(preview));
HandlerUtil.waitForLooperToIdle(sCameraHandler);
assertThat(
mCamera2CameraImpl.getCameraControlInternal().isZslDisabledByByUserCaseConfig())
.isTrue();
- mCamera2CameraImpl.detachUseCases(Arrays.asList(record));
+ mCamera2CameraImpl.detachUseCases(singletonList(record));
HandlerUtil.waitForLooperToIdle(sCameraHandler);
assertThat(
mCamera2CameraImpl.getCameraControlInternal().isZslDisabledByByUserCaseConfig())
@@ -942,28 +954,10 @@ public final class Camera2CameraImplTest {
useCase.updateSuggestedResolution(new Size(640, 480));
}
- private void waitForCameraClose(Camera2CameraImpl camera2CameraImpl)
- throws InterruptedException {
- Semaphore semaphore = new Semaphore(0);
-
- Observable.Observer<CameraInternal.State> observer =
- new Observable.Observer<CameraInternal.State>() {
- @Override
- public void onNewData(@Nullable CameraInternal.State value) {
- // Ignore any transient states.
- if (value == CameraInternal.State.CLOSED) {
- semaphore.release();
- }
- }
-
- @Override
- public void onError(@NonNull Throwable t) { /* Ignore any transient errors. */ }
- };
-
- camera2CameraImpl.getCameraState().addObserver(CameraXExecutors.directExecutor(), observer);
-
- // Wait until camera reaches closed state
- semaphore.acquire();
+ private static boolean getDefaultZslDisabled(int templateType) {
+ Boolean isZslDisabled = DEFAULT_TEMPLATE_TO_ZSL_DISABLED.get(templateType);
+ checkState(isZslDisabled != null, "No default mapping from template to zsl disabled");
+ return isZslDisabled;
}
public static class TestUseCase extends FakeUseCase {
@@ -971,7 +965,6 @@ public final class Camera2CameraImplTest {
HandlerThread mHandlerThread = new HandlerThread("HandlerThread");
Handler mHandler;
FakeUseCaseConfig mConfig;
- private String mCameraId;
private DeferrableSurface mDeferrableSurface;
private final CameraCaptureCallback mRepeatingCaptureCallback;
private final int mTemplate;
@@ -991,12 +984,15 @@ public final class Camera2CameraImplTest {
mRepeatingCaptureCallback = repeatingCaptureCallback;
mHandlerThread.start();
mHandler = new Handler(mHandlerThread.getLooper());
- Integer lensFacing =
+ int lensFacing =
cameraSelector.getLensFacing() == null ? CameraSelector.LENS_FACING_BACK :
cameraSelector.getLensFacing();
- mCameraId = CameraUtil.getCameraIdWithLensFacing(lensFacing);
- onAttach(new FakeCamera(mCameraId, null,
- new FakeCameraInfoInternal(mCameraId, 0, lensFacing)),
+ String cameraId = CameraUtil.getCameraIdWithLensFacing(lensFacing);
+ if (cameraId == null) {
+ cameraId = "FakeId";
+ }
+ onAttach(new FakeCamera(cameraId, null,
+ new FakeCameraInfoInternal(cameraId, 0, lensFacing)),
null, null);
updateSuggestedResolution(new Size(640, 480));
}