From 3220b917b057cee2d23e9f2821b10127b942b5a5 Mon Sep 17 00:00:00 2001 From: Emilian Peev Date: Mon, 6 Jun 2022 15:36:10 -0700 Subject: [PATCH] Camera: Update the advanced extension version checks The advanced extension version checks in the extension service do not consider the latest 1.3 version. Bug: 235142830 Test: atest -c -d cts/tests/camera/src/android/hardware/camera2/cts/CameraExtensionCharacteristicsTest.java atest -c -d cts/tests/camera/src/android/hardware/camera2/cts/CameraExtensionSessionTest.java Change-Id: I0da6080fff594fd742f3d0f42cf15eeb54d86da0 --- .../CameraExtensionsProxyService.java | 42 ++++++++++++++----- 1 file changed, 32 insertions(+), 10 deletions(-) diff --git a/packages/services/CameraExtensionsProxy/src/com/android/cameraextensions/CameraExtensionsProxyService.java b/packages/services/CameraExtensionsProxy/src/com/android/cameraextensions/CameraExtensionsProxyService.java index 09a05bb6b40ee..3d24588c97634 100644 --- a/packages/services/CameraExtensionsProxy/src/com/android/cameraextensions/CameraExtensionsProxyService.java +++ b/packages/services/CameraExtensionsProxy/src/com/android/cameraextensions/CameraExtensionsProxyService.java @@ -124,15 +124,21 @@ public class CameraExtensionsProxyService extends Service { private static final String CAMERA_EXTENSION_VERSION_NAME = "androidx.camera.extensions.impl.ExtensionVersionImpl"; - private static final String LATEST_VERSION = "1.2.0"; + private static final String LATEST_VERSION = "1.3.0"; + // No support for the init sequence private static final String NON_INIT_VERSION_PREFIX = "1.0"; + // Support advanced API and latency queries private static final String ADVANCED_VERSION_PREFIX = "1.2"; + // Support for the capture request & result APIs private static final String RESULTS_VERSION_PREFIX = "1.3"; + private static final String[] ADVANCED_VERSION_PREFIXES = {ADVANCED_VERSION_PREFIX, + RESULTS_VERSION_PREFIX}; private static final String[] SUPPORTED_VERSION_PREFIXES = {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 LATENCY_API_SUPPORTED = checkForLatencyAPI(); private static final boolean ADVANCED_API_SUPPORTED = checkForAdvancedAPI(); private static final boolean INIT_API_SUPPORTED = EXTENSIONS_PRESENT && (!EXTENSIONS_VERSION.startsWith(NON_INIT_VERSION_PREFIX)); @@ -143,19 +149,35 @@ public class CameraExtensionsProxyService extends Service { private HashMap mMetadataVendorIdMap = new HashMap<>(); private CameraManager mCameraManager; - private static boolean checkForAdvancedAPI() { - if (EXTENSIONS_PRESENT && EXTENSIONS_VERSION.startsWith(ADVANCED_VERSION_PREFIX)) { - try { - return (new ExtensionVersionImpl()).isAdvancedExtenderImplemented(); - } catch (NoSuchMethodError e) { - // This could happen in case device specific extension implementations are using an - // older extension API but incorrectly set the extension version. + private static boolean checkForLatencyAPI() { + if (!EXTENSIONS_PRESENT) { + return false; + } + + for (String advancedVersions : ADVANCED_VERSION_PREFIXES) { + if (EXTENSIONS_VERSION.startsWith(advancedVersions)) { + return true; } } return false; } + private static boolean checkForAdvancedAPI() { + if (!checkForLatencyAPI()) { + return false; + } + + try { + return (new ExtensionVersionImpl()).isAdvancedExtenderImplemented(); + } catch (NoSuchMethodError e) { + // This could happen in case device specific extension implementations are using + // an older extension API but incorrectly set the extension version. + } + + return false; + } + private static boolean checkForExtensions() { try { Class.forName(CAMERA_EXTENSION_VERSION_NAME); @@ -292,7 +314,7 @@ public class CameraExtensionsProxyService extends Service { if (INIT_API_SUPPORTED) { if (mActiveClients.isEmpty()) { InitializerFuture status = new InitializerFuture(); - InitializerImpl.init(EXTENSIONS_VERSION, ctx, new InitializeHandler(status), + InitializerImpl.init(LATEST_VERSION, ctx, new InitializeHandler(status), new HandlerExecutor(mHandler)); boolean initSuccess; try { @@ -1447,7 +1469,7 @@ public class CameraExtensionsProxyService extends Service { @Override public LatencyRange getEstimatedCaptureLatencyRange( android.hardware.camera2.extension.Size outputSize) { - if (EXTENSIONS_VERSION.startsWith(ADVANCED_VERSION_PREFIX)) { + if (LATENCY_API_SUPPORTED) { Size sz = new Size(outputSize.width, outputSize.height); Range latencyRange = mImageExtender.getEstimatedCaptureLatencyRange(sz); if (latencyRange != null) {