Loading packages/services/CameraExtensionsProxy/src/com/android/cameraextensions/CameraExtensionsProxyService.java +254 −6 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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; Loading @@ -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; Loading @@ -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; Loading Loading @@ -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(), Loading @@ -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(); Loading Loading
packages/services/CameraExtensionsProxy/src/com/android/cameraextensions/CameraExtensionsProxyService.java +254 −6 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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; Loading @@ -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; Loading @@ -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; Loading Loading @@ -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(), Loading @@ -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(); Loading