xref: /OK3568_Linux_fs/external/camera_engine_rkaiq/rkaiq/include/algos/af/rk_aiq_types_af_algo.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 #ifndef __RK_AIQ_TYPES_AF_ALGO_H__
2 #define __RK_AIQ_TYPES_AF_ALGO_H__
3 
4 #include <sys/time.h>
5 
6 #include "rk_aiq_comm.h"
7 
8 RKAIQ_BEGIN_DECLARE
9 
10 #define RKAIQ_RAWAF_WIN_NUM                2
11 #define RKAIQ_RAWAF_LINE_NUM               5
12 #define RKAIQ_RAWAF_GAMMA_NUM              17
13 #define RKAIQ_RAWAF_SUMDATA_ROW            15
14 #define RKAIQ_RAWAF_SUMDATA_COLUMN         15
15 #define RKAIQ_RAWAF_SUMDATA_NUM            225
16 #define RKAIQ_RAWAF_NEXT_ZOOMFOCUS_NUM     300
17 #define RKAIQ_RAWAF_ROI_SUBWINS_VCNT       15
18 #define RKAIQ_RAWAF_ROI_SUBWINS_HCNT       15
19 #define RKAIQ_RAWAF_ROI_SUBWINS_NUM        (RKAIQ_RAWAF_ROI_SUBWINS_VCNT * RKAIQ_RAWAF_ROI_SUBWINS_HCNT)
20 #define RKAIQ_PDAF_BLK_DATA_HEIGHT_MAX     64
21 #define RKAIQ_PDAF_FINE_SEARCH_RANGE_MAX   10
22 #define RKAIQ_PDAF_ISOPARA_NUM             16
23 #define RKAIQ_PDAF_STEPRATIO_NUM           7
24 #define RKAIQ_PDAF_RESOLUTION_NUM          10
25 
26 typedef enum {
27     PDAF_DATA_INVAL = 0,
28     PDAF_DATA_HSPD  = 1,
29     PDAF_DATA_MLPD  = 2,
30     PDAF_DATA_DPD   = 3,
31     PDAF_DATA_QPD   = 4
32 } PdafDataType_t;
33 
34 typedef enum {
35     PDAF_DIR_INVAL = 0,
36     PDAF_DIR_LEFT  = 1,
37     PDAF_DIR_RIGHT = 2,
38     PDAF_DIR_TOP   = 3,
39     PDAF_DIR_DOWN  = 4
40 } PdafDataDir_t;
41 
42 typedef enum {
43     PDAF_TRANS_LR_BYTURNS = 0,
44     PDAF_TRANS_IN_PKT = 1,
45 } PdafTransType_t;
46 
47 typedef struct {
48     unsigned long long roia_sharpness;
49     unsigned int roia_luminance;
50     unsigned int roib_sharpness;
51     unsigned int roib_luminance;
52     unsigned int global_sharpness[RKAIQ_RAWAF_SUMDATA_NUM];
53     int lowpass_fv4_4[RKAIQ_RAWAF_SUMDATA_NUM];
54     int lowpass_fv8_8[RKAIQ_RAWAF_SUMDATA_NUM];
55     int lowpass_highlht[RKAIQ_RAWAF_SUMDATA_NUM];
56     int lowpass_highlht2[RKAIQ_RAWAF_SUMDATA_NUM];
57     int lowpass_id;
58 
59     struct timeval focus_starttim;
60     struct timeval focus_endtim;
61     struct timeval zoom_starttim;
62     struct timeval zoom_endtim;
63     int64_t sof_tim;
64     int focusCode;
65     int zoomCode;
66     bool focusCorrection;
67     bool zoomCorrection;
68     float angleZ;
69 } rk_aiq_af_algo_stat_v20_t;
70 
71 typedef struct {
72     bool enable;
73     int ldg_xl;
74     int ldg_yl;
75     int ldg_kl;
76     int ldg_xh;
77     int ldg_yh;
78     int ldg_kh;
79     int highlight_th;
80     int highlight2_th;
81 } rk_aiq_af_algo_sp_meas_t;
82 
83 typedef struct {
84     unsigned char contrast_af_en;
85     unsigned char rawaf_sel;
86 
87     unsigned char window_num;
88     unsigned short wina_h_offs;
89     unsigned short wina_v_offs;
90     unsigned short wina_h_size;
91     unsigned short wina_v_size;
92 
93     unsigned short winb_h_offs;
94     unsigned short winb_v_offs;
95     unsigned short winb_h_size;
96     unsigned short winb_v_size;
97 
98     unsigned char gamma_flt_en;
99     unsigned short gamma_y[RKAIQ_RAWAF_GAMMA_NUM];
100 
101     unsigned char gaus_flt_en;
102     unsigned char gaus_h0;
103     unsigned char gaus_h1;
104     unsigned char gaus_h2;
105 
106     unsigned char line_en[RKAIQ_RAWAF_LINE_NUM];
107     unsigned char line_num[RKAIQ_RAWAF_LINE_NUM];
108 
109     unsigned short afm_thres;
110 
111     unsigned char lum_var_shift[RKAIQ_RAWAF_WIN_NUM];
112     unsigned char afm_var_shift[RKAIQ_RAWAF_WIN_NUM];
113 
114     rk_aiq_af_algo_sp_meas_t sp_meas;
115 } rk_aiq_af_algo_meas_v20_t;
116 
117 typedef struct {
118     unsigned int wndb_luma;
119     unsigned int wndb_sharpness;
120     unsigned int winb_highlit_cnt;
121     unsigned int wnda_luma[RKAIQ_RAWAF_SUMDATA_NUM];
122     unsigned int wnda_fv_v1[RKAIQ_RAWAF_SUMDATA_NUM];
123     unsigned int wnda_fv_v2[RKAIQ_RAWAF_SUMDATA_NUM];
124     unsigned int wnda_fv_h1[RKAIQ_RAWAF_SUMDATA_NUM];
125     unsigned int wnda_fv_h2[RKAIQ_RAWAF_SUMDATA_NUM];
126     unsigned int wina_highlit_cnt[RKAIQ_RAWAF_SUMDATA_NUM];
127     int comp_bls;
128 
129     struct timeval focus_starttim;
130     struct timeval focus_endtim;
131     struct timeval zoom_starttim;
132     struct timeval zoom_endtim;
133     int64_t sof_tim;
134     int focusCode;
135     int zoomCode;
136     bool focusCorrection;
137     bool zoomCorrection;
138     float angleZ;
139 } rk_aiq_af_algo_stat_v30_t;
140 
141 typedef struct {
142     unsigned char af_en;
143     unsigned char rawaf_sel;
144     unsigned char gamma_en;
145     unsigned char gaus_en;
146     unsigned char v1_fir_sel;
147     unsigned char hiir_en;
148     unsigned char viir_en;
149     unsigned char v1_fv_outmode;    // 0 square, 1 absolute
150     unsigned char v2_fv_outmode;    // 0 square, 1 absolute
151     unsigned char h1_fv_outmode;    // 0 square, 1 absolute
152     unsigned char h2_fv_outmode;    // 0 square, 1 absolute
153     unsigned char ldg_en;
154     unsigned char accu_8bit_mode;
155     unsigned char ae_mode;
156     unsigned char y_mode;
157     unsigned char line_en[RKAIQ_RAWAF_LINE_NUM];
158     unsigned char line_num[RKAIQ_RAWAF_LINE_NUM];
159 
160     unsigned char window_num;
161     unsigned short wina_h_offs;
162     unsigned short wina_v_offs;
163     unsigned short wina_h_size;
164     unsigned short wina_v_size;
165     unsigned short winb_h_offs;
166     unsigned short winb_v_offs;
167     unsigned short winb_h_size;
168     unsigned short winb_v_size;
169 
170     unsigned short gamma_y[RKAIQ_RAWAF_GAMMA_NUM];
171 
172     // [old version param]
173     unsigned short thres;
174     unsigned char shift_sum_a;
175     unsigned char shift_sum_b;
176     unsigned char shift_y_a;
177     unsigned char shift_y_b;
178 
179     /**********[Vertical IIR (v1 & v2)]************/
180     short v1_iir_coe[9];
181     short v1_fir_coe[3];
182     short v2_iir_coe[3];
183     short v2_fir_coe[3];
184 
185     /**********[Horizontal IIR (h1 & h2)]************/
186     short h1_iir1_coe[6];
187     short h2_iir1_coe[6];
188     short h1_iir2_coe[6];
189     short h2_iir2_coe[6];
190 
191     /**********[Focus value statistic param]**********/
192     // level depended gain
193     // input8 lumi, output8bit gain
194     unsigned char h_ldg_lumth[2];    //luminance thresh
195     unsigned char h_ldg_gain[2];     //gain for [minLum,maxLum]
196     unsigned short h_ldg_gslp[2];    //[slope_low,-slope_high]
197     unsigned char v_ldg_lumth[2];
198     unsigned char v_ldg_gain[2];
199     unsigned short v_ldg_gslp[2];
200 
201     // coring
202     unsigned short v_fv_thresh;
203     unsigned short h_fv_thresh;
204 
205     // left shift, more needed if outmode=square
206     unsigned char v1_fv_shift; //only for sel1
207     unsigned char v2_fv_shift;
208     unsigned char h1_fv_shift;
209     unsigned char h2_fv_shift;
210 
211     /**********[High light]**********/
212     unsigned short highlit_thresh;
213 }  rk_aiq_af_algo_meas_v30_t;
214 
215 typedef struct {
216     unsigned char af_en;
217     unsigned char rawaf_sel;
218     unsigned char gamma_en;
219     unsigned char gaus_en;
220     unsigned char v1_fir_sel;
221     unsigned char hiir_en;
222     unsigned char viir_en;
223     unsigned char v1_fv_outmode;    // 0 square, 1 absolute
224     unsigned char v2_fv_outmode;    // 0 square, 1 absolute
225     unsigned char h1_fv_outmode;    // 0 square, 1 absolute
226     unsigned char h2_fv_outmode;    // 0 square, 1 absolute
227     unsigned char ldg_en;
228     unsigned char accu_8bit_mode;
229     unsigned char ae_mode;
230     unsigned char y_mode;
231     unsigned char vldg_sel;
232     unsigned char sobel_sel;
233     unsigned char v_dnscl_mode;
234     unsigned char from_awb;
235     unsigned char from_ynr;
236     unsigned char ae_config_use;
237     unsigned char line_en[RKAIQ_RAWAF_LINE_NUM];
238     unsigned char line_num[RKAIQ_RAWAF_LINE_NUM];
239 
240     unsigned char window_num;
241     unsigned short wina_h_offs;
242     unsigned short wina_v_offs;
243     unsigned short wina_h_size;
244     unsigned short wina_v_size;
245     unsigned short winb_h_offs;
246     unsigned short winb_v_offs;
247     unsigned short winb_h_size;
248     unsigned short winb_v_size;
249 
250     unsigned short gamma_y[RKAIQ_RAWAF_GAMMA_NUM];
251 
252     // [old version param]
253     unsigned short thres;
254     unsigned char shift_sum_a;
255     unsigned char shift_sum_b;
256     unsigned char shift_y_a;
257     unsigned char shift_y_b;
258 
259     char gaus_coe[9];
260 
261     /**********[Vertical IIR (v1 & v2)]************/
262     short v1_iir_coe[3];
263     short v1_fir_coe[3];
264     short v2_iir_coe[3];
265     short v2_fir_coe[3];
266 
267     /**********[Horizontal IIR (h1 & h2)]************/
268     short h1_iir1_coe[6];
269     short h2_iir1_coe[6];
270     short h1_iir2_coe[6];
271     short h2_iir2_coe[6];
272 
273     /**********[Focus value statistic param]**********/
274     // level depended gain
275     // input8 lumi, output8bit gain
276     unsigned char h_ldg_lumth[2];    //luminance thresh
277     unsigned char h_ldg_gain[2];     //gain for [minLum,maxLum]
278     unsigned short h_ldg_gslp[2];    //[slope_low,-slope_high]
279     unsigned char v_ldg_lumth[2];
280     unsigned char v_ldg_gain[2];
281     unsigned short v_ldg_gslp[2];
282 
283     // coring
284     unsigned short v_fv_thresh;
285     unsigned short h_fv_thresh;
286 
287     // left shift, more needed if outmode=square
288     unsigned char v1_fv_shift; //only for sel1
289     unsigned char v2_fv_shift;
290     unsigned char h1_fv_shift;
291     unsigned char h2_fv_shift;
292 
293     /**********[High light]**********/
294     unsigned short highlit_thresh;
295 }  rk_aiq_af_algo_meas_v31_t;
296 
297 typedef struct {
298     unsigned char af_en;
299     unsigned char rawaf_sel;
300     unsigned char gamma_en;
301     unsigned char gaus_en;
302     unsigned char v1_fir_sel;
303     unsigned char hiir_en;
304     unsigned char viir_en;
305     unsigned char v1_fv_outmode;    // 0 square, 1 absolute
306     unsigned char v2_fv_outmode;    // 0 square, 1 absolute
307     unsigned char h1_fv_outmode;    // 0 square, 1 absolute
308     unsigned char h2_fv_outmode;    // 0 square, 1 absolute
309     unsigned char ldg_en;
310     unsigned char accu_8bit_mode;
311     unsigned char ae_mode;
312     unsigned char y_mode;
313     unsigned char vldg_sel;
314     unsigned char sobel_sel;
315     unsigned char v_dnscl_mode;
316     unsigned char from_awb;
317     unsigned char from_ynr;
318     unsigned char ae_config_use;
319     unsigned char ae_sel;
320     unsigned char from_bnr;
321     unsigned char bnrin_shift;
322     unsigned char hiir_left_border_mode;
323     unsigned char avg_ds_en;
324     unsigned char avg_ds_mode;
325 
326     unsigned char line_en[RKAIQ_RAWAF_LINE_NUM];
327     unsigned char line_num[RKAIQ_RAWAF_LINE_NUM];
328 
329     unsigned char window_num;
330     unsigned short wina_h_offs;
331     unsigned short wina_v_offs;
332     unsigned short wina_h_size;
333     unsigned short wina_v_size;
334     unsigned short winb_h_offs;
335     unsigned short winb_v_offs;
336     unsigned short winb_h_size;
337     unsigned short winb_v_size;
338 
339     unsigned short gamma_y[RKAIQ_RAWAF_GAMMA_NUM];
340 
341     // [old version param]
342     unsigned short thres;
343     unsigned char shift_sum_a;
344     unsigned char shift_sum_b;
345     unsigned char shift_y_a;
346     unsigned char shift_y_b;
347 
348     char gaus_coe[9];
349 
350     /**********[Vertical IIR (v1 & v2)]************/
351     short v1_iir_coe[3];
352     short v1_fir_coe[3];
353     short v2_iir_coe[3];
354     short v2_fir_coe[3];
355 
356     /**********[Horizontal IIR (h1 & h2)]************/
357     short h1_iir1_coe[6];
358     short h2_iir1_coe[6];
359     short h1_iir2_coe[6];
360     short h2_iir2_coe[6];
361 
362     /**********[Focus value statistic param]**********/
363     // level depended gain
364     // input8 lumi, output8bit gain
365     unsigned char h_ldg_lumth[2];    //luminance thresh
366     unsigned char h_ldg_gain[2];     //gain for [minLum,maxLum]
367     unsigned short h_ldg_gslp[2];    //[slope_low,-slope_high]
368     unsigned char v_ldg_lumth[2];
369     unsigned char v_ldg_gain[2];
370     unsigned short v_ldg_gslp[2];
371     unsigned char hldg_dilate_num;
372 
373     // coring
374     unsigned short v_fv_thresh;
375     unsigned short h_fv_thresh;
376     unsigned short v_fv_limit;
377     unsigned short v_fv_slope;
378     unsigned short h_fv_limit;
379     unsigned short h_fv_slope;
380 
381     // left shift, more needed if outmode=square
382     unsigned char v1_fv_shift; //only for sel1
383     unsigned char v2_fv_shift;
384     unsigned char h1_fv_shift;
385     unsigned char h2_fv_shift;
386 
387     // acc mode
388     unsigned char v1_acc_mode;
389     unsigned char v2_acc_mode;
390     unsigned char h1_acc_mode;
391     unsigned char h2_acc_mode;
392 
393     /**********[High light]**********/
394     unsigned short highlit_thresh;
395 
396     // bls for af
397     unsigned char bls_en;
398     short bls_offset;
399 }  rk_aiq_af_algo_meas_v32_t;
400 
401 typedef rk_aiq_af_algo_meas_v20_t rk_aiq_af_algo_meas_t;
402 typedef rk_aiq_af_algo_stat_v20_t rk_aiq_af_algo_stat_t;
403 
404 typedef struct {
405     bool vcm_config_valid;
406     bool zoomfocus_modifypos;
407     bool focus_correction;
408     bool zoom_correction;
409     bool lens_pos_valid;
410     bool zoom_pos_valid;
411     bool send_zoom_reback;
412     bool send_focus_reback;
413     bool end_zoom_chg;
414     bool focus_noreback;
415     int next_pos_num;
416     int next_lens_pos[RKAIQ_RAWAF_NEXT_ZOOMFOCUS_NUM];
417     int next_zoom_pos[RKAIQ_RAWAF_NEXT_ZOOMFOCUS_NUM];
418     int use_manual;
419     int auto_focpos;
420     int auto_zoompos;
421     int manual_focpos;
422     int manual_zoompos;
423     int vcm_start_ma;
424     int vcm_end_ma;
425 } rk_aiq_af_algo_focus_pos_t;
426 
427 typedef struct {
428     bool pdMirror;
429     unsigned int pdMean;
430     unsigned short pdWidth;
431     unsigned short pdHeight;
432     unsigned short *pdLData;
433     unsigned short *pdRData;
434 } rk_aiq_pdaf_algo_stat_t;
435 
436 typedef struct {
437     unsigned char pdMirrorInCalib;
438     unsigned char pdChangeLeftRight;
439     unsigned char pdLRInDiffLine;
440     unsigned short pdWidth;
441     unsigned short pdHeight;
442     struct rkmodule_pdaf_inf *otp_pdaf;
443 } rk_aiq_pdaf_algo_meas_t;
444 
445 typedef struct {
446     int iso;
447     float pdConfdRatio0;
448     float pdConfdRatio1;
449     float pdConfdRatio2;
450     float pdConfdRatio3;
451     float pdConfdThresh;
452     float stablePdRatio;
453     float stableCntRatio;
454     unsigned short convergedInfPdThresh;
455     unsigned short convergedMacPdThresh;
456     unsigned short defocusInfPdThresh;
457     unsigned short defocusMacPdThresh;
458     unsigned short stablePdOffset;
459     unsigned short noconfCntThresh;
460     unsigned char blkCntW;
461     unsigned char blkCntH;
462 
463     unsigned int fineSearchConfidence[RKAIQ_PDAF_FINE_SEARCH_RANGE_MAX];
464     int fineSearchRange[RKAIQ_PDAF_FINE_SEARCH_RANGE_MAX];
465     int fineSearchStepPos[RKAIQ_PDAF_FINE_SEARCH_RANGE_MAX];
466     int fineSearchTblCnt;
467 } rk_aiq_pdaf_algo_isopara_t;
468 
469 typedef struct rk_aiq_pdaf_resolution_s {
470     unsigned short pdOutWidth;
471     unsigned short pdOutHeight;
472     unsigned short pdCropX;
473     unsigned short pdCropY;
474     unsigned short pdBaseWidth;
475     unsigned short pdBaseHeight;
476 } rk_aiq_pdaf_resolution_t;
477 
478 typedef struct {
479     unsigned char pdVsImgoutMirror;
480     unsigned char pdVsCdDebug;
481     unsigned char pdDumpDebug;
482     unsigned char pdVerBinning;
483     unsigned char pdFrmInValid;
484     unsigned char pdDgainValid;
485     unsigned char pdGainMapNormEn;
486     unsigned char pdConfdMode;
487     unsigned char pdDiscardRegionEn;
488     unsigned short pdDumpMaxFrm;
489     unsigned short pdDataBit;
490     unsigned short pdBlkLevel;
491     unsigned short pdSearchRadius;
492     unsigned short pdConfdMwinFactor;
493     unsigned short pdGainMapW;
494     unsigned short pdGainMapH;
495     unsigned short pdDccMapW;
496     unsigned short pdDccMapH;
497     float pdStepRatio[RKAIQ_PDAF_STEPRATIO_NUM];
498     unsigned short pdStepDefocus[RKAIQ_PDAF_STEPRATIO_NUM];
499     rk_aiq_pdaf_algo_isopara_t pdIsoPara[RKAIQ_PDAF_ISOPARA_NUM];
500     int pdIsoParaCnt;
501     unsigned int pdCenterMinFv;
502     float pdCenterMinRatio;
503     float pdHighlightRatio;
504     float pdNoiseSn;
505     float pdNoiseRn[2];
506     float pdNoisePn;
507     float pdSatValRatio;
508     float pdSatCntRatio;
509     float pdLessTextureRatio;
510     short pdTargetOffset;
511     rk_aiq_pdaf_resolution_t pdResoInf;
512 } rk_aiq_pdaf_algo_config_t;
513 
514 int get_lpfv(uint32_t sequence, uint8_t *image_buf, int32_t _img_width, int32_t _img_height,
515     int32_t _img_width_align, int32_t _img_height_align, uint8_t *pAfTmp, uint32_t sub_shp4_4[225],
516     uint32_t sub_shp8_8[225], uint32_t high_light[225], uint32_t high_light2[225], rk_aiq_af_algo_meas_v20_t *param);
517 
518 RKAIQ_END_DECLARE
519 
520 #endif
521