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

Commit b797ec26 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Camera: Support Eyes free videography advanced extenders" into main

parents 089a3102 cccd2b69
Loading
Loading
Loading
Loading
+254 −6
Original line number Diff line number Diff line
@@ -76,6 +76,7 @@ import android.util.Size;
import android.view.Surface;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.camera.extensions.impl.AutoImageCaptureExtenderImpl;
import androidx.camera.extensions.impl.AutoPreviewExtenderImpl;
import androidx.camera.extensions.impl.BeautyImageCaptureExtenderImpl;
@@ -94,6 +95,7 @@ import androidx.camera.extensions.impl.PreviewExtenderImpl;
import androidx.camera.extensions.impl.PreviewExtenderImpl.ProcessorType;
import androidx.camera.extensions.impl.PreviewImageProcessorImpl;
import androidx.camera.extensions.impl.ProcessResultImpl;
import androidx.camera.extensions.impl.ProcessorImpl;
import androidx.camera.extensions.impl.RequestUpdateProcessorImpl;
import androidx.camera.extensions.impl.advanced.AdvancedExtenderImpl;
import androidx.camera.extensions.impl.advanced.AutoAdvancedExtenderImpl;
@@ -101,6 +103,7 @@ import androidx.camera.extensions.impl.advanced.BeautyAdvancedExtenderImpl;
import androidx.camera.extensions.impl.advanced.BokehAdvancedExtenderImpl;
import androidx.camera.extensions.impl.advanced.Camera2OutputConfigImpl;
import androidx.camera.extensions.impl.advanced.Camera2SessionConfigImpl;
import androidx.camera.extensions.impl.advanced.EyesFreeVideographyAdvancedExtenderImpl;
import androidx.camera.extensions.impl.advanced.HdrAdvancedExtenderImpl;
import androidx.camera.extensions.impl.advanced.ImageProcessorImpl;
import androidx.camera.extensions.impl.advanced.ImageReaderOutputConfigImpl;
@@ -112,6 +115,8 @@ import androidx.camera.extensions.impl.advanced.RequestProcessorImpl;
import androidx.camera.extensions.impl.advanced.SessionProcessorImpl;
import androidx.camera.extensions.impl.advanced.SurfaceOutputConfigImpl;

import com.android.internal.camera.flags.Flags;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
@@ -135,22 +140,28 @@ public class CameraExtensionsProxyService extends Service {
    private static final String RESULTS_VERSION_PREFIX = "1.3";
    // Support for various latency improvements
    private static final String LATENCY_VERSION_PREFIX = "1.4";
    private static final String[] ADVANCED_VERSION_PREFIXES = {LATENCY_VERSION_PREFIX,
            ADVANCED_VERSION_PREFIX, RESULTS_VERSION_PREFIX };
    private static final String[] SUPPORTED_VERSION_PREFIXES = {LATENCY_VERSION_PREFIX,
            RESULTS_VERSION_PREFIX, ADVANCED_VERSION_PREFIX, "1.1", NON_INIT_VERSION_PREFIX};
    private static final String EFV_VERSION_PREFIX = "1.5";
    private static final String[] ADVANCED_VERSION_PREFIXES = {EFV_VERSION_PREFIX,
            LATENCY_VERSION_PREFIX, ADVANCED_VERSION_PREFIX, RESULTS_VERSION_PREFIX };
    private static final String[] SUPPORTED_VERSION_PREFIXES = {EFV_VERSION_PREFIX,
            LATENCY_VERSION_PREFIX, RESULTS_VERSION_PREFIX, ADVANCED_VERSION_PREFIX, "1.1",
            NON_INIT_VERSION_PREFIX};
    private static final boolean EXTENSIONS_PRESENT = checkForExtensions();
    private static final String EXTENSIONS_VERSION = EXTENSIONS_PRESENT ?
            (new ExtensionVersionImpl()).checkApiVersion(LATEST_VERSION) : null;
    private static final boolean ESTIMATED_LATENCY_API_SUPPORTED = checkForLatencyAPI();
    private static final boolean LATENCY_IMPROVEMENTS_SUPPORTED = EXTENSIONS_PRESENT &&
            (EXTENSIONS_VERSION.startsWith(LATENCY_VERSION_PREFIX));
            (EXTENSIONS_VERSION.startsWith(LATENCY_VERSION_PREFIX) ||
                    (EXTENSIONS_VERSION.startsWith(EFV_VERSION_PREFIX)));
    private static final boolean EFV_SUPPORTED = EXTENSIONS_PRESENT &&
            (EXTENSIONS_VERSION.startsWith(EFV_VERSION_PREFIX));
    private static final boolean ADVANCED_API_SUPPORTED = checkForAdvancedAPI();
    private static final boolean INIT_API_SUPPORTED = EXTENSIONS_PRESENT &&
            (!EXTENSIONS_VERSION.startsWith(NON_INIT_VERSION_PREFIX));
    private static final boolean RESULT_API_SUPPORTED = EXTENSIONS_PRESENT &&
            (EXTENSIONS_VERSION.startsWith(RESULTS_VERSION_PREFIX) ||
            EXTENSIONS_VERSION.startsWith(LATENCY_VERSION_PREFIX));
            EXTENSIONS_VERSION.startsWith(LATENCY_VERSION_PREFIX) ||
            EXTENSIONS_VERSION.startsWith(EFV_VERSION_PREFIX));

    private HashMap<String, Long> mMetadataVendorIdMap = new HashMap<>();
    private CameraManager mCameraManager;
