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 382aa878f1f69..2ad2119896d33 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; @@ -1165,15 +1166,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(); @@ -1255,6 +1268,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;