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

Commit 4c29639b authored by Ravneet Dhanjal's avatar Ravneet Dhanjal Committed by Android (Google) Code Review
Browse files

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

parents f9ca7a2f c86d13c3
Loading
Loading
Loading
Loading
+26 −0
Original line number Diff line number Diff line
/**
 * 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();
}
+47 −6
Original line number Diff line number Diff line
@@ -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,
            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,
                    outputBurstSurfaceImpl, null /*imageAnalysisSurfaceConfig*/);
                        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;