From 0f35c80b00afde5f2a0c302c258f016d92d6c1bd Mon Sep 17 00:00:00 2001 From: Adithya R Date: Sun, 31 Mar 2024 23:47:30 +0300 Subject: [PATCH 1/2] libcameraservice: HAX for depth sensor on ginkgo [2/2] * miui camera uses logical id 61 as depth sensor on portrait mode but oss libcam maps it to physical id 2 which is wrong, our physical id of depth sensor is 20 so we must hack it this way [ghostrider-reborn 2021-10-26] * updated for android 12 [ghostrider-reborn 2022-09-23] * updated for android 13 [garry-rogov 2024-03-31] * updated for android 14 QPR2 Change-Id: I57388d0e00fc21b99427e0c0b1ff9a39926b2243 Signed-off-by: Adithya R Signed-off-by: garry-rogov Signed-off-by: Hirokixd <86230878+Wrdn28@users.noreply.github.com> Signed-off-by: mnasibzade --- .../device3/hidl/HidlCamera3Device.cpp | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/services/camera/libcameraservice/device3/hidl/HidlCamera3Device.cpp b/services/camera/libcameraservice/device3/hidl/HidlCamera3Device.cpp index f507df9bf7..82549e2cde 100644 --- a/services/camera/libcameraservice/device3/hidl/HidlCamera3Device.cpp +++ b/services/camera/libcameraservice/device3/hidl/HidlCamera3Device.cpp @@ -29,6 +29,9 @@ #define CLOGE(fmt, ...) ALOGE("Camera %s: %s: " fmt, mId.c_str(), __FUNCTION__, \ ##__VA_ARGS__) +#define CLOGW(fmt, ...) ALOGW("Camera %s: %s: " fmt, mId.c_str(), __FUNCTION__, \ + ##__VA_ARGS__) + // Convenience macros for transitioning to the error state #define SET_ERR(fmt, ...) setErrorState( \ "%s: " fmt, __FUNCTION__, \ @@ -184,10 +187,19 @@ status_t HidlCamera3Device::initialize(sp manager, physicalId, /*overrideForPerfClass*/false, &mPhysicalDeviceInfoMap[physicalId], hardware::ICameraService::ROTATION_OVERRIDE_NONE); if (res != OK) { - SET_ERR_L("Could not retrieve camera %s characteristics: %s (%d)", + CLOGW("Could not retrieve camera %s characteristics: %s (%d)", physicalId.c_str(), strerror(-res), res); - session->close(); - return res; + // HACK for ginkgo - check camera id 20 for depth sensor + physicalId = "20"; + CLOGW("Trying physical camera %s if available", physicalId.c_str()); + res = manager->getCameraCharacteristics( + physicalId, false, &mPhysicalDeviceInfoMap[physicalId], true); + if (res != OK) { + SET_ERR_L("Could not retrieve camera %s characteristics: %s (%d)", + physicalId.c_str(), strerror(-res), res); + session->close(); + return res; + } } bool usePrecorrectArray = From c7240408f40eea34c30fc3f11a88bf5ac8c68d2c Mon Sep 17 00:00:00 2001 From: Adithya R Date: Sun, 31 Mar 2024 17:19:09 +0300 Subject: [PATCH 2/2] libcameraservice: Add support for miui camera mode * devices like ginkgo and some xiaomi sdm660 use miui camera mode in camera hal to activate certain functions in camera hal, these are enabled when vendor.camera.miui.apk is set to 1 based on sys.camera.miui.apk value * if this prop is set by default gcam crashes, so we must do it dynamically * xiaomi does this in stock libcameraservice but unfortunately we don't have stock android 12 to use prebuilt lib [garry-rogov 2024-03-31] * updated for android 14 QPR2 Signed-off-by: garry-rogov Signed-off-by: Hirokixd <86230878+Wrdn28@users.noreply.github.com> Signed-off-by: mnasibzade --- services/camera/libcameraservice/CameraService.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/services/camera/libcameraservice/CameraService.cpp b/services/camera/libcameraservice/CameraService.cpp index 3a5fafd070..c956dfdfa4 100644 --- a/services/camera/libcameraservice/CameraService.cpp +++ b/services/camera/libcameraservice/CameraService.cpp @@ -40,6 +40,7 @@ #include #include #include +#include #include #include #include @@ -120,6 +121,7 @@ namespace android { using namespace camera3; using namespace camera3::SessionConfigurationUtils; +using base::SetProperty; using binder::Status; using companion::virtualnative::IVirtualDeviceManagerNative; using frameworks::cameraservice::service::V2_0::implementation::HidlCameraService; @@ -4386,6 +4388,15 @@ status_t CameraService::BasicClient::startCameraOps() { mOpsActive = true; + // Configure miui camera mode + if (strcmp(mClientPackageName.c_str(), "com.android.camera") == 0) { + SetProperty("sys.camera.miui.apk", "1"); + ALOGI("Enabling miui camera mode"); + } else { + SetProperty("sys.camera.miui.apk", "0"); + ALOGI("Disabling miui camera mode"); + } + // Transition device availability listeners from PRESENT -> NOT_AVAILABLE sCameraService->updateStatus(StatusInternal::NOT_AVAILABLE, mCameraIdStr);