Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 42499640 authored by Zhijun He's avatar Zhijun He
Browse files

Camera2: fix Surface cast issue

Can not cast an object array directly to a Surface array.

Change-Id: Ie2cb711f9e1ff0fc17d6038992dc3c7af9471ccf
parent 54b65ff3
Loading
Loading
Loading
Loading
+10 −7
Original line number Diff line number Diff line
@@ -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<Surface> 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.