avsFineTuningTool.cpp 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. #include "avsFineTuningTool.hpp"
  2. #include "hi_mpi_sys.h"
  3. #include <iostream>
  4. #include <memory>
  5. #include <cstring>
  6. AvsFineTuningTool* AvsFineTuningTool::instance = nullptr;
  7. void AvsFineTuningTool::GenerateLutFile(int index)
  8. {
  9. // Generate the LUT file
  10. ot_avs_lut_generate_input *lut_input = new ot_avs_lut_generate_input();
  11. td_s32 i;
  12. td_s32 ret = 0;
  13. /*************************************************************************** */
  14. // Create a new LUT mask
  15. ot_avs_lut_mask *lut_mask = new ot_avs_lut_mask();
  16. lut_mask->input_yuv_mask_flag = TD_FALSE; // input yuv mask flag
  17. lut_mask->same_mask_flag = TD_TRUE; // if this is true , all the mask define will be the same as the first one
  18. for(i = 0; i < m_cameraNumber; i++) {
  19. lut_mask->mask_define[i].mask_shape = OT_AVS_MASK_SHAPE_RECT;
  20. lut_mask->mask_define[i].offset_h = 0;
  21. lut_mask->mask_define[i].offset_v = 0;
  22. lut_mask->mask_define[i].half_major_axis = g_width / 2; /* half 2 */
  23. lut_mask->mask_define[i].half_minor_axis = g_height / 2; /* half 2 */
  24. }
  25. std::cout << "mask param is done" << std::endl;
  26. /*************************************************************************** */
  27. td_char out_lut[MAX_CAMERA_NUM][FILE_MAX_LEN]; /* 2 */
  28. td_u64 lut_output[MAX_CAMERA_NUM]{0}; /* 2 */
  29. FILE *lut_file = NULL;
  30. td_s32 cal_size =0;
  31. //char calibrationPath[OT_AVS_CALIBRATION_FILE_LEN] = "./calibration/4eye_2688x1520.cal";
  32. //std::memcpy(g_cal_file,calibrationPath,OT_AVS_CALIBRATION_FILE_LEN);
  33. cal_size = getCalFileLong("./calibration/4eye_2688x1520.cal");
  34. if(cal_size == 0) {
  35. printf("getCalFileLong failed\n");
  36. return;
  37. }
  38. ret = readCalFile("./calibration/4eye_2688x1520.cal",g_cal_file,cal_size);
  39. if(ret != TD_SUCCESS) {
  40. printf("readCalFile failed\n");
  41. return;
  42. }
  43. ret = hi_mpi_sys_mmz_alloc(&g_avs_lut_addr, &m_avsLut, NULL, NULL, OT_AVS_LUT_SIZE*m_cameraNumber*sizeof(char));
  44. if(ret != TD_SUCCESS) {
  45. return;
  46. }
  47. std::cout << "LUT mmz alloc is done" << std::endl;
  48. for (i = 0; i < m_cameraNumber; i++) {
  49. lut_output[i] = (td_u64)(td_uintptr_t)m_avsLut + i * OT_AVS_LUT_SIZE;
  50. }
  51. ret = hi_mpi_sys_mmz_alloc(&g_avs_mask_addr, &m_avsMask, NULL, NULL, g_width * g_height * sizeof(td_u16));
  52. if(ret != TD_SUCCESS) {
  53. return;
  54. }
  55. for(i = 0; i < m_cameraNumber; i++) {
  56. lut_mask->mask_addr[i] = (td_u64)(td_uintptr_t)m_avsMask;
  57. }
  58. std::cout << "Mask mmz alloc is done" << std::endl;
  59. /*************************************************************************** */
  60. // Create a new LUT fine tuning
  61. m_fine_tuning_cfg.fine_tuning_en = TD_TRUE; // trun on fine tuning
  62. for(i = 0; i < m_cameraNumber; i++) {
  63. if(i == index)
  64. m_fine_tuning_cfg.adjust[i].adjust_en = TD_TRUE;
  65. else
  66. m_fine_tuning_cfg.adjust[i].adjust_en = TD_FALSE;
  67. m_fine_tuning_cfg.adjust[i].pitch = m_finePackages[i].pitch * 100;
  68. m_fine_tuning_cfg.adjust[i].yaw = m_finePackages[i].yaw * 100;
  69. m_fine_tuning_cfg.adjust[i].roll = m_finePackages[i].roll* 100;
  70. m_fine_tuning_cfg.adjust[i].offset_x = m_finePackages[i].offsetX * 100;
  71. m_fine_tuning_cfg.adjust[i].offset_y = m_finePackages[i].offsetY * 100;
  72. }
  73. lut_input->fine_tuning_cfg = m_fine_tuning_cfg;
  74. lut_input->lut_accuracy = OT_AVS_LUT_ACCURACY_HIGH; // accuracy configure
  75. lut_input->type = OT_AVS_TYPE_AVSP; // use AVSP
  76. lut_input->stitch_distance = m_StitchingDistance; // set stitching distance
  77. lut_input->mask = lut_mask; // set mask
  78. lut_input->file_input_addr = (td_u64)(td_uintptr_t)g_cal_file; // set cal file address
  79. /*************************************************************************** */
  80. ot_avs_status status;
  81. status = hi_mpi_avs_lut_generate(lut_input,lut_output);
  82. if(status != OT_AVS_STATUS_OK) {
  83. printf("hi_mpi_avs_lut_generate failed\n");
  84. return;
  85. }
  86. writeLutFile(index,m_SaveAVSPPath,OT_AVS_LUT_SIZE,lut_output);
  87. }
  88. void AvsFineTuningTool::FreeResources()
  89. {
  90. td_s32 ret = TD_SUCCESS;
  91. if (g_avs_lut_addr != 0) {
  92. ret = hi_mpi_sys_mmz_free(g_avs_lut_addr, NULL);
  93. if(ret != TD_SUCCESS) {
  94. printf("hi_mpi_sys_mmz_free failed\n");}
  95. }
  96. if(g_avs_mask_addr != 0)
  97. {
  98. ret = hi_mpi_sys_mmz_free(g_avs_mask_addr, NULL);
  99. if(ret != TD_SUCCESS) {
  100. printf("hi_mpi_sys_mmz_free failed\n");}
  101. }
  102. }