Test calling startPreview in jpeg callback.
Some camera drivers incorrectly think the capture is
still in progress after jpeg callback is sent to apps.
bug:3362253
Change-Id: I223593a59836808db26db9a46e5ff4fb50adf2dd
diff --git a/tests/tests/hardware/src/android/hardware/cts/CameraTest.java b/tests/tests/hardware/src/android/hardware/cts/CameraTest.java
index 22f47c3..89b9c63 100644
--- a/tests/tests/hardware/src/android/hardware/cts/CameraTest.java
+++ b/tests/tests/hardware/src/android/hardware/cts/CameraTest.java
@@ -2312,4 +2312,34 @@
assertEquals(originalAreas, parameters.getMeteringAreas());
}
}
+
+ // Apps should be able to call startPreview in jpeg callback.
+ @UiThreadTest
+ public void testJpegCallbackStartPreview() throws Exception {
+ int nCameras = Camera.getNumberOfCameras();
+ for (int id = 0; id < nCameras; id++) {
+ Log.v(TAG, "Camera id=" + id);
+ testJpegCallbackStartPreviewByCamera(id);
+ }
+ }
+
+ private void testJpegCallbackStartPreviewByCamera(int cameraId) throws Exception {
+ initializeMessageLooper(cameraId);
+ mCamera.startPreview();
+ mCamera.takePicture(mShutterCallback, mRawPictureCallback, new JpegStartPreviewCallback());
+ waitForSnapshotDone();
+ terminateMessageLooper();
+ assertTrue(mJpegPictureCallbackResult);
+ }
+
+ private final class JpegStartPreviewCallback implements PictureCallback {
+ public void onPictureTaken(byte[] rawData, Camera camera) {
+ try {
+ camera.startPreview();
+ mJpegPictureCallbackResult = true;
+ } catch (Exception e) {
+ }
+ mSnapshotDone.open();
+ }
+ }
}