Camera: fix failures for depth/color camera combination

Reset the ImageReader every time we call prepareCapture.

Test: partner testing
Bug: 122348647
Change-Id: Ib1f8fd5e4841066a3a9b04e38367b51d8457f7ed
diff --git a/tests/camera/src/android/hardware/camera2/cts/CameraDeviceTest.java b/tests/camera/src/android/hardware/camera2/cts/CameraDeviceTest.java
index f72fcd7..836210f 100644
--- a/tests/camera/src/android/hardware/camera2/cts/CameraDeviceTest.java
+++ b/tests/camera/src/android/hardware/camera2/cts/CameraDeviceTest.java
@@ -153,8 +153,6 @@
                     any(CameraDevice.class));
 
         mCameraListener = mCameraMockListener;
-        createDefaultImageReader(DEFAULT_CAPTURE_SIZE, ImageFormat.YUV_420_888, MAX_NUM_IMAGES,
-                new ImageDropperListener());
     }
 
     @Override
@@ -449,7 +447,6 @@
     public void testChainedOperation() throws Throwable {
 
         final ArrayList<Surface> outputs = new ArrayList<>();
-        outputs.add(mReaderSurface);
 
         // A queue for the chained listeners to push results to
         // A success Throwable indicates no errors; other Throwables detail a test failure;
@@ -591,49 +588,60 @@
         // Actual test code
 
         for (int i = 0; i < mCameraIds.length; i++) {
-            Throwable result;
+            try {
+                Throwable result;
 
-            if (!(new StaticMetadata(mCameraManager.getCameraCharacteristics(mCameraIds[i]))).
-                    isColorOutputSupported()) {
-                Log.i(TAG, "Camera " + mCameraIds[i] + " does not support color outputs, skipping");
-                continue;
-            }
-
-            // Start chained cascade
-            ChainedCameraListener cameraListener = new ChainedCameraListener();
-            mCameraManager.openCamera(mCameraIds[i], cameraListener, mHandler);
-
-            // Check if open succeeded
-            result = results.poll(CAMERA_OPEN_TIMEOUT_MS, TimeUnit.MILLISECONDS);
-            if (result != success) {
-                if (cameraListener.cameraDevice != null) cameraListener.cameraDevice.close();
-                if (result == null) {
-                    fail("Timeout waiting for camera open");
-                } else {
-                    throw result;
+                if (!(new StaticMetadata(mCameraManager.getCameraCharacteristics(mCameraIds[i]))).
+                        isColorOutputSupported()) {
+                    Log.i(TAG, "Camera " + mCameraIds[i] +
+                            " does not support color outputs, skipping");
+                    continue;
                 }
-            }
 
-            // Check if configure succeeded
-            result = results.poll(SESSION_CONFIGURE_TIMEOUT_MS, TimeUnit.MILLISECONDS);
-            if (result != success) {
-                if (cameraListener.cameraDevice != null) cameraListener.cameraDevice.close();
-                if (result == null) {
-                    fail("Timeout waiting for session configure");
-                } else {
-                    throw result;
-                }
-            }
+                createDefaultImageReader(DEFAULT_CAPTURE_SIZE, ImageFormat.YUV_420_888,
+                        MAX_NUM_IMAGES, new ImageDropperListener());
+                outputs.add(mReaderSurface);
 
-            // Check if capture succeeded
-            result = results.poll(CAPTURE_RESULT_TIMEOUT_MS, TimeUnit.MILLISECONDS);
-            if (result != success) {
-                if (cameraListener.cameraDevice != null) cameraListener.cameraDevice.close();
-                if (result == null) {
-                    fail("Timeout waiting for capture completion");
-                } else {
-                    throw result;
+                // Start chained cascade
+                ChainedCameraListener cameraListener = new ChainedCameraListener();
+                mCameraManager.openCamera(mCameraIds[i], cameraListener, mHandler);
+
+                // Check if open succeeded
+                result = results.poll(CAMERA_OPEN_TIMEOUT_MS, TimeUnit.MILLISECONDS);
+                if (result != success) {
+                    if (cameraListener.cameraDevice != null) cameraListener.cameraDevice.close();
+                    if (result == null) {
+                        fail("Timeout waiting for camera open");
+                    } else {
+                        throw result;
+                    }
                 }
+
+                // Check if configure succeeded
+                result = results.poll(SESSION_CONFIGURE_TIMEOUT_MS, TimeUnit.MILLISECONDS);
+                if (result != success) {
+                    if (cameraListener.cameraDevice != null) cameraListener.cameraDevice.close();
+                    if (result == null) {
+                        fail("Timeout waiting for session configure");
+                    } else {
+                        throw result;
+                    }
+                }
+
+                // Check if capture succeeded
+                result = results.poll(CAPTURE_RESULT_TIMEOUT_MS, TimeUnit.MILLISECONDS);
+                if (result != success) {
+                    if (cameraListener.cameraDevice != null) cameraListener.cameraDevice.close();
+                    if (result == null) {
+                        fail("Timeout waiting for capture completion");
+                    } else {
+                        throw result;
+                    }
+                }
+
+            } finally {
+                closeDefaultImageReader();
+                outputs.clear();
             }
         }
     }
@@ -1836,6 +1844,9 @@
         if (!mStaticInfo.isColorOutputSupported()) {
             createDefaultImageReader(getMaxDepthSize(mCamera.getId(), mCameraManager),
                     ImageFormat.DEPTH16, MAX_NUM_IMAGES, new ImageDropperListener());
+        } else {
+            createDefaultImageReader(DEFAULT_CAPTURE_SIZE, ImageFormat.YUV_420_888, MAX_NUM_IMAGES,
+                    new ImageDropperListener());
         }
 
         List<Surface> outputSurfaces = new ArrayList<>(Arrays.asList(mReaderSurface));