Merge "Camera: Update the advanced extension version checks" into tm-dev

This commit is contained in:
TreeHugger Robot
2022-06-14 22:28:09 +00:00
committed by Android (Google) Code Review

View File

@@ -124,15 +124,21 @@ public class CameraExtensionsProxyService extends Service {
private static final String CAMERA_EXTENSION_VERSION_NAME = private static final String CAMERA_EXTENSION_VERSION_NAME =
"androidx.camera.extensions.impl.ExtensionVersionImpl"; "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"; 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"; 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 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, private static final String[] SUPPORTED_VERSION_PREFIXES = {RESULTS_VERSION_PREFIX,
ADVANCED_VERSION_PREFIX, "1.1", NON_INIT_VERSION_PREFIX}; ADVANCED_VERSION_PREFIX, "1.1", NON_INIT_VERSION_PREFIX};
private static final boolean EXTENSIONS_PRESENT = checkForExtensions(); private static final boolean EXTENSIONS_PRESENT = checkForExtensions();
private static final String EXTENSIONS_VERSION = EXTENSIONS_PRESENT ? private static final String EXTENSIONS_VERSION = EXTENSIONS_PRESENT ?
(new ExtensionVersionImpl()).checkApiVersion(LATEST_VERSION) : null; (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 ADVANCED_API_SUPPORTED = checkForAdvancedAPI();
private static final boolean INIT_API_SUPPORTED = EXTENSIONS_PRESENT && private static final boolean INIT_API_SUPPORTED = EXTENSIONS_PRESENT &&
(!EXTENSIONS_VERSION.startsWith(NON_INIT_VERSION_PREFIX)); (!EXTENSIONS_VERSION.startsWith(NON_INIT_VERSION_PREFIX));
@@ -143,19 +149,35 @@ public class CameraExtensionsProxyService extends Service {
private HashMap<String, Long> mMetadataVendorIdMap = new HashMap<>(); private HashMap<String, Long> mMetadataVendorIdMap = new HashMap<>();
private CameraManager mCameraManager; private CameraManager mCameraManager;
private static boolean checkForAdvancedAPI() { private static boolean checkForLatencyAPI() {
if (EXTENSIONS_PRESENT && EXTENSIONS_VERSION.startsWith(ADVANCED_VERSION_PREFIX)) { if (!EXTENSIONS_PRESENT) {
try { return false;
return (new ExtensionVersionImpl()).isAdvancedExtenderImplemented(); }
} catch (NoSuchMethodError e) {
// This could happen in case device specific extension implementations are using an for (String advancedVersions : ADVANCED_VERSION_PREFIXES) {
// older extension API but incorrectly set the extension version. if (EXTENSIONS_VERSION.startsWith(advancedVersions)) {
return true;
} }
} }
return false; 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() { private static boolean checkForExtensions() {
try { try {
Class.forName(CAMERA_EXTENSION_VERSION_NAME); Class.forName(CAMERA_EXTENSION_VERSION_NAME);
@@ -292,7 +314,7 @@ public class CameraExtensionsProxyService extends Service {
if (INIT_API_SUPPORTED) { if (INIT_API_SUPPORTED) {
if (mActiveClients.isEmpty()) { if (mActiveClients.isEmpty()) {
InitializerFuture status = new InitializerFuture(); InitializerFuture status = new InitializerFuture();
InitializerImpl.init(EXTENSIONS_VERSION, ctx, new InitializeHandler(status), InitializerImpl.init(LATEST_VERSION, ctx, new InitializeHandler(status),
new HandlerExecutor(mHandler)); new HandlerExecutor(mHandler));
boolean initSuccess; boolean initSuccess;
try { try {
@@ -1447,7 +1469,7 @@ public class CameraExtensionsProxyService extends Service {
@Override @Override
public LatencyRange getEstimatedCaptureLatencyRange( public LatencyRange getEstimatedCaptureLatencyRange(
android.hardware.camera2.extension.Size outputSize) { 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); Size sz = new Size(outputSize.width, outputSize.height);
Range<Long> latencyRange = mImageExtender.getEstimatedCaptureLatencyRange(sz); Range<Long> latencyRange = mImageExtender.getEstimatedCaptureLatencyRange(sz);
if (latencyRange != null) { if (latencyRange != null) {