aidl: camera: provider: Allow exposing additional camera IDs
authorTim Zimmermann <tim@linux4.de>
Tue, 28 May 2024 03:47:50 +0000 (05:47 +0200)
committerTim Zimmermann <tim@linux4.de>
Fri, 21 Jun 2024 16:04:37 +0000 (18:04 +0200)
* Move the soong configs here, since HIDL is deprecated

Change-Id: I34b82250b457f40b2be27ee976149de17a3b4e9f

aidl/camera/provider/Android.bp
aidl/camera/provider/CameraProvider.cpp
aidl/camera/provider/CameraProvider.h
hidl/camera/provider/2.5/Android.bp

index 1c223f040436d5edbb39240ba482815f66988144..b1c8aa29136e606a111e5cf96ec1701d32eede19 100644 (file)
@@ -4,9 +4,29 @@
 // SPDX-License-Identifier: Apache-2.0
 //
 
+soong_config_module_type {
+    name: "extra_ids",
+    module_type: "cc_defaults",
+    config_namespace: "samsungCameraVars",
+    value_variables: ["extra_ids"],
+    properties: ["cppflags"],
+}
+
+extra_ids {
+    name: "extra_id_defaults",
+    soong_config_variables: {
+        extra_ids: {
+            cppflags: ["-DEXTRA_IDS=%s"],
+        },
+    },
+}
+
 cc_binary {
     name: "android.hardware.camera.provider-service.samsung",
-    defaults: ["samsung_camera3_defaults"],
+    defaults: [
+        "extra_id_defaults",
+        "samsung_camera3_defaults"
+    ],
     init_rc: ["android.hardware.camera.provider-service.samsung.rc"],
     vintf_fragments: ["android.hardware.camera.provider-service.samsung.xml"],
     vendor: true,
index 8487201ac60b8720055ee6e0c385c68661dfe30f..329c34b1641434ccb8b4f59e9b9cdd04983f2723 100644 (file)
@@ -158,6 +158,29 @@ CameraProvider::CameraProvider()
 
 CameraProvider::~CameraProvider() {}
 
+bool CameraProvider::initCamera(int id) {
+    struct camera_info info;
+    auto rc = mModule->getCameraInfo(id, &info);
+    if (rc != NO_ERROR) {
+        ALOGE("%s: Camera info query failed!", __func__);
+        return true;
+    }
+
+    if (checkCameraVersion(id, info) != OK) {
+        ALOGE("%s: Camera version check failed!", __func__);
+        return true;
+    }
+
+    char cameraId[kMaxCameraIdLen];
+    snprintf(cameraId, sizeof(cameraId), "%d", id);
+    std::string cameraIdStr(cameraId);
+    mCameraStatusMap[cameraIdStr] = CAMERA_DEVICE_STATUS_PRESENT;
+
+    addDeviceNames(id);
+
+    return false;
+}
+
 bool CameraProvider::initialize() {
     camera_module_t* rawModule;
     int err = hw_get_module(CAMERA_HARDWARE_MODULE_ID, (const hw_module_t**)&rawModule);
@@ -191,26 +214,23 @@ bool CameraProvider::initialize() {
 
     mNumberOfLegacyCameras = mModule->getNumberOfCameras();
     for (int i = 0; i < mNumberOfLegacyCameras; i++) {
-        struct camera_info info;
-        auto rc = mModule->getCameraInfo(i, &info);
-        if (rc != NO_ERROR) {
-            ALOGE("%s: Camera info query failed!", __func__);
+        if (initCamera(i)) {
             mModule.clear();
             return true;
         }
-
-        if (checkCameraVersion(i, info) != OK) {
-            ALOGE("%s: Camera version check failed!", __func__);
+    }
+    std::vector<int> extraIDs = {
+#ifdef EXTRA_IDS
+        EXTRA_IDS
+#endif
+    };
+    for (int i : extraIDs) {
+        if (initCamera(i)) {
             mModule.clear();
             return true;
+        } else {
+            mNumberOfLegacyCameras++;
         }
-
-        char cameraId[kMaxCameraIdLen];
-        snprintf(cameraId, sizeof(cameraId), "%d", i);
-        std::string cameraIdStr(cameraId);
-        mCameraStatusMap[cameraIdStr] = CAMERA_DEVICE_STATUS_PRESENT;
-
-        addDeviceNames(i);
     }
 
     return false;  // mInitFailed
index cedc2df31aca495960a03ab185a26d402467056e..411b3317db766e586b6f1ccf6cbcabc04c1eb2ed 100644 (file)
@@ -65,6 +65,7 @@ class CameraProvider : public BnCameraProvider, protected camera_module_callback
     // Must be queried before using any APIs.
     // APIs will only work when this returns true
     bool mInitFailed;
+    bool initCamera(int id);
     bool initialize();
 
     std::vector<VendorTagSection> mVendorTagSections;
index dc708520e38c6d83d1a3dc273f19ea05561a23ba..4ed98ae00db5d9f19a349b0b4ec3ee6263916c90 100644 (file)
@@ -1,20 +1,3 @@
-soong_config_module_type {
-    name: "extra_ids",
-    module_type: "cc_defaults",
-    config_namespace: "samsungCameraVars",
-    value_variables: ["extra_ids"],
-    properties: ["cppflags"],
-}
-
-extra_ids {
-    name: "extra_id_defaults",
-    soong_config_variables: {
-        extra_ids: {
-            cppflags: ["-DEXTRA_IDS=%s"],
-        },
-    },
-}
-
 cc_library_shared {
     name: "android.hardware.camera.provider@2.5-legacy.samsung",
     defaults: ["extra_id_defaults"],