|
|
|
@ -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); |
|
|
|
|
*/ |
|
|
|
|
} |
|
|
|
|