xref: /OK3568_Linux_fs/external/camera_engine_rkaiq/rkaiq/common/gen_mesh/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  /* ������� */
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