+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",
--- /dev/null
+/*
+ * 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() {}
--- /dev/null
+/*
+ * 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
+++ /dev/null
-../../../../../../hardware/interfaces/camera/provider/2.5/default/service.cpp
\ No newline at end of file
--- /dev/null
+/*
+ * 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;
+}