xref: /OK3568_Linux_fs/external/camera_engine_rkaiq/IspFec/include_prv/genMesh.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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