From c86d13c30807da751d3af58822470842785a8982 Mon Sep 17 00:00:00 2001 From: Ravneet Dhanjal Date: Tue, 8 Nov 2022 21:12:43 +0000 Subject: [PATCH] Camera Extensions: Add OutputSurfaceConfiguration class to retrieve surface outputs - Add OutputSurfaceConfiguration class to get the surface outputs in the advanced extensions to reduce output surface parameters in initSession for the addition of future surfaces Test: CTS Tests Bug: 258296845 Change-Id: Iebaf37e5298f0fb5c2da6aae480f52df55210413 --- .../IOutputSurfaceConfiguration.aidl | 26 +++++++++ .../CameraExtensionsProxyService.java | 53 ++++++++++++++++--- 2 files changed, 73 insertions(+), 6 deletions(-) create mode 100644 core/java/android/hardware/camera2/extension/IOutputSurfaceConfiguration.aidl diff --git a/core/java/android/hardware/camera2/extension/IOutputSurfaceConfiguration.aidl b/core/java/android/hardware/camera2/extension/IOutputSurfaceConfiguration.aidl new file mode 100644 index 0000000000000..70b096f29c818 --- /dev/null +++ b/core/java/android/hardware/camera2/extension/IOutputSurfaceConfiguration.aidl @@ -0,0 +1,26 @@ +/** + * Copyright (c) 2022, The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package android.hardware.camera2.extension; + +import android.hardware.camera2.extension.OutputSurface; + +/** @hide */ +interface IOutputSurfaceConfiguration +{ + OutputSurface getPreviewOutputSurface(); + OutputSurface getImageCaptureOutputSurface(); + OutputSurface getImageAnalysisOutputSurface(); +} diff --git a/packages/services/CameraExtensionsProxy/src/com/android/cameraextensions/CameraExtensionsProxyService.java b/packages/services/CameraExtensionsProxy/src/com/android/cameraextensions/CameraExtensionsProxyService.java index 9897a0762d9f1..90690a2bc8b8f 100644 --- a/packages/services/CameraExtensionsProxy/src/com/android/cameraextensions/CameraExtensionsProxyService.java +++ b/packages/services/CameraExtensionsProxy/src/com/android/cameraextensions/CameraExtensionsProxyService.java @@ -104,6 +104,7 @@ import androidx.camera.extensions.impl.advanced.ImageProcessorImpl; import androidx.camera.extensions.impl.advanced.ImageReaderOutputConfigImpl; import androidx.camera.extensions.impl.advanced.MultiResolutionImageReaderOutputConfigImpl; import androidx.camera.extensions.impl.advanced.NightAdvancedExtenderImpl; +import androidx.camera.extensions.impl.advanced.OutputSurfaceConfigurationImpl; import androidx.camera.extensions.impl.advanced.OutputSurfaceImpl; import androidx.camera.extensions.impl.advanced.RequestProcessorImpl; import androidx.camera.extensions.impl.advanced.SessionProcessorImpl; @@ -1147,15 +1148,27 @@ public class CameraExtensionsProxyService extends Service { @Override public CameraSessionConfig initSession(String cameraId, OutputSurface previewSurface, - OutputSurface burstSurface) { + OutputSurface imageCaptureSurface) { OutputSurfaceImplStub outputPreviewSurfaceImpl = new OutputSurfaceImplStub(previewSurface); - OutputSurfaceImplStub outputBurstSurfaceImpl = - new OutputSurfaceImplStub(burstSurface); + OutputSurfaceImplStub outputImageCaptureSurfaceImpl = + new OutputSurfaceImplStub(imageCaptureSurface); - Camera2SessionConfigImpl sessionConfig = mSessionProcessor.initSession(cameraId, - mCharacteristicsHashMap, getApplicationContext(), outputPreviewSurfaceImpl, - outputBurstSurfaceImpl, null /*imageAnalysisSurfaceConfig*/); + Camera2SessionConfigImpl sessionConfig; + + if (LATENCY_IMPROVEMENTS_SUPPORTED) { + OutputSurfaceConfigurationImplStub outputSurfaceConfigs = + new OutputSurfaceConfigurationImplStub(outputPreviewSurfaceImpl, + // Image Analysis Output is currently only supported in CameraX + outputImageCaptureSurfaceImpl, null /*imageAnalysisSurfaceConfig*/); + + sessionConfig = mSessionProcessor.initSession(cameraId, + mCharacteristicsHashMap, getApplicationContext(), outputSurfaceConfigs); + } else { + sessionConfig = mSessionProcessor.initSession(cameraId, + mCharacteristicsHashMap, getApplicationContext(), outputPreviewSurfaceImpl, + outputImageCaptureSurfaceImpl, null /*imageAnalysisSurfaceConfig*/); + } List outputConfigs = sessionConfig.getOutputConfigs(); CameraSessionConfig ret = new CameraSessionConfig(); @@ -1237,6 +1250,34 @@ public class CameraExtensionsProxyService extends Service { } } + private class OutputSurfaceConfigurationImplStub implements OutputSurfaceConfigurationImpl { + private OutputSurfaceImpl mOutputPreviewSurfaceImpl; + private OutputSurfaceImpl mOutputImageCaptureSurfaceImpl; + private OutputSurfaceImpl mOutputImageAnalysisSurfaceImpl; + + public OutputSurfaceConfigurationImplStub(OutputSurfaceImpl previewOutput, + OutputSurfaceImpl imageCaptureOutput, OutputSurfaceImpl imageAnalysisOutput) { + mOutputPreviewSurfaceImpl = previewOutput; + mOutputImageCaptureSurfaceImpl = imageCaptureOutput; + mOutputImageAnalysisSurfaceImpl = imageAnalysisOutput; + } + + @Override + public OutputSurfaceImpl getPreviewOutputSurface() { + return mOutputPreviewSurfaceImpl; + } + + @Override + public OutputSurfaceImpl getImageCaptureOutputSurface() { + return mOutputImageCaptureSurfaceImpl; + } + + @Override + public OutputSurfaceImpl getImageAnalysisOutputSurface() { + return mOutputImageAnalysisSurfaceImpl; + } + } + private class OutputSurfaceImplStub implements OutputSurfaceImpl { private final Surface mSurface; private final Size mSize;