From ffaa2a236b40e29fca4372a0fba6964f312002c4 Mon Sep 17 00:00:00 2001 From: Ravneet Date: Tue, 3 May 2022 02:30:20 +0000 Subject: [PATCH] CameraManager: Add path to update vendorTag info upon HAL update - Add setupVendorTag to onStatusChanged callback to update vendor tag information upon status changes in case HAL does not load the vendorTag information during connect Bug: 181579423 Test: Manual; GCA Validity check; Removed setUpVendorTag in enumerateProviders to force initial vendorTag info update using onStatusChanged Change-Id: I8d8c00159d49a13a7b5bbc9b26a2b474fc99aee4 --- core/java/android/hardware/camera2/CameraManager.java | 8 ++++++++ core/jni/android_hardware_camera2_CameraMetadata.cpp | 9 ++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/core/java/android/hardware/camera2/CameraManager.java b/core/java/android/hardware/camera2/CameraManager.java index d6d3a97687b5c..c0c403ac3821c 100644 --- a/core/java/android/hardware/camera2/CameraManager.java +++ b/core/java/android/hardware/camera2/CameraManager.java @@ -2200,6 +2200,14 @@ public final class CameraManager { return; } + // Setup vendor tag on status change in case it was not set correctly + // during connect due to issues in HAL + try { + CameraMetadataNative.setupGlobalVendorTagDescriptor(); + } catch (ServiceSpecificException e) { + handleRecoverableSetupErrors(e); + } + Integer oldStatus; if (status == ICameraServiceListener.STATUS_NOT_PRESENT) { oldStatus = mDeviceStatus.remove(id); diff --git a/core/jni/android_hardware_camera2_CameraMetadata.cpp b/core/jni/android_hardware_camera2_CameraMetadata.cpp index 5293c583cfd0e..d89ae4fa2fb1e 100644 --- a/core/jni/android_hardware_camera2_CameraMetadata.cpp +++ b/core/jni/android_hardware_camera2_CameraMetadata.cpp @@ -947,8 +947,15 @@ static jint CameraMetadata_setupGlobalVendorTagDescriptor(JNIEnv *env, jclass th return hardware::ICameraService::ERROR_DISCONNECTED; } + binder::Status res = cameraService->setUpVendorTags(); + if (!res.isOk()) { + ALOGE("%s: Failed to setup vendor tags for camera providers: %s", __FUNCTION__, + res.toString8().string()); + return res.serviceSpecificErrorCode(); + } + sp desc = new VendorTagDescriptor(); - binder::Status res = cameraService->getCameraVendorTagDescriptor(/*out*/desc.get()); + res = cameraService->getCameraVendorTagDescriptor(/*out*/ desc.get()); if (res.serviceSpecificErrorCode() == hardware::ICameraService::ERROR_DISCONNECTED) { // No camera module available, not an error on devices with no cameras