Add camera tests for setPreviewDisplay (do not merge).
Our camera app calls startPreview before setPreviewDisplay.
We need to make sure camera drivers all support this.
Cherry-pick from fef2b490c25e26a332eb6e67848a22f912a12b48.
diff --git a/tests/tests/hardware/src/android/hardware/cts/CameraTest.java b/tests/tests/hardware/src/android/hardware/cts/CameraTest.java
index 3b4c5ed..593ffdb 100644
--- a/tests/tests/hardware/src/android/hardware/cts/CameraTest.java
+++ b/tests/tests/hardware/src/android/hardware/cts/CameraTest.java
@@ -221,14 +221,7 @@
Thread.sleep(WAIT_LONG);
}
- private void checkPreviewCallback() throws Exception {
- SurfaceHolder mSurfaceHolder;
-
- mSurfaceHolder = CameraStubActivity.mSurfaceView.getHolder();
- mCamera.setPreviewDisplay(mSurfaceHolder);
- if (LOGV)
- Log.v(TAG, "check preview callback");
- mCamera.startPreview();
+ private void waitForPreviewDone() {
synchronized (mPreviewDone) {
try {
mPreviewDone.wait(WAIT_FOR_COMMAND_TO_COMPLETE);
@@ -239,6 +232,16 @@
Log.v(TAG, "wait was interrupted.");
}
}
+ }
+
+ private void checkPreviewCallback() throws Exception {
+ SurfaceHolder mSurfaceHolder;
+
+ mSurfaceHolder = CameraStubActivity.mSurfaceView.getHolder();
+ mCamera.setPreviewDisplay(mSurfaceHolder);
+ if (LOGV) Log.v(TAG, "check preview callback");
+ mCamera.startPreview();
+ waitForPreviewDone();
mCamera.setPreviewCallback(null);
}
@@ -372,6 +375,48 @@
assertFalse(mRawPreviewCallbackResult);
}
+ @TestTargetNew(
+ level = TestLevel.COMPLETE,
+ method = "setPreviewDisplay",
+ args = {SurfaceHolder.class}
+ )
+ public void testSetPreviewDisplay() throws Exception {
+ SurfaceHolder mSurfaceHolder;
+ mSurfaceHolder = CameraStubActivity.mSurfaceView.getHolder();
+ initializeMessageLooper();
+ syncLock();
+
+ // Check the order: startPreview->setPreviewDisplay.
+ mCamera.setOneShotPreviewCallback(mRawPreviewCallback);
+ mCamera.startPreview();
+ mCamera.setPreviewDisplay(mSurfaceHolder);
+ waitForPreviewDone();
+ terminateMessageLooper();
+ assertTrue(mRawPreviewCallbackResult);
+
+ // Check the order: setPreviewDisplay->startPreview.
+ initializeMessageLooper();
+ syncLock();
+ mRawPreviewCallbackResult = false;
+ mCamera.setOneShotPreviewCallback(mRawPreviewCallback);
+ mCamera.setPreviewDisplay(mSurfaceHolder);
+ mCamera.startPreview();
+ waitForPreviewDone();
+ mCamera.stopPreview();
+ assertTrue(mRawPreviewCallbackResult);
+
+ // Check the order: setting preview display to null->startPreview->
+ // setPreviewDisplay.
+ mRawPreviewCallbackResult = false;
+ mCamera.setOneShotPreviewCallback(mRawPreviewCallback);
+ mCamera.setPreviewDisplay(null);
+ mCamera.startPreview();
+ mCamera.setPreviewDisplay(mSurfaceHolder);
+ waitForPreviewDone();
+ terminateMessageLooper();
+ assertTrue(mRawPreviewCallbackResult);
+ }
+
@TestTargets({
@TestTargetNew(
level = TestLevel.COMPLETE,