From 42499640cc1f1fa16c43fc06cf62001b44027451 Mon Sep 17 00:00:00 2001 From: Zhijun He Date: Mon, 15 Jun 2015 09:43:55 -0700 Subject: Camera2: fix Surface cast issue Can not cast an object array directly to a Surface array. Change-Id: Ie2cb711f9e1ff0fc17d6038992dc3c7af9471ccf --- .../android/hardware/camera2/impl/CameraDeviceImpl.java | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) (limited to 'core/java') diff --git a/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java b/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java index 8512b23..a1ebe6a 100644 --- a/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java +++ b/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java @@ -2053,8 +2053,10 @@ public class CameraDeviceImpl extends CameraDevice { requestMetadata, /*reprocess*/false, CameraCaptureSession.SESSION_ID_NONE); // Overwrite the capture intent to make sure a good value is set. - Surface[] surfaces = (Surface[])outputSurfaces.toArray(); - if (outputSurfaces.size() == 1 && SurfaceUtils.isSurfaceForHwVideoEncoder(surfaces[0])) { + Iterator iterator = outputSurfaces.iterator(); + Surface firstSurface = iterator.next(); + Surface secondSurface = null; + if (outputSurfaces.size() == 1 && SurfaceUtils.isSurfaceForHwVideoEncoder(firstSurface)) { singleTargetRequestBuilder.set(CaptureRequest.CONTROL_CAPTURE_INTENT, CaptureRequest.CONTROL_CAPTURE_INTENT_PREVIEW); } else { @@ -2071,19 +2073,20 @@ public class CameraDeviceImpl extends CameraDevice { requestMetadata, /*reprocess*/false, CameraCaptureSession.SESSION_ID_NONE); doubleTargetRequestBuilder.set(CaptureRequest.CONTROL_CAPTURE_INTENT, CaptureRequest.CONTROL_CAPTURE_INTENT_VIDEO_RECORD); - doubleTargetRequestBuilder.addTarget(surfaces[0]); - doubleTargetRequestBuilder.addTarget(surfaces[1]); + doubleTargetRequestBuilder.addTarget(firstSurface); + secondSurface = iterator.next(); + doubleTargetRequestBuilder.addTarget(secondSurface); doubleTargetRequestBuilder.setPartOfCHSRequestList(/*partOfCHSList*/true); // Make sure singleTargetRequestBuilder contains only recording surface for // preview + recording case. - Surface recordingSurface = surfaces[0]; + Surface recordingSurface = firstSurface; if (!SurfaceUtils.isSurfaceForHwVideoEncoder(recordingSurface)) { - recordingSurface = surfaces[1]; + recordingSurface = secondSurface; } singleTargetRequestBuilder.addTarget(recordingSurface); } else { // Single output case: either recording or preview. - singleTargetRequestBuilder.addTarget(surfaces[0]); + singleTargetRequestBuilder.addTarget(firstSurface); } // Generate the final request list. -- cgit v1.1