Add CTS for camera continuous autofocus modes.
- Also make sure focus position does not change after stopPreview
or takePicture.
bug:5169599
Change-Id: I81577447e8943b1e136ac92e04564171635a352f
diff --git a/tests/tests/hardware/src/android/hardware/cts/CameraTest.java b/tests/tests/hardware/src/android/hardware/cts/CameraTest.java
index 78def20..fcf3a34 100644
--- a/tests/tests/hardware/src/android/hardware/cts/CameraTest.java
+++ b/tests/tests/hardware/src/android/hardware/cts/CameraTest.java
@@ -1386,11 +1386,42 @@
assertEquals(focusMode, parameters.getFocusMode());
checkFocusDistances(parameters);
if (Parameters.FOCUS_MODE_AUTO.equals(focusMode)
- || Parameters.FOCUS_MODE_MACRO.equals(focusMode)) {
+ || Parameters.FOCUS_MODE_MACRO.equals(focusMode)
+ || Parameters.FOCUS_MODE_CONTINUOUS_VIDEO.equals(focusMode)
+ || Parameters.FOCUS_MODE_CONTINUOUS_PICTURE.equals(focusMode)) {
+ Log.v(TAG, "Focus mode=" + focusMode);
mCamera.autoFocus(mAutoFocusCallback);
assertTrue(waitForFocusDone());
parameters = mCamera.getParameters();
checkFocusDistances(parameters);
+ float[] initialFocusDistances = new float[3];
+ parameters.getFocusDistances(initialFocusDistances);
+
+ // Focus position should not change after autoFocus call.
+ // Continuous autofocus should have stopped. Sleep some time and
+ // check. Make sure continuous autofocus is not working. If the
+ // focus mode is auto or macro, it is no harm to do the extra
+ // test.
+ Thread.sleep(500);
+ parameters = mCamera.getParameters();
+ float[] currentFocusDistances = new float[3];
+ parameters.getFocusDistances(currentFocusDistances);
+ assertEquals(initialFocusDistances, currentFocusDistances);
+
+ // Focus position should not change after stopping preview.
+ mCamera.stopPreview();
+ parameters = mCamera.getParameters();
+ parameters.getFocusDistances(currentFocusDistances);
+ assertEquals(initialFocusDistances, currentFocusDistances);
+
+ // Focus position should not change after taking a picture.
+ mCamera.startPreview();
+ mCamera.takePicture(mShutterCallback, mRawPictureCallback, mJpegPictureCallback);
+ waitForSnapshotDone();
+ parameters = mCamera.getParameters();
+ parameters.getFocusDistances(currentFocusDistances);
+ assertEquals(initialFocusDistances, currentFocusDistances);
+ mCamera.startPreview();
}
}
@@ -1865,6 +1896,13 @@
assertEquals(expected.height, actual.height);
}
+ private void assertEquals(float[] expected, float[] actual) {
+ assertEquals(expected.length, actual.length);
+ for (int i = 0; i < expected.length; i++) {
+ assertEquals(expected[i], actual[i], 0.000001f);
+ }
+ }
+
private void assertNoLetters(String value, String key) {
for (int i = 0; i < value.length(); i++) {
char c = value.charAt(i);