#include "avsFineTuningTool.hpp" #include "hi_mpi_sys.h" #include #include #include AvsFineTuningTool* AvsFineTuningTool::instance = nullptr; void AvsFineTuningTool::GenerateLutFile(int index) { // Generate the LUT file ot_avs_lut_generate_input *lut_input = new ot_avs_lut_generate_input(); td_s32 i; td_s32 ret = 0; /*************************************************************************** */ // Create a new LUT mask ot_avs_lut_mask *lut_mask = new ot_avs_lut_mask(); lut_mask->input_yuv_mask_flag = TD_FALSE; // input yuv mask flag lut_mask->same_mask_flag = TD_TRUE; // if this is true , all the mask define will be the same as the first one for(i = 0; i < m_cameraNumber; i++) { lut_mask->mask_define[i].mask_shape = OT_AVS_MASK_SHAPE_RECT; lut_mask->mask_define[i].offset_h = 0; lut_mask->mask_define[i].offset_v = 0; lut_mask->mask_define[i].half_major_axis = g_width / 2; /* half 2 */ lut_mask->mask_define[i].half_minor_axis = g_height / 2; /* half 2 */ } std::cout << "mask param is done" << std::endl; /*************************************************************************** */ td_char out_lut[MAX_CAMERA_NUM][FILE_MAX_LEN]; /* 2 */ td_u64 lut_output[MAX_CAMERA_NUM]{0}; /* 2 */ FILE *lut_file = NULL; td_s32 cal_size =0; //char calibrationPath[OT_AVS_CALIBRATION_FILE_LEN] = "./calibration/4eye_2688x1520.cal"; //std::memcpy(g_cal_file,calibrationPath,OT_AVS_CALIBRATION_FILE_LEN); cal_size = getCalFileLong("./calibration/4eye_2688x1520.cal"); if(cal_size == 0) { printf("getCalFileLong failed\n"); return; } ret = readCalFile("./calibration/4eye_2688x1520.cal",g_cal_file,cal_size); if(ret != TD_SUCCESS) { printf("readCalFile failed\n"); return; } ret = hi_mpi_sys_mmz_alloc(&g_avs_lut_addr, &m_avsLut, NULL, NULL, OT_AVS_LUT_SIZE*m_cameraNumber*sizeof(char)); if(ret != TD_SUCCESS) { return; } std::cout << "LUT mmz alloc is done" << std::endl; for (i = 0; i < m_cameraNumber; i++) { lut_output[i] = (td_u64)(td_uintptr_t)m_avsLut + i * OT_AVS_LUT_SIZE; } ret = hi_mpi_sys_mmz_alloc(&g_avs_mask_addr, &m_avsMask, NULL, NULL, g_width * g_height * sizeof(td_u16)); if(ret != TD_SUCCESS) { return; } for(i = 0; i < m_cameraNumber; i++) { lut_mask->mask_addr[i] = (td_u64)(td_uintptr_t)m_avsMask; } std::cout << "Mask mmz alloc is done" << std::endl; /*************************************************************************** */ // Create a new LUT fine tuning m_fine_tuning_cfg.fine_tuning_en = TD_TRUE; // trun on fine tuning for(i = 0; i < m_cameraNumber; i++) { if(i == index) m_fine_tuning_cfg.adjust[i].adjust_en = TD_TRUE; else m_fine_tuning_cfg.adjust[i].adjust_en = TD_FALSE; m_fine_tuning_cfg.adjust[i].pitch = m_finePackages[i].pitch * 100; m_fine_tuning_cfg.adjust[i].yaw = m_finePackages[i].yaw * 100; m_fine_tuning_cfg.adjust[i].roll = m_finePackages[i].roll* 100; m_fine_tuning_cfg.adjust[i].offset_x = m_finePackages[i].offsetX * 100; m_fine_tuning_cfg.adjust[i].offset_y = m_finePackages[i].offsetY * 100; } lut_input->fine_tuning_cfg = m_fine_tuning_cfg; lut_input->lut_accuracy = OT_AVS_LUT_ACCURACY_HIGH; // accuracy configure lut_input->type = OT_AVS_TYPE_AVSP; // use AVSP lut_input->stitch_distance = m_StitchingDistance; // set stitching distance lut_input->mask = lut_mask; // set mask lut_input->file_input_addr = (td_u64)(td_uintptr_t)g_cal_file; // set cal file address /*************************************************************************** */ ot_avs_status status; status = hi_mpi_avs_lut_generate(lut_input,lut_output); if(status != OT_AVS_STATUS_OK) { printf("hi_mpi_avs_lut_generate failed\n"); return; } writeLutFile(index,m_SaveAVSPPath,OT_AVS_LUT_SIZE,lut_output); } void AvsFineTuningTool::FreeResources() { td_s32 ret = TD_SUCCESS; if (g_avs_lut_addr != 0) { ret = hi_mpi_sys_mmz_free(g_avs_lut_addr, NULL); if(ret != TD_SUCCESS) { printf("hi_mpi_sys_mmz_free failed\n");} } if(g_avs_mask_addr != 0) { ret = hi_mpi_sys_mmz_free(g_avs_mask_addr, NULL); if(ret != TD_SUCCESS) { printf("hi_mpi_sys_mmz_free failed\n");} } }