123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- #include "avsFineTuningTool.hpp"
- #include "hi_mpi_sys.h"
- #include <iostream>
- #include <memory>
- #include <cstring>
- 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");}
- }
- }
|