@@ -509,6 +520,167 @@ public class CameraExtensionsProxyService extends Service {
     */
    public static Pair<PreviewExtenderImpl, ImageCaptureExtenderImpl> initializeExtension(
            int extensionType) {
        if (Flags.concertMode()) {
            if (extensionType == CameraExtensionCharacteristics.EXTENSION_EYES_FREE_VIDEOGRAPHY) {
                // Basic extensions are deprecated starting with extension version 1.5
                return new Pair<>(new PreviewExtenderImpl() {
                    @Override
                    public boolean isExtensionAvailable(String cameraId,
                            CameraCharacteristics cameraCharacteristics) {
                        return false;
                    }

                    @Override
                    public void init(String cameraId, CameraCharacteristics cameraCharacteristics) {

                    }

                    @Override
                    public androidx.camera.extensions.impl.CaptureStageImpl getCaptureStage() {
                        return null;
                    }

                    @Override
                    public ProcessorType getProcessorType() {
                        return null;
                    }

                    @Override
                    public ProcessorImpl getProcessor() {
                        return null;
                    }

                    @Nullable
                    @Override
                    public List<Pair<Integer, Size[]>> getSupportedResolutions() {
                        return null;
                    }

                    @Override
                    public void onInit(String cameraId, CameraCharacteristics cameraCharacteristics,
                            Context context) { }

                    @Override
                    public void onDeInit() { }

                    @Override
                    public androidx.camera.extensions.impl.CaptureStageImpl onPresetSession() {
                        return null;
                    }

                    @Override
                    public androidx.camera.extensions.impl.CaptureStageImpl onEnableSession() {
                        return null;
                    }

                    @Override
                    public androidx.camera.extensions.impl.CaptureStageImpl onDisableSession() {
                        return null;
                    }

                    @Override
                    public int onSessionType() {
                        return 0;
                    }
                }, new ImageCaptureExtenderImpl() {
                    @Override
                    public boolean isExtensionAvailable(String cameraId,
                            CameraCharacteristics cameraCharacteristics) {
                        return false;
                    }

                    @Override
                    public void init(String cameraId,
                            CameraCharacteristics cameraCharacteristics) { }

                    @Override
                    public CaptureProcessorImpl getCaptureProcessor() {
                        return null;
                    }

                    @Override
                    public
                    List<androidx.camera.extensions.impl.CaptureStageImpl> getCaptureStages() {
                        return null;
                    }

                    @Override
                    public int getMaxCaptureStage() {
                        return 0;
                    }

                    @Override
                    public List<Pair<Integer, Size[]>> getSupportedResolutions() {
                        return null;
                    }

                    @Override
                    public List<Pair<Integer, Size[]>> getSupportedPostviewResolutions(
                            Size captureSize) {
                        return null;
                    }

                    @Override
                    public Range<Long> getEstimatedCaptureLatencyRange(
                            Size captureOutputSize) {
                        return null;
                    }

                    @Override
                    public List<CaptureRequest.Key> getAvailableCaptureRequestKeys() {
                        return null;
                    }

                    @Override
                    public List<CaptureResult.Key> getAvailableCaptureResultKeys() {
                        return null;
                    }

                    @Override
                    public boolean isCaptureProcessProgressAvailable() {
                        return false;
                    }

                    @Override
                    public Pair<Long, Long> getRealtimeCaptureLatency() {
                        return null;
                    }

                    @Override
                    public boolean isPostviewAvailable() {
                        return false;
                    }

                    @Override
                    public void onInit(String cameraId,
                            CameraCharacteristics cameraCharacteristics, Context context) { }

                    @Override
                    public void onDeInit() { }

                    @Override
                    public androidx.camera.extensions.impl.CaptureStageImpl onPresetSession() {
                        return null;
                    }

                    @Override
                    public androidx.camera.extensions.impl.CaptureStageImpl onEnableSession() {
                        return null;
                    }

                    @Override
                    public androidx.camera.extensions.impl.CaptureStageImpl onDisableSession() {
                        return null;
                    }

                    @Override
                    public int onSessionType() {
                        return 0;
                    }
                });
            }
        }

        switch (extensionType) {
            case CameraExtensionCharacteristics.EXTENSION_AUTOMATIC:
                return new Pair<>(new AutoPreviewExtenderImpl(),
@@ -533,6 +705,82 @@ public class CameraExtensionsProxyService extends Service {
     * @hide
     */
    public static AdvancedExtenderImpl initializeAdvancedExtensionImpl(int extensionType) {
        if (Flags.concertMode()) {
            if (extensionType == CameraExtensionCharacteristics.EXTENSION_EYES_FREE_VIDEOGRAPHY) {
                if (EFV_SUPPORTED) {
                    return new EyesFreeVideographyAdvancedExtenderImpl();
                } else {
                    return new AdvancedExtenderImpl() {
                        @Override
                        public boolean isExtensionAvailable(String cameraId,
                                Map<String, CameraCharacteristics> characteristicsMap) {
                            return false;
                        }

                        @Override
                        public void init(String cameraId,
                                Map<String, CameraCharacteristics> characteristicsMap) {

                        }

                        @Override
                        public Range<Long> getEstimatedCaptureLatencyRange(String cameraId,
                                Size captureOutputSize, int imageFormat) {
                            return null;
                        }

                        @Override
                        public Map<Integer, List<Size>> getSupportedPreviewOutputResolutions(
                                String cameraId) {
                            return null;
                        }

                        @Override
                        public Map<Integer, List<Size>> getSupportedCaptureOutputResolutions(
                                String cameraId) {
                            return null;
                        }

                        @Override
                        public Map<Integer, List<Size>> getSupportedPostviewResolutions(
                                Size captureSize) {
                            return null;
                        }

                        @Override
                        public List<Size> getSupportedYuvAnalysisResolutions(String cameraId) {
                            return null;
                        }

                        @Override
                        public SessionProcessorImpl createSessionProcessor() {
                            return null;
                        }

                        @Override
                        public List<CaptureRequest.Key> getAvailableCaptureRequestKeys() {
                            return null;
                        }

                        @Override
                        public List<CaptureResult.Key> getAvailableCaptureResultKeys() {
                            return null;
                        }

                        @Override
                        public boolean isCaptureProcessProgressAvailable() {
                            return false;
                        }

                        @Override
                        public boolean isPostviewAvailable() {
                            return false;
                        }
                    };
                }
            }
        }

        switch (extensionType) {
            case CameraExtensionCharacteristics.EXTENSION_AUTOMATIC:
                return new AutoAdvancedExtenderImpl();