From 1cff1a363e169b9d8df62cec90cca2e103731b8b Mon Sep 17 00:00:00 2001 From: Dean Lee Date: Wed, 19 Feb 2025 13:13:04 +0800 Subject: [PATCH] camerad: simplify SpectraBuf::init by reducing redundant flags (#34618) refactor init --- system/camerad/cameras/spectra.cc | 40 ++++++++----------------------- system/camerad/cameras/spectra.h | 8 ++++++- 2 files changed, 17 insertions(+), 31 deletions(-) diff --git a/system/camerad/cameras/spectra.cc b/system/camerad/cameras/spectra.cc index 9a4a6f3545..c4e41d62b3 100644 --- a/system/camerad/cameras/spectra.cc +++ b/system/camerad/cameras/spectra.cc @@ -1143,26 +1143,18 @@ void SpectraCamera::configISP() { LOGD("acquire isp dev"); // allocate IFE memory, then configure it - ife_cmd.init(m, 67984, 0x20, - CAM_MEM_FLAG_HW_READ_WRITE | CAM_MEM_FLAG_KMD_ACCESS | CAM_MEM_FLAG_UMD_ACCESS | CAM_MEM_FLAG_CMD_BUF_TYPE, - m->device_iommu, m->cdm_iommu, ife_buf_depth); + ife_cmd.init(m, 67984, 0x20, false, m->device_iommu, m->cdm_iommu, ife_buf_depth); if (output_type == ISP_IFE_PROCESSED) { assert(sensor->gamma_lut_rgb.size() == 64); - ife_gamma_lut.init(m, sensor->gamma_lut_rgb.size()*sizeof(uint32_t), 0x20, - CAM_MEM_FLAG_HW_READ_WRITE | CAM_MEM_FLAG_KMD_ACCESS | CAM_MEM_FLAG_UMD_ACCESS | CAM_MEM_FLAG_CMD_BUF_TYPE, - m->device_iommu, m->cdm_iommu, 3); // 3 for RGB + ife_gamma_lut.init(m, sensor->gamma_lut_rgb.size()*sizeof(uint32_t), 0x20, false, m->device_iommu, m->cdm_iommu, 3); // 3 for RGB for (int i = 0; i < 3; i++) { memcpy(ife_gamma_lut.ptr + ife_gamma_lut.size*i, sensor->gamma_lut_rgb.data(), ife_gamma_lut.size); } assert(sensor->linearization_lut.size() == 36); - ife_linearization_lut.init(m, sensor->linearization_lut.size()*sizeof(uint32_t), 0x20, - CAM_MEM_FLAG_HW_READ_WRITE | CAM_MEM_FLAG_KMD_ACCESS | CAM_MEM_FLAG_UMD_ACCESS | CAM_MEM_FLAG_CMD_BUF_TYPE, - m->device_iommu, m->cdm_iommu); + ife_linearization_lut.init(m, sensor->linearization_lut.size()*sizeof(uint32_t), 0x20, false, m->device_iommu, m->cdm_iommu); memcpy(ife_linearization_lut.ptr, sensor->linearization_lut.data(), ife_linearization_lut.size); assert(sensor->vignetting_lut.size() == 221); - ife_vignetting_lut.init(m, sensor->vignetting_lut.size()*sizeof(uint32_t), 0x20, - CAM_MEM_FLAG_HW_READ_WRITE | CAM_MEM_FLAG_KMD_ACCESS | CAM_MEM_FLAG_UMD_ACCESS | CAM_MEM_FLAG_CMD_BUF_TYPE, - m->device_iommu, m->cdm_iommu, 2); + ife_vignetting_lut.init(m, sensor->vignetting_lut.size()*sizeof(uint32_t), 0x20, false, m->device_iommu, m->cdm_iommu, 2); for (int i = 0; i < 2; i++) { memcpy(ife_vignetting_lut.ptr + ife_vignetting_lut.size*i, sensor->vignetting_lut.data(), ife_vignetting_lut.size); } @@ -1212,40 +1204,28 @@ void SpectraCamera::configICP() { release(m->video0_fd, cfg_handle); // BPS has a lot of buffers to init - bps_cmd.init(m, 464, 0x20, - CAM_MEM_FLAG_HW_READ_WRITE | CAM_MEM_FLAG_KMD_ACCESS | CAM_MEM_FLAG_UMD_ACCESS | CAM_MEM_FLAG_CMD_BUF_TYPE | CAM_MEM_FLAG_HW_SHARED_ACCESS, - m->icp_device_iommu, 0, ife_buf_depth); + bps_cmd.init(m, 464, 0x20, true, m->icp_device_iommu, 0, ife_buf_depth); // BPSIQSettings struct uint32_t settings_size = sizeof(bps_settings[0]) / sizeof(bps_settings[0][0]); - bps_iq.init(m, settings_size, 0x20, - CAM_MEM_FLAG_HW_READ_WRITE | CAM_MEM_FLAG_KMD_ACCESS | CAM_MEM_FLAG_UMD_ACCESS | CAM_MEM_FLAG_CMD_BUF_TYPE | CAM_MEM_FLAG_HW_SHARED_ACCESS, - m->icp_device_iommu); + bps_iq.init(m, settings_size, 0x20, true, m->icp_device_iommu); memcpy(bps_iq.ptr, bps_settings[sensor->num()], settings_size); // for cdm register writes, just make it bigger than you need - bps_cdm_program_array.init(m, 0x1000, 0x20, - CAM_MEM_FLAG_HW_READ_WRITE | CAM_MEM_FLAG_KMD_ACCESS | CAM_MEM_FLAG_UMD_ACCESS | CAM_MEM_FLAG_CMD_BUF_TYPE | CAM_MEM_FLAG_HW_SHARED_ACCESS, - m->icp_device_iommu); + bps_cdm_program_array.init(m, 0x1000, 0x20, true, m->icp_device_iommu); // striping lib output uint32_t striping_size = sizeof(bps_striping_output[0]) / sizeof(bps_striping_output[0][0]); - bps_striping.init(m, striping_size, 0x20, - CAM_MEM_FLAG_HW_READ_WRITE | CAM_MEM_FLAG_KMD_ACCESS | CAM_MEM_FLAG_UMD_ACCESS | CAM_MEM_FLAG_CMD_BUF_TYPE | CAM_MEM_FLAG_HW_SHARED_ACCESS, - m->icp_device_iommu); + bps_striping.init(m, striping_size, 0x20, true, m->icp_device_iommu); memcpy(bps_striping.ptr, bps_striping_output[sensor->num()], striping_size); // used internally by the BPS, we just allocate it. // size comes from the BPSStripingLib - bps_cdm_striping_bl.init(m, 0xa100, 0x20, - CAM_MEM_FLAG_HW_READ_WRITE | CAM_MEM_FLAG_KMD_ACCESS | CAM_MEM_FLAG_UMD_ACCESS | CAM_MEM_FLAG_CMD_BUF_TYPE | CAM_MEM_FLAG_HW_SHARED_ACCESS, - m->icp_device_iommu); + bps_cdm_striping_bl.init(m, 0xa100, 0x20, true, m->icp_device_iommu); // LUTs /* - bps_linearization_lut.init(m, sensor->linearization_lut.size()*sizeof(uint32_t), 0x20, - CAM_MEM_FLAG_HW_READ_WRITE | CAM_MEM_FLAG_KMD_ACCESS | CAM_MEM_FLAG_UMD_ACCESS | CAM_MEM_FLAG_CMD_BUF_TYPE | CAM_MEM_FLAG_HW_SHARED_ACCESS, - m->icp_device_iommu); + bps_linearization_lut.init(m, sensor->linearization_lut.size()*sizeof(uint32_t), 0x20, true, m->icp_device_iommu); memcpy(bps_linearization_lut.ptr, sensor->linearization_lut.data(), bps_linearization_lut.size); */ } diff --git a/system/camerad/cameras/spectra.h b/system/camerad/cameras/spectra.h index 58a9b9b903..bf35cf129e 100644 --- a/system/camerad/cameras/spectra.h +++ b/system/camerad/cameras/spectra.h @@ -88,11 +88,17 @@ public: } } - void init(SpectraMaster *m, int s, int a, int flags, int mmu_hdl = 0, int mmu_hdl2 = 0, int count=1) { + void init(SpectraMaster *m, int s, int a, bool shared_access, int mmu_hdl = 0, int mmu_hdl2 = 0, int count = 1) { video_fd = m->video0_fd; size = s; alignment = a; mmap_size = aligned_size() * count; + + uint32_t flags = CAM_MEM_FLAG_HW_READ_WRITE | CAM_MEM_FLAG_KMD_ACCESS | CAM_MEM_FLAG_UMD_ACCESS | CAM_MEM_FLAG_CMD_BUF_TYPE; + if (shared_access) { + flags |= CAM_MEM_FLAG_HW_SHARED_ACCESS; + } + void *p = alloc_w_mmu_hdl(video_fd, mmap_size, (uint32_t*)&handle, alignment, flags, mmu_hdl, mmu_hdl2); ptr = (unsigned char*)p; assert(ptr != NULL);