Merge "Camera Extensions: Add OutputSurfaceConfiguration class to retrieve surface outputs"

This commit is contained in:
Ravneet Dhanjal
2022-11-20 21:25:35 +00:00
committed by Android (Google) Code Review
2 changed files with 73 additions and 6 deletions

View File

@@ -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();
}

View File

@@ -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<Camera2OutputConfigImpl> 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;