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 /* ������� */ 24 struct CameraCoeff 25 { 26 double cx, cy; /* ��ͷ�Ĺ��� */ 27 double a0, a2, a3, a4; /* ��ͷ�Ļ���ϵ�� */ 28 double c, d, e; /* �ڲ�[c d;e 1] */ 29 double sf; /* sf�����ӽ�, sfԽ���ӽ�Խ�� */ 30 31 /* level = 0ʱ��rho-tanTheta����ʽ��� */ 32 int invPolyTanNum0; /* ��Ϻ��ϵ������ */ 33 double invPolyTanCoeff0[INV_POLY_COEFF_NUM]; /* ����ʽϵ��, ��ߴ���(INV_POLY_COEFF_NUM-1)�� */ 34 /* level = 0ʱ��rho-cotTheta����ʽ��� */ 35 int invPolyCotNum0; /* ��Ϻ��ϵ������ */ 36 double invPolyCotCoeff0[INV_POLY_COEFF_NUM]; /* ����ʽϵ��, ��ߴ���(INV_POLY_COEFF_NUM-1)�� */ 37 38 /* level = 255ʱ��rho-tanTheta����ʽ��� */ 39 int invPolyTanNum255; /* ��Ϻ��ϵ������ */ 40 double invPolyTanCoeff255[INV_POLY_COEFF_NUM]; /* ����ʽϵ��, ��ߴ���(INV_POLY_COEFF_NUM-1)�� */ 41 /* level = 255ʱ��rho-cotTheta����ʽ��� */ 42 int invPolyCotNum255; /* ��Ϻ��ϵ������ */ 43 double invPolyCotCoeff255[INV_POLY_COEFF_NUM]; /* ����ʽϵ��, ��ߴ���(INV_POLY_COEFF_NUM-1)�� */ 44 }; 45 46 /* ����FECӳ�����صIJ��� */ 47 struct FecParams 48 { 49 int correctX; /* ˮƽx����У��: 1����У��, 0����У�� */ 50 int correctY; /* ��ֱy����У��: 1����У��, 0����У�� */ 51 int saveMaxFovX; /* ����ˮƽx�������FOV: 1������, 0�������� */ 52 int isFecOld; /* �Ƿ�ɰ�FEC: 1�����ǣ�0������ */ 53 int saveMesh4bin; /* �Ƿ�meshxi,xf,yi,yf4��bin�ļ���1������, 0�������� */ 54 char mesh4binPath[256]; /* ����meshxi,xf,yi,yf4��bin�ļ���·�� */ 55 int srcW, srcH, dstW, dstH; /* �������ͼ��ķֱ��� */ 56 int srcW_ex, srcH_ex, dstW_ex, dstH_ex; /* ��չ�����������ֱ��� */ 57 double cropStepW[2000], cropStepH[2000]; 58 double cropStartW[2000], cropStartH[2000]; 59 int meshSizeW, meshSizeH; 60 double meshStepW, meshStepH; 61 int meshSize1bin; 62 int meshSize4bin; 63 unsigned short SpbNum; 64 unsigned long MeshPointNumW; 65 unsigned short SpbMeshPNumH; 66 unsigned short LastSpbMeshPNumH; 67 68 unsigned short *pMeshXY; 69 70 }; 71 72 /* ����LDCHӳ�����صIJ��� */ 73 struct LdchParams 74 { 75 int saveMaxFovX; /* ����ˮƽx�������FOV: 1������, 0�������� */ 76 int isLdchOld; /* �Ƿ�ɰ�LDCH: 1�����ǣ�0������ */ 77 int saveMeshX; /* �Ƿ�MeshX.bin�ļ�: 1������, 0�������� */ 78 char meshPath[256]; /* ����MeshX.bin�ļ���·�� */ 79 int srcW, srcH, dstW, dstH; /* �������ͼ��ķֱ��� */ 80 int meshSizeW, meshSizeH; 81 double meshStepW, meshStepH; 82 int mapxFixBit; /* ���㻯����λ�� */ 83 int meshSize; 84 int maxLevel; 85 double *mapx; 86 double *mapy; 87 }; 88 89 90 /* =============================================================================================================================================================================== */ 91 92 /* FEC: ��ʼ��, ����ͼ������ֱ���, ����FECӳ������ز���, ������Ҫ��buffer */ 93 void genFecMeshInit(int srcW, int srcH, int dstW, int dstH, FecParams &fecParams, CameraCoeff &camCoeff); 94 95 /* FEC: ����ʼ�� */ 96 void genFecMeshDeInit(FecParams &fecParams); 97 98 /* FEC: Ԥ�ȼ���IJ���: ����δУ����С���level=0,level=255�Ķ���ʽ���� */ 99 void genFecPreCalcPart(FecParams &fecParams, CameraCoeff &camCoeff); 100 101 /* FEC: 4��mesh �ڴ����� */ 102 void mallocFecMesh(int meshSize, unsigned short **pMeshXI, unsigned char **pMeshXF, unsigned short **pMeshYI, unsigned char **pMeshYF); 103 104 /* FEC: 4��mesh �ڴ��ͷ� */ 105 void freeFecMesh(unsigned short *pMeshXI, unsigned char *pMeshXF, unsigned short *pMeshYI, unsigned char *pMeshYF); 106 107 /* 108 ��������: ���ɲ�ͬУ���̶ȵ�meshӳ���, ����ISP��FECģ�� 109 ����: 110 1��FECӳ������ز���, ������Ҫ��buffer: FecParams &fecParams 111 2������궨����: CameraCoeff &camCoeff 112 3����ҪУ���ij̶�: level(0-255: 0��ʾУ���̶�Ϊ0%, 255��ʾУ���̶�Ϊ100%) 113 ���: 114 1��bool �Ƿ�ɹ����� 115 2��pMeshXI, pMeshXF, pMeshYI, pMeshYF 116 */ 117 bool genFECMeshNLevel(FecParams &fecParams, CameraCoeff &camCoeff, int level, unsigned short *pMeshXI, unsigned char *pMeshXF, unsigned short *pMeshYI, unsigned char *pMeshYF); 118 119 120 /* =============================================================================================================================================================================== */ 121 122 /* LDCH: ��ʼ��, ����ͼ������ֱ���, ����LDCHӳ������ز���, ������Ҫ��buffer */ 123 void genLdchMeshInit(int srcW, int srcH, int dstW, int dstH, LdchParams &ldchParams, CameraCoeff &camCoeff); 124 125 /* LDCH: ����ʼ�� */ 126 void genLdchMeshDeInit(LdchParams &ldchParams); 127 128 /* LDCH: Ԥ�ȼ���IJ���: ����δУ����С���level=0,level=255�Ķ���ʽ���� */ 129 void genLdchPreCalcPart(LdchParams &ldchParams, CameraCoeff &camCoeff); 130 131 /* LDCH: ����LDCH�ܹ�У�������̶� */ 132 void calcLdchMaxLevel(LdchParams &ldchParams, CameraCoeff &camCoeff); 133 134 /* 135 ��������: ���ɲ�ͬУ���̶ȵ�meshӳ���, ����ISP��LDCHģ�� 136 137 ����: 138 1��LDCHӳ������ز���, ������Ҫ��buffer: LdchParams &ldchParams 139 2������궨����: CameraCoeff &camCoeff 140 3����ҪУ���ij̶�: level(0-255: 0��ʾУ���̶�Ϊ0%, 255��ʾУ���̶�Ϊ100%) 141 ���: 142 1��bool �Ƿ�ɹ����� 143 2��pMeshX 144 */ 145 bool genLDCMeshNLevel(LdchParams &ldchParams, CameraCoeff &camCoeff, int level, unsigned short *pMeshX); 146 147 /* =============================================================================================================================================================================== */ 148 149 /* ���ͼ���ROI������ز��� */ 150 struct RoiParams 151 { 152 int startW; /* ROI�������ʼ�� */ 153 int startH; 154 int roiW; /* ROI����Ŀ�� */ 155 int roiH; 156 }; 157 158 /* �������ͼ���ROI��������FEC mesh���вü�, �õ���������ijߴ� */ 159 bool cropFecMesh(FecParams &fecParams, RoiParams &roiParams, int level, unsigned short *pCropMeshXI, unsigned char *pCropMeshXF, unsigned short *pCropMeshYI, unsigned char *pCropMeshYF); 160 161 /* �������ͼ���ROI��������LDCH mesh���вü�, �õ���������ijߴ� */ 162 bool cropLdchMesh(LdchParams &ldchParams, RoiParams &roiParams, int level, unsigned short *pMeshX, unsigned short *pRoiMeshX); 163 164 /* FEC: ��ʼ��, ����8k ---> 2��4k */ 165 void genFecMeshInit8kTo4k(int srcW, int srcH, int dstW, int dstH, int margin, 166 CameraCoeff &camCoeff, CameraCoeff &camCoeff_left, CameraCoeff &camCoeff_right, 167 FecParams &fecParams, FecParams &fecParams_left, FecParams &fecParams_right); 168 169 /* LDCH: 8k ---> 2��4k */ 170 void genLdchMeshInit8kTo4k(int srcW, int srcH, int dstW, int dstH, int margin, 171 CameraCoeff &camCoeff, CameraCoeff &camCoeff_left, CameraCoeff &camCoeff_right, 172 LdchParams &ldchParams, LdchParams &ldchParams_left, LdchParams &ldchParams_right); 173 174 #endif // !__GENMESH_H__ 175