|
|
|
@ -463,7 +463,7 @@ void SpectraCamera::config_ife(int idx, int request_id, bool init) { |
|
|
|
|
* IFE = Image Front End |
|
|
|
|
*/ |
|
|
|
|
int size = sizeof(struct cam_packet) + sizeof(struct cam_cmd_buf_desc)*2; |
|
|
|
|
size += sizeof(struct cam_patch_desc)*3; |
|
|
|
|
size += sizeof(struct cam_patch_desc)*4; |
|
|
|
|
if (!init) { |
|
|
|
|
size += sizeof(struct cam_buf_io_cfg); |
|
|
|
|
} |
|
|
|
@ -637,12 +637,19 @@ void SpectraCamera::config_ife(int idx, int request_id, bool init) { |
|
|
|
|
pkt->num_patches = patches.size(); |
|
|
|
|
pkt->patch_offset = sizeof(struct cam_cmd_buf_desc)*pkt->num_cmd_buf + sizeof(struct cam_buf_io_cfg)*pkt->num_io_configs; |
|
|
|
|
if (pkt->num_patches > 0) { |
|
|
|
|
// linearization LUT
|
|
|
|
|
struct cam_patch_desc *patch = (struct cam_patch_desc *)((char*)&pkt->payload + pkt->patch_offset); |
|
|
|
|
patch->dst_buf_hdl = ife_cmd.handle; |
|
|
|
|
patch->src_buf_hdl = ife_linearization_lut.handle; |
|
|
|
|
patch->dst_offset = patches[0]; |
|
|
|
|
patch->src_offset = 0; |
|
|
|
|
|
|
|
|
|
// gamma LUT
|
|
|
|
|
for (int i = 0; i < 3; i++) { |
|
|
|
|
struct cam_patch_desc *patch = (struct cam_patch_desc *)((char*)&pkt->payload + pkt->patch_offset + sizeof(cam_patch_desc)*i); |
|
|
|
|
patch = (struct cam_patch_desc *)((char*)&pkt->payload + pkt->patch_offset + sizeof(cam_patch_desc)*(i+1)); |
|
|
|
|
patch->dst_buf_hdl = ife_cmd.handle; |
|
|
|
|
patch->src_buf_hdl = ife_gamma_lut.handle; |
|
|
|
|
patch->dst_offset = patches[i]; |
|
|
|
|
patch->dst_offset = patches[i+1]; |
|
|
|
|
patch->src_offset = ife_gamma_lut.size*i; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -857,12 +864,18 @@ void SpectraCamera::configISP() { |
|
|
|
|
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, FRAME_BUF_COUNT); |
|
|
|
|
if (!is_raw) { |
|
|
|
|
ife_gamma_lut.init(m, 64*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
|
|
|
|
|
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); |
|
|
|
|
} |
|
|
|
|
ife_linearization_lut.init(m, sensor->linearization_lut.size(), 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); |
|
|
|
|
memcpy(ife_linearization_lut.ptr, sensor->linearization_lut.data(), ife_linearization_lut.size); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
config_ife(0, 1, true); |
|
|
|
|
} |
|
|
|
|