RM6785: Add libcamera_metadata shim for stripping out system camera cap
Change-Id: I8f7772fc9ec15a00c4b630866aa7fc162a52c1aa
Signed-off-by: SamarV-121 <samarvispute121@pm.me>
diff --git a/device.mk b/device.mk
index 0632a51..456987d 100644
--- a/device.mk
+++ b/device.mk
@@ -52,6 +52,9 @@
android.hardware.camera.device@3.6.vendor:64 \
android.hardware.camera.provider@2.6.vendor:64
+PRODUCT_PACKAGES += \
+ libshim_camera_metadata
+
# Charger
PRODUCT_PACKAGES += \
charger_res_images_vendor
diff --git a/extract-files.sh b/extract-files.sh
index 9c38af6..21faee2 100755
--- a/extract-files.sh
+++ b/extract-files.sh
@@ -48,6 +48,9 @@
vendor/lib/hw/audio.usb.mt6785.so)
"$PATCHELF" --replace-needed "libalsautils.so" "libalsautils-v30.so" "$2"
;;
+ vendor/lib64/hw/android.hardware.camera.provider@2.6-impl-mediatek.so)
+ grep -q libshim_camera_metadata.so "$2" || "$PATCHELF" --add-needed libshim_camera_metadata.so "$2"
+ ;;
vendor/lib64/libmtkcam_stdutils.so)
"$PATCHELF" --replace-needed "libutils.so" "libutils-v30.so" "$2"
;;
diff --git a/libshims/Android.bp b/libshims/Android.bp
new file mode 100644
index 0000000..d6f813a
--- /dev/null
+++ b/libshims/Android.bp
@@ -0,0 +1,12 @@
+//
+// Copyright (C) 2022 The LineageOS Project
+//
+// SPDX-License-Identifier: Apache-2.0
+//
+
+cc_library {
+ name: "libshim_camera_metadata",
+ shared_libs: ["libcamera_metadata"],
+ srcs: ["libshim_camera_metadata.cpp"],
+ vendor: true
+}
diff --git a/libshims/libshim_camera_metadata.cpp b/libshims/libshim_camera_metadata.cpp
new file mode 100644
index 0000000..95107c9
--- /dev/null
+++ b/libshims/libshim_camera_metadata.cpp
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2022 The LineageOS Project
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+#include <dlfcn.h>
+#include <system/camera_metadata.h>
+#include <vector>
+
+extern "C" int add_camera_metadata_entry(camera_metadata_t* dst, uint32_t tag, const void* data,
+ size_t data_count) {
+ static auto add_camera_metadata_entry_orig =
+ reinterpret_cast<typeof(add_camera_metadata_entry)*>(
+ dlsym(RTLD_NEXT, "add_camera_metadata_entry"));
+
+ if (tag == ANDROID_REQUEST_AVAILABLE_CAPABILITIES) {
+ std::vector<uint8_t> caps;
+ auto u8 = reinterpret_cast<const uint8_t*>(data);
+
+ for (size_t i = 0; i < data_count; i++) {
+ if (u8[i] != ANDROID_REQUEST_AVAILABLE_CAPABILITIES_SYSTEM_CAMERA) {
+ caps.emplace_back(u8[i]);
+ }
+ }
+
+ return add_camera_metadata_entry_orig(dst, tag, caps.data(), caps.size());
+ }
+
+ return add_camera_metadata_entry_orig(dst, tag, data, data_count);
+}