Merge "Camera2: fix Surface cast issue" into mnc-dev

This commit is contained in:
Zhijun He
2015-06-15 22:58:47 +00:00
committed by Android (Google) Code Review

View File

@@ -2053,8 +2053,10 @@ public class CameraDeviceImpl extends CameraDevice {
requestMetadata, /*reprocess*/false, CameraCaptureSession.SESSION_ID_NONE); requestMetadata, /*reprocess*/false, CameraCaptureSession.SESSION_ID_NONE);
// Overwrite the capture intent to make sure a good value is set. // Overwrite the capture intent to make sure a good value is set.
Surface[] surfaces = (Surface[])outputSurfaces.toArray(); Iterator<Surface> iterator = outputSurfaces.iterator();
if (outputSurfaces.size() == 1 && SurfaceUtils.isSurfaceForHwVideoEncoder(surfaces[0])) { Surface firstSurface = iterator.next();
Surface secondSurface = null;
if (outputSurfaces.size() == 1 && SurfaceUtils.isSurfaceForHwVideoEncoder(firstSurface)) {
singleTargetRequestBuilder.set(CaptureRequest.CONTROL_CAPTURE_INTENT, singleTargetRequestBuilder.set(CaptureRequest.CONTROL_CAPTURE_INTENT,
CaptureRequest.CONTROL_CAPTURE_INTENT_PREVIEW); CaptureRequest.CONTROL_CAPTURE_INTENT_PREVIEW);
} else { } else {
@@ -2071,19 +2073,20 @@ public class CameraDeviceImpl extends CameraDevice {
requestMetadata, /*reprocess*/false, CameraCaptureSession.SESSION_ID_NONE); requestMetadata, /*reprocess*/false, CameraCaptureSession.SESSION_ID_NONE);
doubleTargetRequestBuilder.set(CaptureRequest.CONTROL_CAPTURE_INTENT, doubleTargetRequestBuilder.set(CaptureRequest.CONTROL_CAPTURE_INTENT,
CaptureRequest.CONTROL_CAPTURE_INTENT_VIDEO_RECORD); CaptureRequest.CONTROL_CAPTURE_INTENT_VIDEO_RECORD);
doubleTargetRequestBuilder.addTarget(surfaces[0]); doubleTargetRequestBuilder.addTarget(firstSurface);
doubleTargetRequestBuilder.addTarget(surfaces[1]); secondSurface = iterator.next();
doubleTargetRequestBuilder.addTarget(secondSurface);
doubleTargetRequestBuilder.setPartOfCHSRequestList(/*partOfCHSList*/true); doubleTargetRequestBuilder.setPartOfCHSRequestList(/*partOfCHSList*/true);
// Make sure singleTargetRequestBuilder contains only recording surface for // Make sure singleTargetRequestBuilder contains only recording surface for
// preview + recording case. // preview + recording case.
Surface recordingSurface = surfaces[0]; Surface recordingSurface = firstSurface;
if (!SurfaceUtils.isSurfaceForHwVideoEncoder(recordingSurface)) { if (!SurfaceUtils.isSurfaceForHwVideoEncoder(recordingSurface)) {
recordingSurface = surfaces[1]; recordingSurface = secondSurface;
} }
singleTargetRequestBuilder.addTarget(recordingSurface); singleTargetRequestBuilder.addTarget(recordingSurface);
} else { } else {
// Single output case: either recording or preview. // Single output case: either recording or preview.
singleTargetRequestBuilder.addTarget(surfaces[0]); singleTargetRequestBuilder.addTarget(firstSurface);
} }
// Generate the final request list. // Generate the final request list.