From b33856abbce8ba940c24d2a7a07a3c6e4e4c96d4 Mon Sep 17 00:00:00 2001
From: oxmc <67136658+oxmc@users.noreply.github.com>
Date: Sun, 2 Nov 2025 21:27:23 -0800
Subject: [PATCH] Switch camera and minigbm gralloc to apex, same as upstream
---
camera/external/Android.bp | 34 +++++++++++++++++++
...are.camera.provider-V1-external-service.rc | 8 +++++
...re.camera.provider-V1-external-service.xml | 10 ++++++
camera/external/apex_file_contexts | 3 ++
camera/external/apex_manifest.json | 4 +++
.../{ => external}/external_camera_config.xml | 0
camera/{ => libcamera}/camera_hal.yaml | 0
device.mk | 19 ++++-------
manifest.xml | 9 -----
sepolicy/file_contexts | 28 +++++++--------
suspend_blocker/suspend_blocker_rpi.rc | 2 +-
11 files changed, 80 insertions(+), 37 deletions(-)
create mode 100644 camera/external/Android.bp
create mode 100644 camera/external/android.hardware.camera.provider-V1-external-service.rc
create mode 100644 camera/external/android.hardware.camera.provider-V1-external-service.xml
create mode 100644 camera/external/apex_file_contexts
create mode 100644 camera/external/apex_manifest.json
rename camera/{ => external}/external_camera_config.xml (100%)
rename camera/{ => libcamera}/camera_hal.yaml (100%)
diff --git a/camera/external/Android.bp b/camera/external/Android.bp
new file mode 100644
index 0000000..bb45262
--- /dev/null
+++ b/camera/external/Android.bp
@@ -0,0 +1,34 @@
+// Copyright (C) 2025 KonstaKANG
+//
+// SPDX-License-Identifier: Apache-2.0
+
+prebuilt_etc {
+ name: "android.hardware.camera.provider-V1-external-service.rc",
+ src: "android.hardware.camera.provider-V1-external-service.rc",
+ installable: false,
+}
+
+prebuilt_etc {
+ name: "android.hardware.camera.provider-V1-external-service.xml",
+ src: "android.hardware.camera.provider-V1-external-service.xml",
+ sub_dir: "vintf",
+ installable: false,
+}
+
+apex {
+ name: "com.android.hardware.camera.external.rpi5",
+ manifest: "apex_manifest.json",
+ file_contexts: "apex_file_contexts",
+ key: "com.android.hardware.key",
+ certificate: ":com.android.hardware.certificate",
+ updatable: false,
+ vendor: true,
+
+ binaries: [
+ "android.hardware.camera.provider-V1-external-service",
+ ],
+ prebuilts: [
+ "android.hardware.camera.provider-V1-external-service.rc",
+ "android.hardware.camera.provider-V1-external-service.xml",
+ ],
+}
\ No newline at end of file
diff --git a/camera/external/android.hardware.camera.provider-V1-external-service.rc b/camera/external/android.hardware.camera.provider-V1-external-service.rc
new file mode 100644
index 0000000..c0ef1e0
--- /dev/null
+++ b/camera/external/android.hardware.camera.provider-V1-external-service.rc
@@ -0,0 +1,8 @@
+service vendor.camera.provider-ext /apex/com.android.hardware.camera.external.rpi5/bin/hw/android.hardware.camera.provider-V1-external-service
+ interface aidl android.hardware.camera.provider.ICameraProvider/external/0
+ class hal
+ user cameraserver
+ group audio camera input drmrpc usb
+ ioprio rt 4
+ capabilities SYS_NICE
+ task_profiles CameraServiceCapacity MaxPerformance
\ No newline at end of file
diff --git a/camera/external/android.hardware.camera.provider-V1-external-service.xml b/camera/external/android.hardware.camera.provider-V1-external-service.xml
new file mode 100644
index 0000000..7ada72a
--- /dev/null
+++ b/camera/external/android.hardware.camera.provider-V1-external-service.xml
@@ -0,0 +1,10 @@
+
+
+ android.hardware.camera.provider
+ 1
+
+ ICameraProvider
+ external/0
+
+
+
\ No newline at end of file
diff --git a/camera/external/apex_file_contexts b/camera/external/apex_file_contexts
new file mode 100644
index 0000000..0b85201
--- /dev/null
+++ b/camera/external/apex_file_contexts
@@ -0,0 +1,3 @@
+(/.*)? u:object_r:vendor_file:s0
+/etc(/.*)? u:object_r:vendor_configs_file:s0
+/bin/hw/android\.hardware\.camera\.provider-V1-external-service u:object_r:hal_camera_default_exec:s0
\ No newline at end of file
diff --git a/camera/external/apex_manifest.json b/camera/external/apex_manifest.json
new file mode 100644
index 0000000..3fb75c0
--- /dev/null
+++ b/camera/external/apex_manifest.json
@@ -0,0 +1,4 @@
+{
+ "name": "com.android.hardware.camera.external.rpi5",
+ "version": 1
+}
\ No newline at end of file
diff --git a/camera/external_camera_config.xml b/camera/external/external_camera_config.xml
similarity index 100%
rename from camera/external_camera_config.xml
rename to camera/external/external_camera_config.xml
diff --git a/camera/camera_hal.yaml b/camera/libcamera/camera_hal.yaml
similarity index 100%
rename from camera/camera_hal.yaml
rename to camera/libcamera/camera_hal.yaml
diff --git a/device.mk b/device.mk
index 782014c..f8c0c9e 100644
--- a/device.mk
+++ b/device.mk
@@ -52,21 +52,21 @@ PRODUCT_COPY_FILES += \
# Camera
PRODUCT_PACKAGES += \
- android.hardware.camera.provider-V1-external-service
+ com.android.hardware.camera.external.rpi5
PRODUCT_COPY_FILES += \
- $(DEVICE_PATH)/camera/external_camera_config.xml:$(TARGET_COPY_OUT_VENDOR)/etc/external_camera_config.xml
+ $(DEVICE_PATH)/camera/external/external_camera_config.xml:$(TARGET_COPY_OUT_VENDOR)/etc/external_camera_config.xml
PRODUCT_COPY_FILES += \
frameworks/native/data/etc/android.hardware.camera.external.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.camera.external.xml
PRODUCT_PACKAGES += \
- android.hardware.camera.provider-V1-libcamera-service \
- camera.libcamera \
- ipa_rpi_pisp
+ acom.android.hardware.camera.libcamera
+
+$(call soong_config_set,libcamera,ipa,pisp)
PRODUCT_COPY_FILES += \
- $(DEVICE_PATH)/camera/camera_hal.yaml:$(TARGET_COPY_OUT_VENDOR)/etc/libcamera/camera_hal.yaml
+ $(DEVICE_PATH)/camera/libcamera/camera_hal.yaml:$(TARGET_COPY_OUT_VENDOR)/etc/libcamera/camera_hal.yaml
PRODUCT_COPY_FILES += \
frameworks/native/data/etc/android.hardware.camera.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.camera.xml \
@@ -116,8 +116,7 @@ PRODUCT_PACKAGES += \
# Graphics
PRODUCT_PACKAGES += \
- android.hardware.graphics.allocator-service.minigbm_gbm_mesa \
- mapper.minigbm_gbm_mesa
+ com.android.hardware.graphics.allocator.minigbm_gbm_mesa
PRODUCT_PACKAGES += \
com.android.hardware.graphics.composer.drm_hwcomposer
@@ -128,10 +127,6 @@ PRODUCT_PACKAGES += \
libGLESv2_mesa \
libgallium_dri
-PRODUCT_PACKAGES += \
- dri_gbm \
- libgbm_mesa
-
PRODUCT_COPY_FILES += \
frameworks/native/data/etc/android.software.opengles.deqp.level-2024-03-01.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.software.opengles.deqp.level.xml
diff --git a/manifest.xml b/manifest.xml
index f71c1a8..3d01ce9 100644
--- a/manifest.xml
+++ b/manifest.xml
@@ -17,13 +17,4 @@
default
-
- android.hardware.camera.provider
- 1
-
- ICameraProvider
- external/0
- libcamera/0
-
-
diff --git a/sepolicy/file_contexts b/sepolicy/file_contexts
index 81ee882..854ce97 100644
--- a/sepolicy/file_contexts
+++ b/sepolicy/file_contexts
@@ -1,6 +1,3 @@
-# Camera
-/vendor/bin/hw/android\.hardware\.camera\.provider-V1-libcamera-service u:object_r:hal_camera_default_exec:s0
-
# CEC
/dev/cec0 u:object_r:cec_device:s0
/dev/cec1 u:object_r:cec_device:s0
@@ -9,21 +6,22 @@
/data/vendor/mediadrm(/.*)? u:object_r:mediadrm_vendor_data_file:s0
# Graphics
-/dev/dri(/.*)? u:object_r:gpu_device:s0
-/vendor/bin/hw/android\.hardware\.graphics\.allocator-service\.minigbm_gbm_mesa u:object_r:hal_graphics_allocator_default_exec:s0
-/vendor/lib64/hw/mapper\.minigbm_gbm_mesa\.so u:object_r:same_process_hal_file:s0
-/vendor/lib64/hw/vulkan\.broadcom\.so u:object_r:same_process_hal_file:s0
-/vendor/lib64/dri_gbm\.so u:object_r:same_process_hal_file:s0
-/vendor/lib64/libdrm\.so u:object_r:same_process_hal_file:s0
-/vendor/lib64/libgallium_dri\.so u:object_r:same_process_hal_file:s0
-/vendor/lib64/libgbm_mesa\.so u:object_r:same_process_hal_file:s0
-/vendor/lib64/libgbm_mesa_wrapper\.so u:object_r:same_process_hal_file:s0
-/vendor/lib64/libminigbm_gralloc_gbm_mesa\.so u:object_r:same_process_hal_file:s0
-/vendor/lib64/libminigbm_gralloc4_utils_gbm_mesa\.so u:object_r:same_process_hal_file:s0
-/vendor/lib64/libui\.so u:object_r:same_process_hal_file:s0
+/dev/dri(/.*)? u:object_r:gpu_device:s0
+/vendor/lib64/hw/vulkan\.broadcom\.so u:object_r:same_process_hal_file:s0
+/vendor/lib64/libdrm\.so u:object_r:same_process_hal_file:s0
+/vendor/lib64/libgallium_dri\.so u:object_r:same_process_hal_file:s0
+/vendor/lib64/libui\.so u:object_r:same_process_hal_file:s0
# Partitions
/dev/block/mmcblk0p1 u:object_r:boot_block_device:s0
/dev/block/mmcblk0p2 u:object_r:system_block_device:s0
/dev/block/mmcblk0p3 u:object_r:system_block_device:s0
/dev/block/mmcblk0p4 u:object_r:userdata_block_device:s0
+/dev/block/nvme0n1p1 u:object_r:boot_block_device:s0
+/dev/block/nvme0n1p2 u:object_r:system_block_device:s0
+/dev/block/nvme0n1p3 u:object_r:system_block_device:s0
+/dev/block/nvme0n1p4 u:object_r:userdata_block_device:s0
+/dev/block/sda1 u:object_r:boot_block_device:s0
+/dev/block/sda2 u:object_r:system_block_device:s0
+/dev/block/sda3 u:object_r:system_block_device:s0
+/dev/block/sda4 u:object_r:userdata_block_device:s0
\ No newline at end of file
diff --git a/suspend_blocker/suspend_blocker_rpi.rc b/suspend_blocker/suspend_blocker_rpi.rc
index a0969d5..2e34ad8 100644
--- a/suspend_blocker/suspend_blocker_rpi.rc
+++ b/suspend_blocker/suspend_blocker_rpi.rc
@@ -1,4 +1,4 @@
-service suspend_blocker_rpi /apex/com.android.hardware.suspend_blocker.rpi5/bin/suspend_blocker_rpi
+service vendor.suspend_blocker-rpi /apex/com.android.hardware.suspend_blocker.rpi5/bin/suspend_blocker_rpi
class hal
group system
user root