hidl: camera: provider: Allow exposing additional camera IDs
authorTim Zimmermann <tim@linux4.de>
Sun, 29 Oct 2023 11:41:41 +0000 (12:41 +0100)
committerTim Zimmermann <tim@linux4.de>
Sat, 20 Jan 2024 12:52:29 +0000 (13:52 +0100)
Change-Id: Ia83eaba213a91be53a621849fe9a1e0343d10bfa

hidl/camera/provider/2.5/Android.bp
hidl/camera/provider/2.5/SamsungCameraProvider.cpp [new file with mode: 0644]
hidl/camera/provider/2.5/SamsungCameraProvider.h [new file with mode: 0644]
hidl/camera/provider/2.5/service.cpp [changed from symlink to file mode: 0644]

index 1c690a316c91358644cb71fa36ea8c50ec4c8959..519badd48ea8d7d39ef1037f67f77704491d9f25 100644 (file)
@@ -1,7 +1,28 @@
+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"],
     proprietary: true,
-    srcs: ["LegacyCameraProviderImpl_2_5.cpp"],
+    srcs: [
+        "LegacyCameraProviderImpl_2_5.cpp",
+        "SamsungCameraProvider.cpp",
+    ],
     shared_libs: [
         "android.hardware.camera.common@1.0",
         "android.hardware.camera.device@1.0",
diff --git a/hidl/camera/provider/2.5/SamsungCameraProvider.cpp b/hidl/camera/provider/2.5/SamsungCameraProvider.cpp
new file mode 100644 (file)
index 0000000..a68bdc6
--- /dev/null
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2021-2023 The LineageOS Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#define LOG_TAG "SamsungCameraProvider@2.5"
+
+#include "SamsungCameraProvider.h"
+
+#include <algorithm>
+
+using ::android::NO_ERROR;
+using ::android::OK;
+
+const int kMaxCameraIdLen = 16;
+
+SamsungCameraProvider::SamsungCameraProvider() : LegacyCameraProviderImpl_2_5() {
+    if (!mInitFailed) {
+        for (int i : mExtraIDs) {
+            struct camera_info info;
+            auto rc = mModule->getCameraInfo(i, &info);
+
+            if (rc != NO_ERROR) {
+                continue;
+            }
+
+            if (checkCameraVersion(i, info) != OK) {
+                ALOGE("Camera version check failed!");
+                mModule.clear();
+                mInitFailed = true;
+                return;
+            }
+
+#ifdef SAMSUNG_CAMERA_DEBUG
+            ALOGI("ID=%d is at index %d", i, mNumberOfLegacyCameras);
+#endif
+
+            char cameraId[kMaxCameraIdLen];
+            snprintf(cameraId, sizeof(cameraId), "%d", i);
+            std::string cameraIdStr(cameraId);
+            mCameraStatusMap[cameraIdStr] = CAMERA_DEVICE_STATUS_PRESENT;
+
+            addDeviceNames(i);
+            mNumberOfLegacyCameras++;
+        }
+    }
+}
+
+SamsungCameraProvider::~SamsungCameraProvider() {}
diff --git a/hidl/camera/provider/2.5/SamsungCameraProvider.h b/hidl/camera/provider/2.5/SamsungCameraProvider.h
new file mode 100644 (file)
index 0000000..ec21b9b
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2021 The LineageOS Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef SAMSUNG_CAMERA_PROVIDER_H
+
+#include "LegacyCameraProviderImpl_2_5.h"
+
+#define SAMSUNG_CAMERA_DEBUG
+
+using ::android::hardware::camera::provider::V2_5::implementation::LegacyCameraProviderImpl_2_5;
+using ::android::hardware::Return;
+
+class SamsungCameraProvider : public LegacyCameraProviderImpl_2_5 {
+public:
+    SamsungCameraProvider();
+    ~SamsungCameraProvider();
+
+private:
+    std::vector<int> mExtraIDs = {
+#ifdef EXTRA_IDS
+        EXTRA_IDS
+#endif
+    };
+};
+
+#endif // SAMSUNG_CAMERA_PROVIDER_H
deleted file mode 120000 (symlink)
index 494848965f3d556b66ab7b74b021f216690ab488..0000000000000000000000000000000000000000
+++ /dev/null
@@ -1 +0,0 @@
-../../../../../../hardware/interfaces/camera/provider/2.5/default/service.cpp
\ No newline at end of file
new file mode 100644 (file)
index 0000000000000000000000000000000000000000..4a6979cbde07d6f408e7abfa9cf17e688f239ecb
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2019 The Android Open Source Project
+ * Copyright 2021 The LineageOS Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#define LOG_TAG "android.hardware.camera.provider@2.5-service.samsung"
+
+#include <android/hardware/camera/provider/2.5/ICameraProvider.h>
+#include <binder/ProcessState.h>
+#include <hidl/HidlLazyUtils.h>
+#include <hidl/HidlTransportSupport.h>
+
+#include "CameraProvider_2_5.h"
+#include "SamsungCameraProvider.h"
+
+using android::status_t;
+using android::hardware::camera::provider::V2_5::ICameraProvider;
+
+int main()
+{
+    using namespace android::hardware::camera::provider::V2_5::implementation;
+
+    ALOGI("CameraProvider@2.5 legacy service is starting.");
+
+    ::android::hardware::configureRpcThreadpool(/*threads*/ HWBINDER_THREAD_COUNT, /*willJoin*/ true);
+
+    ::android::sp<ICameraProvider> provider = new CameraProvider<SamsungCameraProvider>();
+
+    status_t status = provider->registerAsService("legacy/0");
+    LOG_ALWAYS_FATAL_IF(status != android::OK, "Error while registering provider service: %d",
+            status);
+
+    ::android::hardware::joinRpcThreadpool();
+
+    return 0;
+}