1 /* 2 * Copyright (c) 2020 Rockchip Corporation 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 * 16 */ 17 18 #ifndef __GENMESH_H__ 19 #define __GENMESH_H__ 20 21 #define INV_POLY_COEFF_NUM 21 /* ����ʽϵ������, ��ߴ���(INV_POLY_COEFF_NUM-1)�� */ 22 23 enum RKALGO_LDCH_VERSION_E 24 { 25 RKALGO_LDCH_VERSION_0 = 0, /* old version: for rv1109��rv1126��rk356x��rk3588 */ 26 RKALGO_LDCH_VERSION_1 = 1, /* new version: for 1106��rk3562 */ 27 RKALGO_LDCH_VERSION_BUTT 28 }; 29 30 /* ������� */ 31 struct CameraCoeff 32 { 33 double cx, cy; /* ��ͷ�Ĺ��� */ 34 double a0, a2, a3, a4; /* ��ͷ�Ļ���ϵ�� */ 35 double c, d, e; /* �ڲ�[c d;e 1] */ 36 double sf; /* sf�����ӽ�, sfԽ���ӽ�Խ�� */ 37 38 /* level = 0ʱ��rho-tanTheta����ʽ��� */ 39 int invPolyTanNum0; /* ��Ϻ��ϵ������ */ 40 double invPolyTanCoeff0[INV_POLY_COEFF_NUM]; /* ����ʽϵ��, ��ߴ���(INV_POLY_COEFF_NUM-1)�� */ 41 /* level = 0ʱ��rho-cotTheta����ʽ��� */ 42 int invPolyCotNum0; /* ��Ϻ��ϵ������ */ 43 double invPolyCotCoeff0[INV_POLY_COEFF_NUM]; /* ����ʽϵ��, ��ߴ���(INV_POLY_COEFF_NUM-1)�� */ 44 45 /* level = 255ʱ��rho-tanTheta����ʽ��� */ 46 int invPolyTanNum255; /* ��Ϻ��ϵ������ */ 47 double invPolyTanCoeff255[INV_POLY_COEFF_NUM]; /* ����ʽϵ��, ��ߴ���(INV_POLY_COEFF_NUM-1)�� */ 48 /* level = 255ʱ��rho-cotTheta����ʽ��� */ 49 int invPolyCotNum255; /* ��Ϻ��ϵ������ */ 50 double invPolyCotCoeff255[INV_POLY_COEFF_NUM]; /* ����ʽϵ��, ��ߴ���(INV_POLY_COEFF_NUM-1)�� */ 51 }; 52 53 /* ����FECӳ�����صIJ��� */ 54 struct FecParams 55 { 56 int correctX; /* ˮƽx����У��: 1����У��, 0����У�� */ 57 int correctY; /* ��ֱy����У��: 1����У��, 0����У�� */ 58 int saveMaxFovX; /* ����ˮƽx�������FOV: 1������, 0�������� */ 59 int isFecOld; /* �Ƿ�ɰ�FEC: 1�����ǣ�0������ */ 60 int saveMesh4bin; /* �Ƿ�meshxi,xf,yi,yf4��bin�ļ���1������, 0�������� */ 61 char mesh4binPath[256]; /* ����meshxi,xf,yi,yf4��bin�ļ���·�� */ 62 int srcW, srcH, dstW, dstH; /* �������ͼ��ķֱ��� */ 63 int srcW_ex, srcH_ex, dstW_ex, dstH_ex; /* ��չ�����������ֱ��� */ 64 double cropStepW[2000], cropStepH[2000]; 65 double cropStartW[2000], cropStartH[2000]; 66 int meshSizeW, meshSizeH; 67 double meshStepW, meshStepH; 68 int meshSize1bin; 69 int meshSize4bin; 70 unsigned short SpbNum; 71 unsigned long MeshPointNumW; 72 unsigned short SpbMeshPNumH; 73 unsigned short LastSpbMeshPNumH; 74 75 unsigned short *pMeshXY; 76 77 }; 78 79 /* ����LDCHӳ�����صIJ��� */ 80 struct LdchParams 81 { 82 int saveMaxFovX; /* ����ˮƽx�������FOV: 1������, 0�������� */ 83 RKALGO_LDCH_VERSION_E enLdchVersion; /* LDCH�汾 */ 84 int saveMeshX; /* �Ƿ�MeshX.bin�ļ�: 1������, 0�������� */ 85 char meshPath[256]; /* ����MeshX.bin�ļ���·�� */ 86 int srcW, srcH, dstW, dstH; /* �������ͼ��ķֱ��� */ 87 int meshSizeW, meshSizeH; 88 double meshStepW, meshStepH; 89 int mapxFixBit; /* ���㻯����λ�� */ 90 int meshSize; 91 int maxLevel; 92 double *mapx; 93 double *mapy; 94 }; 95 96 97 /* =============================================================================================================================================================================== */ 98 99 /* FEC: ��ʼ��, ����ͼ������ֱ���, ����FECӳ������ز���, ������Ҫ��buffer */ 100 void genFecMeshInit(int srcW, int srcH, int dstW, int dstH, FecParams &fecParams, CameraCoeff &camCoeff); 101 102 /* FEC: ����ʼ�� */ 103 void genFecMeshDeInit(FecParams &fecParams); 104 105 /* FEC: Ԥ�ȼ���IJ���: ����δУ����С���level=0,level=255�Ķ���ʽ���� */ 106 void genFecPreCalcPart(FecParams &fecParams, CameraCoeff &camCoeff); 107 108 /* FEC: 4��mesh �ڴ����� */ 109 void mallocFecMesh(int meshSize, unsigned short **pMeshXI, unsigned char **pMeshXF, unsigned short **pMeshYI, unsigned char **pMeshYF); 110 111 /* FEC: 4��mesh �ڴ��ͷ� */ 112 void freeFecMesh(unsigned short *pMeshXI, unsigned char *pMeshXF, unsigned short *pMeshYI, unsigned char *pMeshYF); 113 114 /* 115 ��������: ���ɲ�ͬУ���̶ȵ�meshӳ���, ����ISP��FECģ�� 116 ����: 117 1��FECӳ������ز���, ������Ҫ��buffer: FecParams &fecParams 118 2������궨����: CameraCoeff &camCoeff 119 3����ҪУ���ij̶�: level(0-255: 0��ʾУ���̶�Ϊ0%, 255��ʾУ���̶�Ϊ100%) 120 ���: 121 1��bool �Ƿ�ɹ����� 122 2��pMeshXI, pMeshXF, pMeshYI, pMeshYF 123 */ 124 bool genFECMeshNLevel(FecParams &fecParams, CameraCoeff &camCoeff, int level, unsigned short *pMeshXI, unsigned char *pMeshXF, unsigned short *pMeshYI, unsigned char *pMeshYF); 125 126 127 /* =============================================================================================================================================================================== */ 128 129 /* LDCH: ��ʼ��, ����ͼ������ֱ���, ����LDCHӳ������ز���, ������Ҫ��buffer */ 130 void genLdchMeshInit(int srcW, int srcH, int dstW, int dstH, LdchParams &ldchParams, CameraCoeff &camCoeff); 131 132 /* LDCH: ����ʼ�� */ 133 void genLdchMeshDeInit(LdchParams &ldchParams); 134 135 /* LDCH: Ԥ�ȼ���IJ���: ����δУ����С���level=0,level=255�Ķ���ʽ���� */ 136 void genLdchPreCalcPart(LdchParams &ldchParams, CameraCoeff &camCoeff); 137 138 /* LDCH: ����LDCH�ܹ�У�������̶� */ 139 void calcLdchMaxLevel(LdchParams &ldchParams, CameraCoeff &camCoeff); 140 141 /* 142 ��������: ���ɲ�ͬУ���̶ȵ�meshӳ���, ����ISP��LDCHģ�� 143 144 ����: 145 1��LDCHӳ������ز���, ������Ҫ��buffer: LdchParams &ldchParams 146 2������궨����: CameraCoeff &camCoeff 147 3����ҪУ���ij̶�: level(0-255: 0��ʾУ���̶�Ϊ0%, 255��ʾУ���̶�Ϊ100%) 148 ���: 149 1��bool �Ƿ�ɹ����� 150 2��pMeshX 151 */ 152 bool genLDCMeshNLevel(LdchParams &ldchParams, CameraCoeff &camCoeff, int level, unsigned short *pMeshX); 153 154 /* =============================================================================================================================================================================== */ 155 156 /* ���ͼ���ROI������ز��� */ 157 struct RoiParams 158 { 159 int startW; /* ROI�������ʼ�� */ 160 int startH; 161 int roiW; /* ROI����Ŀ�� */ 162 int roiH; 163 }; 164 165 /* �������ͼ���ROI��������FEC mesh���вü�, �õ���������ijߴ� */ 166 bool cropFecMesh(FecParams &fecParams, RoiParams &roiParams, int level, unsigned short *pCropMeshXI, unsigned char *pCropMeshXF, unsigned short *pCropMeshYI, unsigned char *pCropMeshYF); 167 168 /* �������ͼ���ROI��������LDCH mesh���вü�, �õ���������ijߴ� */ 169 bool cropLdchMesh(LdchParams &ldchParams, RoiParams &roiParams, int level, unsigned short *pMeshX, unsigned short *pRoiMeshX); 170 171 /* FEC: ��ʼ��, ����8k ---> 2��4k */ 172 void genFecMeshInit8kTo4k(int srcW, int srcH, int dstW, int dstH, int margin, 173 CameraCoeff &camCoeff, CameraCoeff &camCoeff_left, CameraCoeff &camCoeff_right, 174 FecParams &fecParams, FecParams &fecParams_left, FecParams &fecParams_right); 175 176 /* LDCH: 8k ---> 2��4k */ 177 void genLdchMeshInit8kTo4k(int srcW, int srcH, int dstW, int dstH, int margin, 178 CameraCoeff &camCoeff, CameraCoeff &camCoeff_left, CameraCoeff &camCoeff_right, 179 LdchParams &ldchParams, LdchParams &ldchParams_left, LdchParams &ldchParams_right); 180 181 #endif // !__GENMESH_H__ 182