1 /*
2 * Copyright (c) 2019 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 #include "sample_comm.h"
19
sample_af_usage()20 static void sample_af_usage()
21 {
22 printf("\n\nUsage : \n");
23 printf("\t 0) AF: setFocusMode-OP_AUTO.\n");
24 printf("\t 1) AF: setFocusMode-OP_MANUAL.\n");
25 printf("\t 2) AF: setFocusMode-OP_SEMI_AUTO.\n");
26 printf("\t 3) AF: getFocusMode.\n");
27 printf("\t 4) AF: setFocusWin.\n");
28 printf("\t 5) AF: setFocusWin to defalut.\n");
29 printf("\t 6) AF: getFocusWin.\n");
30 printf("\t 7) AF: lockFocus.\n");
31 printf("\t 8) AF: unlockFocus.\n");
32 printf("\t 9) AF: oneshotFocus.\n");
33 printf("\t a) AF: manualTrigerFocus.\n");
34 printf("\t b) AF: trackingFocus.\n");
35 printf("\t c) AF: startZoomCalib.\n");
36 printf("\t d) AF: resetZoom.\n");
37 printf("\t e) AF: setAngleZ.\n");
38 printf("\t f) AF: + ZoomPosition.\n");
39 printf("\t g) AF: - ZoomPosition.\n");
40 printf("\t i) AF: + FocusPosition.\n");
41 printf("\t j) AF: - FocusPosition.\n");
42 printf("\t k) AF: getSearchResult.\n");
43 printf("\t l) AF: setFocusMeasCfg sync.\n");
44 printf("\t m) AF: setFocusMeasCfg async.\n");
45 printf("\t n) AF: getAfAttrib.\n");
46 printf("\t q) AF: return to main sample screen.\n");
47
48 printf("\n");
49 printf("\t please press the key: ");
50
51 return;
52 }
53
sample_set_focus_automode(const rk_aiq_sys_ctx_t * ctx)54 void sample_set_focus_automode(const rk_aiq_sys_ctx_t* ctx)
55 {
56 rk_aiq_uapi2_setFocusMode(ctx, OP_AUTO);
57 printf("setFocusMode auto\n");
58 }
59
sample_set_focus_manualmode(const rk_aiq_sys_ctx_t * ctx)60 void sample_set_focus_manualmode(const rk_aiq_sys_ctx_t* ctx)
61 {
62 rk_aiq_uapi2_setFocusMode(ctx, OP_MANUAL);
63 printf("setFocusMode manual\n");
64 }
65
sample_set_focus_semiautomode(const rk_aiq_sys_ctx_t * ctx)66 void sample_set_focus_semiautomode(const rk_aiq_sys_ctx_t* ctx)
67 {
68 rk_aiq_uapi2_setFocusMode(ctx, OP_SEMI_AUTO);
69 printf("setFocusMode semi-auto\n");
70 }
71
sample_get_focus_mode(const rk_aiq_sys_ctx_t * ctx)72 void sample_get_focus_mode(const rk_aiq_sys_ctx_t* ctx)
73 {
74 opMode_t mode;
75
76 rk_aiq_uapi2_getFocusMode(ctx, &mode);
77 if (mode == OP_AUTO) {
78 printf("getFocusMode auto\n");
79 } else if (mode == OP_MANUAL) {
80 printf("getFocusMode manual\n");
81 } else if (mode == OP_SEMI_AUTO) {
82 printf("getFocusMode semi-auto\n");
83 } else {
84 printf("getFocusMode unknow mode %d\n", mode);
85 }
86 }
87
sample_set_focus_win(const rk_aiq_sys_ctx_t * ctx)88 void sample_set_focus_win(const rk_aiq_sys_ctx_t* ctx)
89 {
90 paRect_t rect;
91
92 rect.x = 4;
93 rect.y = 4;
94 rect.w = 800;
95 rect.h = 600;
96 rk_aiq_uapi2_setFocusWin(ctx, &rect);
97 printf("setFocusWin rect: x %d, y %d, w %d, h %d\n", rect.x, rect.y, rect.w, rect.h);
98 }
99
sample_set_focus_defwin(const rk_aiq_sys_ctx_t * ctx)100 void sample_set_focus_defwin(const rk_aiq_sys_ctx_t* ctx)
101 {
102 paRect_t rect;
103
104 memset(&rect, 0, sizeof(rect));
105 rk_aiq_uapi2_setFocusWin(ctx, &rect);
106 printf("setFocusWin rect to default value\n");
107 }
108
sample_get_focus_win(const rk_aiq_sys_ctx_t * ctx)109 void sample_get_focus_win(const rk_aiq_sys_ctx_t* ctx)
110 {
111 paRect_t rect;
112
113 memset(&rect, 0, sizeof(rect));
114 rk_aiq_uapi2_getFocusWin(ctx, &rect);
115 printf("getFocusWin rect: x %d, y %d, w %d, h %d\n", rect.x, rect.y, rect.w, rect.h);
116 }
117
sample_lock_focus(const rk_aiq_sys_ctx_t * ctx)118 void sample_lock_focus(const rk_aiq_sys_ctx_t* ctx)
119 {
120 rk_aiq_uapi2_lockFocus(ctx);
121 printf("lockFocus\n");
122 }
123
sample_unlock_focus(const rk_aiq_sys_ctx_t * ctx)124 void sample_unlock_focus(const rk_aiq_sys_ctx_t* ctx)
125 {
126 rk_aiq_uapi2_unlockFocus(ctx);
127 printf("unlockFocus\n");
128 }
129
sample_oneshot_focus(const rk_aiq_sys_ctx_t * ctx)130 void sample_oneshot_focus(const rk_aiq_sys_ctx_t* ctx)
131 {
132 rk_aiq_uapi2_oneshotFocus(ctx);
133 printf("oneshotFocus\n");
134 }
135
sample_manual_triger_focus(const rk_aiq_sys_ctx_t * ctx)136 void sample_manual_triger_focus(const rk_aiq_sys_ctx_t* ctx)
137 {
138 rk_aiq_uapi2_manualTrigerFocus(ctx);
139 printf("manualTrigerFocus\n");
140 }
141
sample_tracking_focus(const rk_aiq_sys_ctx_t * ctx)142 void sample_tracking_focus(const rk_aiq_sys_ctx_t* ctx)
143 {
144 rk_aiq_uapi2_trackingFocus(ctx);
145 printf("trackingFocus\n");
146 }
147
sample_start_zoomcalib(const rk_aiq_sys_ctx_t * ctx)148 void sample_start_zoomcalib(const rk_aiq_sys_ctx_t* ctx)
149 {
150 rk_aiq_uapi2_startZoomCalib(ctx);
151 printf("startZoomCalib\n");
152 }
153
sample_reset_zoom(const rk_aiq_sys_ctx_t * ctx)154 void sample_reset_zoom(const rk_aiq_sys_ctx_t* ctx)
155 {
156 rk_aiq_uapi2_resetZoom(ctx);
157 printf("resetZoom\n");
158 }
159
sample_set_anglez(const rk_aiq_sys_ctx_t * ctx)160 void sample_set_anglez(const rk_aiq_sys_ctx_t* ctx)
161 {
162 float angleZ = 90;
163 rk_aiq_uapi2_setAngleZ(ctx, angleZ);
164 printf("setAngleZ %f degree\n", angleZ);
165 }
166
167
168
sample_add_zoom_position(const rk_aiq_sys_ctx_t * ctx)169 void sample_add_zoom_position(const rk_aiq_sys_ctx_t* ctx)
170 {
171 rk_aiq_af_zoomrange range;
172 int code;
173
174 rk_aiq_uapi2_getZoomRange(ctx, &range);
175 printf("zoom.min_pos %d, zoom.max_pos %d\n", range.min_pos, range.max_pos);
176
177 rk_aiq_uapi2_getOpZoomPosition(ctx, &code);
178 printf("getOpZoomPosition code %d\n", code);
179
180 code += 20;
181 if (code > range.max_pos)
182 code = range.max_pos;
183 rk_aiq_uapi2_setOpZoomPosition(ctx, code);
184 rk_aiq_uapi2_endOpZoomChange(ctx);
185 printf("setOpZoomPosition %d\n", code);
186 }
187
sample_sub_zoom_position(const rk_aiq_sys_ctx_t * ctx)188 void sample_sub_zoom_position(const rk_aiq_sys_ctx_t* ctx)
189 {
190 rk_aiq_af_zoomrange range;
191 int code;
192
193 rk_aiq_uapi2_getZoomRange(ctx, &range);
194 printf("zoom.min_pos %d, zoom.max_pos %d\n", range.min_pos, range.max_pos);
195
196 rk_aiq_uapi2_getOpZoomPosition(ctx, &code);
197 printf("getOpZoomPosition code %d\n", code);
198
199 code -= 20;
200 if (code < range.min_pos)
201 code = range.min_pos;
202 rk_aiq_uapi2_setOpZoomPosition(ctx, code);
203 rk_aiq_uapi2_endOpZoomChange(ctx);
204 printf("setOpZoomPosition %d\n", code);
205 }
206
sample_add_focus_position(const rk_aiq_sys_ctx_t * ctx)207 void sample_add_focus_position(const rk_aiq_sys_ctx_t* ctx)
208 {
209 rk_aiq_af_focusrange range;
210 short code;
211
212 rk_aiq_uapi2_getFocusRange(ctx, &range);
213 printf("focus.min_pos %d, focus.max_pos %d\n", range.min_pos, range.max_pos);
214
215 rk_aiq_uapi2_getFocusPosition(ctx, &code);
216
217 code++;
218 if (code > range.max_pos)
219 code = range.max_pos;
220 rk_aiq_uapi2_setFocusPosition(ctx, code);
221 printf("set Focus Code %d\n", code);
222 }
223
sample_sub_focus_position(const rk_aiq_sys_ctx_t * ctx)224 void sample_sub_focus_position(const rk_aiq_sys_ctx_t* ctx)
225 {
226 rk_aiq_af_focusrange range;
227 short code;
228
229 rk_aiq_uapi2_getFocusRange(ctx, &range);
230 printf("focus.min_pos %d, focus.max_pos %d\n", range.min_pos, range.max_pos);
231
232 rk_aiq_uapi2_getFocusPosition(ctx, &code);
233
234 code--;
235 if (code < range.min_pos)
236 code = range.min_pos;
237 rk_aiq_uapi2_setFocusPosition(ctx, code);
238 printf("set Focus Code %d\n", code);
239 }
240
sample_get_af_search_result(const rk_aiq_sys_ctx_t * ctx)241 void sample_get_af_search_result(const rk_aiq_sys_ctx_t* ctx)
242 {
243 rk_aiq_af_result_t result;
244 rk_aiq_uapi2_getSearchResult(ctx, &result);
245 printf("get search result, stat: %d, final_pos: %d\n", result.stat, result.final_pos);
246 }
247
sample_set_af_manual_meascfg(const rk_aiq_sys_ctx_t * ctx,rk_aiq_uapi_mode_sync_e sync_mode)248 void sample_set_af_manual_meascfg(const rk_aiq_sys_ctx_t* ctx, rk_aiq_uapi_mode_sync_e sync_mode)
249 {
250 rk_aiq_af_attrib_t attr;
251 uint16_t gamma_y[RKAIQ_RAWAF_GAMMA_NUM] =
252 {0, 45, 108, 179, 245, 344, 409, 459, 500, 567, 622, 676, 759, 833, 896, 962, 1023};
253
254 rk_aiq_user_api2_af_GetAttrib(ctx, &attr);
255 attr.AfMode = RKAIQ_AF_MODE_FIXED;
256 if (CHECK_ISP_HW_V20() || CHECK_ISP_HW_V21()) {
257 memset(&attr.manual_meascfg, 0, sizeof(attr.manual_meascfg));
258 attr.manual_meascfg.contrast_af_en = 1;
259 attr.manual_meascfg.rawaf_sel = 0; // normal = 0; hdr = 1
260
261 attr.manual_meascfg.window_num = 2;
262 attr.manual_meascfg.wina_h_offs = 2;
263 attr.manual_meascfg.wina_v_offs = 2;
264 attr.manual_meascfg.wina_h_size = 2580;
265 attr.manual_meascfg.wina_v_size = 1935;
266
267 attr.manual_meascfg.winb_h_offs = 500;
268 attr.manual_meascfg.winb_v_offs = 600;
269 attr.manual_meascfg.winb_h_size = 300;
270 attr.manual_meascfg.winb_v_size = 300;
271
272 attr.manual_meascfg.gamma_flt_en = 1;
273 memcpy(attr.manual_meascfg.gamma_y, gamma_y, RKAIQ_RAWAF_GAMMA_NUM * sizeof(uint16_t));
274
275 attr.manual_meascfg.gaus_flt_en = 1;
276 attr.manual_meascfg.gaus_h0 = 0x20;
277 attr.manual_meascfg.gaus_h1 = 0x10;
278 attr.manual_meascfg.gaus_h2 = 0x08;
279
280 attr.manual_meascfg.afm_thres = 4;
281
282 attr.manual_meascfg.lum_var_shift[0] = 0;
283 attr.manual_meascfg.afm_var_shift[0] = 0;
284 attr.manual_meascfg.lum_var_shift[1] = 4;
285 attr.manual_meascfg.afm_var_shift[1] = 4;
286
287 attr.manual_meascfg.sp_meas.enable = true;
288 attr.manual_meascfg.sp_meas.ldg_xl = 10;
289 attr.manual_meascfg.sp_meas.ldg_yl = 28;
290 attr.manual_meascfg.sp_meas.ldg_kl = (255-28)*256/45;
291 attr.manual_meascfg.sp_meas.ldg_xh = 118;
292 attr.manual_meascfg.sp_meas.ldg_yh = 8;
293 attr.manual_meascfg.sp_meas.ldg_kh = (255-8)*256/15;
294 attr.manual_meascfg.sp_meas.highlight_th = 245;
295 attr.manual_meascfg.sp_meas.highlight2_th = 200;
296 } else if (CHECK_ISP_HW_V30()) {
297 memset(&attr.manual_meascfg_v30, 0, sizeof(attr.manual_meascfg_v30));
298 attr.manual_meascfg_v30.af_en = 1;
299 attr.manual_meascfg_v30.rawaf_sel = 0; // normal = 0; hdr = 1
300 attr.manual_meascfg_v30.accu_8bit_mode = 1;
301 attr.manual_meascfg_v30.ae_mode = 1;
302
303 attr.manual_meascfg_v30.window_num = 2;
304 attr.manual_meascfg_v30.wina_h_offs = 2;
305 attr.manual_meascfg_v30.wina_v_offs = 2;
306 attr.manual_meascfg_v30.wina_h_size = 2580;
307 attr.manual_meascfg_v30.wina_v_size = 1935;
308
309 attr.manual_meascfg_v30.winb_h_offs = 500;
310 attr.manual_meascfg_v30.winb_v_offs = 600;
311 attr.manual_meascfg_v30.winb_h_size = 300;
312 attr.manual_meascfg_v30.winb_v_size = 300;
313
314 attr.manual_meascfg_v30.gamma_en = 1;
315 memcpy(attr.manual_meascfg_v30.gamma_y, gamma_y, RKAIQ_RAWAF_GAMMA_NUM * sizeof(uint16_t));
316
317 // param for winb
318 attr.manual_meascfg_v30.thres = 4;
319 attr.manual_meascfg_v30.shift_sum_a = 0;
320 attr.manual_meascfg_v30.shift_y_a = 0;
321 attr.manual_meascfg_v30.shift_sum_b = 1;
322 attr.manual_meascfg_v30.shift_y_b = 1;
323
324 // Vertical filter
325 // lowlit [0.025, 0.075], max=0.5
326 int ver_flt_lowlit[6] =
327 { 503, 8, 9, -1997, 0, 1997 };
328
329 // normal [0.042, 0.14], max=0.5
330 int ver_flt_normal[6] =
331 { 483, 28, 28, -1186, 0, 1186 };
332
333 attr.manual_meascfg_v30.gaus_en = 1;
334 attr.manual_meascfg_v30.v1_fir_sel = 1; // 0:old 1:new
335 attr.manual_meascfg_v30.viir_en = 1;
336 attr.manual_meascfg_v30.v1_fv_outmode = 0; // 0 square, 1 absolute
337 attr.manual_meascfg_v30.v2_fv_outmode = 0; // 0 square, 1 absolute
338 attr.manual_meascfg_v30.v1_fv_shift = 1; //only for sel1
339 attr.manual_meascfg_v30.v2_fv_shift = 1;
340 attr.manual_meascfg_v30.v_fv_thresh = 0;
341 attr.manual_meascfg_v30.v1_iir_coe[1] = ver_flt_lowlit[0];
342 attr.manual_meascfg_v30.v1_iir_coe[4] = ver_flt_lowlit[1];
343 attr.manual_meascfg_v30.v1_iir_coe[7] = ver_flt_lowlit[2];
344 for (int i = 0; i < 3; i++) {
345 attr.manual_meascfg_v30.v1_fir_coe[i] = ver_flt_lowlit[i + 3];
346 attr.manual_meascfg_v30.v2_iir_coe[i] = ver_flt_normal[i];
347 attr.manual_meascfg_v30.v2_fir_coe[i] = ver_flt_normal[i + 3];
348 }
349
350 // Horizontal filter
351 // lowlit [0.025, 0.075], max=0.5
352 int hor_flt_lowlit[2][6] =
353 {
354 { 203, 811, -375, 673, 0, -673 },
355 { 31, 945, -448, 323, 0, -323 },
356 };
357 // normal [0.042, 0.14], max=0.5
358 int hor_flt_normal[2][6] =
359 {
360 { 512, 557, -276, 460, 0, -460 },
361 { 100, 870, -399, 191, 0, -191 },
362 };
363
364 attr.manual_meascfg_v30.hiir_en = 1;
365 attr.manual_meascfg_v30.h1_fv_outmode = 0; // 0 square, 1 absolute
366 attr.manual_meascfg_v30.h2_fv_outmode = 0; // 0 square, 1 absolute
367 attr.manual_meascfg_v30.h1_fv_shift = 1;
368 attr.manual_meascfg_v30.h2_fv_shift = 1;
369 attr.manual_meascfg_v30.h_fv_thresh = 0;
370 for (int i = 0; i < 6; i++) {
371 attr.manual_meascfg_v30.h1_iir1_coe[i] = hor_flt_lowlit[0][i];
372 attr.manual_meascfg_v30.h1_iir2_coe[i] = hor_flt_lowlit[1][i];
373 attr.manual_meascfg_v30.h2_iir1_coe[i] = hor_flt_normal[0][i];
374 attr.manual_meascfg_v30.h2_iir2_coe[i] = hor_flt_normal[1][i];
375 }
376
377 // level depended gain
378 attr.manual_meascfg_v30.ldg_en = 0;
379 attr.manual_meascfg_v30.h_ldg_lumth[0] = 64;
380 attr.manual_meascfg_v30.h_ldg_gain[0] = 28;
381 attr.manual_meascfg_v30.h_ldg_gslp[0] = (255-28)*255/45;
382 attr.manual_meascfg_v30.h_ldg_lumth[1] = 185;
383 attr.manual_meascfg_v30.h_ldg_gain[1] = 8;
384 attr.manual_meascfg_v30.h_ldg_gslp[1] = (255-8)*255/45;
385 attr.manual_meascfg_v30.v_ldg_lumth[0] = 64;
386 attr.manual_meascfg_v30.v_ldg_gain[0] = 28;
387 attr.manual_meascfg_v30.v_ldg_gslp[0] = (255-28)*255/45;
388 attr.manual_meascfg_v30.v_ldg_lumth[1] = 185;
389 attr.manual_meascfg_v30.v_ldg_gain[1] = 8;
390 attr.manual_meascfg_v30.v_ldg_gslp[1] = (255-8)*255/45;
391
392 // High light
393 attr.manual_meascfg_v30.highlit_thresh = 912;
394 } else if (CHECK_ISP_HW_V32()) {
395 // rk1106
396 memset(&attr.manual_meascfg_v31, 0, sizeof(attr.manual_meascfg_v31));
397 attr.manual_meascfg_v31.af_en = 1;
398 attr.manual_meascfg_v31.rawaf_sel = 0; // normal = 0; hdr = 1
399 attr.manual_meascfg_v31.accu_8bit_mode = 1;
400 attr.manual_meascfg_v31.ae_mode = 1;
401 attr.manual_meascfg_v31.v_dnscl_mode = 1;
402
403 attr.manual_meascfg_v31.window_num = 2;
404 attr.manual_meascfg_v31.wina_h_offs = 2;
405 attr.manual_meascfg_v31.wina_v_offs = 2;
406 attr.manual_meascfg_v31.wina_h_size = 2580;
407 attr.manual_meascfg_v31.wina_v_size = 1935;
408
409 attr.manual_meascfg_v31.winb_h_offs = 500;
410 attr.manual_meascfg_v31.winb_v_offs = 600;
411 attr.manual_meascfg_v31.winb_h_size = 300;
412 attr.manual_meascfg_v31.winb_v_size = 300;
413
414 attr.manual_meascfg_v31.gamma_en = 1;
415 memcpy(attr.manual_meascfg_v31.gamma_y, gamma_y, RKAIQ_RAWAF_GAMMA_NUM * sizeof(uint16_t));
416
417 // param for winb
418 attr.manual_meascfg_v31.thres = 4;
419 attr.manual_meascfg_v31.shift_sum_a = 0;
420 attr.manual_meascfg_v31.shift_y_a = 0;
421 attr.manual_meascfg_v31.shift_sum_b = 1;
422 attr.manual_meascfg_v31.shift_y_b = 1;
423
424 // Vertical filter
425 // lowlit [0.025, 0.075], max=0.5
426 int ver_flt_lowlit[6] =
427 { -372, 851, 465, -77, 0, 77 };
428
429 // normal [0.042, 0.14], max=0.5
430 int ver_flt_normal[6] =
431 { -265, 686, 512, -124, 0, 124 };
432
433 attr.manual_meascfg_v31.gaus_en = 1;
434 attr.manual_meascfg_v31.gaus_coe[1] = 64;
435 attr.manual_meascfg_v31.gaus_coe[4] = 64;
436 attr.manual_meascfg_v31.v1_fir_sel = 1; // 0:old 1:new
437 attr.manual_meascfg_v31.viir_en = 1;
438 attr.manual_meascfg_v31.v1_fv_outmode = 0; // 0 square, 1 absolute
439 attr.manual_meascfg_v31.v2_fv_outmode = 0; // 0 square, 1 absolute
440 attr.manual_meascfg_v31.v1_fv_shift = 1; //only for sel1
441 attr.manual_meascfg_v31.v2_fv_shift = 1;
442 attr.manual_meascfg_v31.v_fv_thresh = 0;
443 for (int i = 0; i < 3; i++) {
444 attr.manual_meascfg_v31.v1_iir_coe[i] = ver_flt_lowlit[i];
445 attr.manual_meascfg_v31.v1_fir_coe[i] = ver_flt_lowlit[i + 3];
446 attr.manual_meascfg_v31.v2_iir_coe[i] = ver_flt_normal[i];
447 attr.manual_meascfg_v31.v2_fir_coe[i] = ver_flt_normal[i + 3];
448 }
449
450 // Horizontal filter
451 // lowlit [0.025, 0.075], max=0.5
452 int hor_flt_lowlit[2][6] =
453 {
454 { 203, 811, -375, 673, 0, -673 },
455 { 31, 945, -448, 323, 0, -323 },
456 };
457 // normal [0.042, 0.14], max=0.5
458 int hor_flt_normal[2][6] =
459 {
460 { 512, 557, -276, 460, 0, -460 },
461 { 100, 870, -399, 191, 0, -191 },
462 };
463 attr.manual_meascfg_v31.hiir_en = 1;
464 attr.manual_meascfg_v31.h1_fv_outmode = 0; // 0 square, 1 absolute
465 attr.manual_meascfg_v31.h2_fv_outmode = 0; // 0 square, 1 absolute
466 attr.manual_meascfg_v31.h1_fv_shift = 1;
467 attr.manual_meascfg_v31.h2_fv_shift = 1;
468 attr.manual_meascfg_v31.h_fv_thresh = 0;
469 for (int i = 0; i < 6; i++) {
470 attr.manual_meascfg_v31.h1_iir1_coe[i] = hor_flt_lowlit[0][i];
471 attr.manual_meascfg_v31.h1_iir2_coe[i] = hor_flt_lowlit[1][i];
472 attr.manual_meascfg_v31.h2_iir1_coe[i] = hor_flt_normal[0][i];
473 attr.manual_meascfg_v31.h2_iir2_coe[i] = hor_flt_normal[1][i];
474 }
475
476 // level depended gain
477 attr.manual_meascfg_v31.ldg_en = 0;
478 attr.manual_meascfg_v31.h_ldg_lumth[0] = 64;
479 attr.manual_meascfg_v31.h_ldg_gain[0] = 28;
480 attr.manual_meascfg_v31.h_ldg_gslp[0] = (255-28)*255/45;
481 attr.manual_meascfg_v31.h_ldg_lumth[1] = 185;
482 attr.manual_meascfg_v31.h_ldg_gain[1] = 8;
483 attr.manual_meascfg_v31.h_ldg_gslp[1] = (255-8)*255/45;
484 attr.manual_meascfg_v31.v_ldg_lumth[0] = 64;
485 attr.manual_meascfg_v31.v_ldg_gain[0] = 28;
486 attr.manual_meascfg_v31.v_ldg_gslp[0] = (255-28)*255/45;
487 attr.manual_meascfg_v31.v_ldg_lumth[1] = 185;
488 attr.manual_meascfg_v31.v_ldg_gain[1] = 8;
489 attr.manual_meascfg_v31.v_ldg_gslp[1] = (255-8)*255/45;
490
491 // High light
492 attr.manual_meascfg_v31.highlit_thresh = 912;
493 } else {
494 // rk3562
495 memset(&attr.manual_meascfg_v32, 0, sizeof(attr.manual_meascfg_v32));
496 attr.manual_meascfg_v32.af_en = 1;
497 attr.manual_meascfg_v32.rawaf_sel = 0; // normal = 0; hdr = 1
498 attr.manual_meascfg_v32.accu_8bit_mode = 1;
499 attr.manual_meascfg_v32.ae_mode = 1;
500 attr.manual_meascfg_v32.ae_sel = 1;
501 attr.manual_meascfg_v32.v_dnscl_mode = 1;
502
503 attr.manual_meascfg_v32.window_num = 2;
504 attr.manual_meascfg_v32.wina_h_offs = 2;
505 attr.manual_meascfg_v32.wina_v_offs = 2;
506 attr.manual_meascfg_v32.wina_h_size = 2580;
507 attr.manual_meascfg_v32.wina_v_size = 1935;
508
509 attr.manual_meascfg_v32.winb_h_offs = 500;
510 attr.manual_meascfg_v32.winb_v_offs = 600;
511 attr.manual_meascfg_v32.winb_h_size = 300;
512 attr.manual_meascfg_v32.winb_v_size = 300;
513
514 attr.manual_meascfg_v32.gamma_en = 1;
515 memcpy(attr.manual_meascfg_v32.gamma_y, gamma_y, RKAIQ_RAWAF_GAMMA_NUM * sizeof(uint16_t));
516
517 // param for winb
518 attr.manual_meascfg_v32.thres = 4;
519 attr.manual_meascfg_v32.shift_sum_a = 0;
520 attr.manual_meascfg_v32.shift_y_a = 0;
521 attr.manual_meascfg_v32.shift_sum_b = 1;
522 attr.manual_meascfg_v32.shift_y_b = 1;
523
524 // Vertical filter
525 // lowlit [0.025, 0.075], max=0.5
526 int ver_flt_lowlit[6] =
527 { -372, 851, 465, -77, 0, 77 };
528
529 // normal [0.042, 0.14], max=0.5
530 int ver_flt_normal[6] =
531 { -265, 686, 512, -124, 0, 124 };
532
533 attr.manual_meascfg_v32.gaus_en = 1;
534 attr.manual_meascfg_v32.gaus_coe[1] = 64;
535 attr.manual_meascfg_v32.gaus_coe[4] = 64;
536 attr.manual_meascfg_v32.v1_fir_sel = 1; // 0:old 1:new
537 attr.manual_meascfg_v32.viir_en = 1;
538 attr.manual_meascfg_v32.v1_fv_outmode = 0; // 0 square, 1 absolute
539 attr.manual_meascfg_v32.v1_fv_shift = 1; //only for sel1
540 attr.manual_meascfg_v32.v_fv_thresh = 0;
541 attr.manual_meascfg_v32.v_fv_limit = 1023;
542 attr.manual_meascfg_v32.v_fv_slope = 256;
543 for (int i = 0; i < 3; i++) {
544 attr.manual_meascfg_v32.v1_iir_coe[i] = ver_flt_normal[i];
545 attr.manual_meascfg_v32.v1_fir_coe[i] = ver_flt_normal[i + 3];
546 }
547
548 // Horizontal filter
549 // lowlit [0.025, 0.075], max=0.5
550 int hor_flt_lowlit[2][6] =
551 {
552 { 512, 811, -375, 266, 0, -266 },
553 { 249, 945, -448, 41, 0, -41 },
554 };
555 // normal [0.042, 0.14], max=0.5
556 int hor_flt_normal[2][6] =
557 {
558 { 512, 557, -276, 460, 0, -460 },
559 { 512, 870, -399, 37, 0, -37 },
560 };
561 attr.manual_meascfg_v32.hiir_en = 1;
562 attr.manual_meascfg_v32.h1_fv_outmode = 0; // 0 square, 1 absolute
563 attr.manual_meascfg_v32.h1_fv_shift = 1;
564 attr.manual_meascfg_v32.h_fv_thresh = 0;
565 attr.manual_meascfg_v32.h_fv_limit = 1023;
566 attr.manual_meascfg_v32.h_fv_slope = 256;
567 for (int i = 0; i < 6; i++) {
568 attr.manual_meascfg_v32.h1_iir1_coe[i] = hor_flt_normal[0][i];
569 attr.manual_meascfg_v32.h1_iir2_coe[i] = hor_flt_normal[1][i];
570 }
571
572 // level depended gain
573 attr.manual_meascfg_v32.ldg_en = 0;
574 attr.manual_meascfg_v32.h_ldg_lumth[0] = 64;
575 attr.manual_meascfg_v32.h_ldg_gain[0] = 28;
576 attr.manual_meascfg_v32.h_ldg_gslp[0] = (255-28)*255/45;
577 attr.manual_meascfg_v32.h_ldg_lumth[1] = 185;
578 attr.manual_meascfg_v32.h_ldg_gain[1] = 8;
579 attr.manual_meascfg_v32.h_ldg_gslp[1] = (255-8)*255/45;
580 attr.manual_meascfg_v32.v_ldg_lumth[0] = 64;
581 attr.manual_meascfg_v32.v_ldg_gain[0] = 28;
582 attr.manual_meascfg_v32.v_ldg_gslp[0] = (255-28)*255/45;
583 attr.manual_meascfg_v32.v_ldg_lumth[1] = 185;
584 attr.manual_meascfg_v32.v_ldg_gain[1] = 8;
585 attr.manual_meascfg_v32.v_ldg_gslp[1] = (255-8)*255/45;
586 attr.manual_meascfg_v32.hldg_dilate_num = 0;
587
588 // High light
589 attr.manual_meascfg_v32.highlit_thresh = 912;
590 // bls
591 attr.manual_meascfg_v32.bls_en = 0;
592 attr.manual_meascfg_v32.bls_offset = 0;
593 }
594
595 attr.sync.sync_mode = sync_mode;
596 rk_aiq_user_api2_af_SetAttrib(ctx, &attr);
597 printf("setFocusMeasCfg\n");
598 }
599
sample_get_af_attrib(const rk_aiq_sys_ctx_t * ctx)600 void sample_get_af_attrib(const rk_aiq_sys_ctx_t* ctx)
601 {
602 rk_aiq_af_attrib_t attr;
603
604 rk_aiq_user_api2_af_GetAttrib(ctx, &attr);
605 printf("get sync.done %d, sync_mode %d\n", attr.sync.done, attr.sync.sync_mode);
606 }
607
sample_print_af_info(const void * arg)608 void sample_print_af_info(const void *arg)
609 {
610 printf ("enter AF modult test!\n");
611 }
612
sample_af_module(const void * arg)613 XCamReturn sample_af_module(const void *arg)
614 {
615 int key = -1;
616 CLEAR();
617 rk_aiq_wb_scene_t scene;
618 rk_aiq_wb_gain_t gain;
619 rk_aiq_wb_cct_t ct;
620 opMode_t mode;
621 const demo_context_t *demo_ctx = (demo_context_t *)arg;
622 const rk_aiq_sys_ctx_t* ctx = (const rk_aiq_sys_ctx_t*)(demo_ctx->aiq_ctx);
623 if (ctx == nullptr) {
624 ERR ("%s, ctx is nullptr\n", __FUNCTION__);
625 return XCAM_RETURN_ERROR_PARAM;
626 }
627
628 do {
629 sample_af_usage();
630
631 key = getchar ();
632 while (key == '\n' || key == '\r')
633 key = getchar();
634 printf ("\n\n");
635
636 switch (key)
637 {
638 case 'h':
639 sample_af_usage();
640 break;
641 case '0':
642 sample_set_focus_automode(ctx);
643 break;
644 case '1':
645 sample_set_focus_manualmode(ctx);
646 break;
647 case '2':
648 sample_set_focus_semiautomode(ctx);
649 break;
650 case '3':
651 sample_get_focus_mode(ctx);
652 break;
653 case '4':
654 sample_set_focus_win(ctx);
655 break;
656 case '5':
657 sample_set_focus_defwin(ctx);
658 break;
659 case '6':
660 sample_get_focus_win(ctx);
661 break;
662 case '7':
663 sample_lock_focus(ctx);
664 break;
665 case '8':
666 sample_unlock_focus(ctx);
667 break;
668 case '9':
669 sample_oneshot_focus(ctx);
670 break;
671 case 'a':
672 sample_manual_triger_focus(ctx);
673 break;
674 case 'b':
675 sample_tracking_focus(ctx);
676 break;
677 case 'c':
678 sample_start_zoomcalib(ctx);
679 break;
680 case 'd':
681 sample_reset_zoom(ctx);
682 break;
683 case 'e':
684 sample_set_anglez(ctx);
685 break;
686 case 'f':
687 sample_add_zoom_position(ctx);
688 break;
689 case 'g':
690 sample_sub_zoom_position(ctx);
691 break;
692 case 'i':
693 sample_add_focus_position(ctx);
694 break;
695 case 'j':
696 sample_sub_focus_position(ctx);
697 break;
698 case 'k':
699 sample_get_af_search_result(ctx);
700 break;
701 case 'l':
702 sample_set_af_manual_meascfg(ctx, RK_AIQ_UAPI_MODE_SYNC);
703 break;
704 case 'm':
705 sample_set_af_manual_meascfg(ctx, RK_AIQ_UAPI_MODE_ASYNC);
706 break;
707 case 'n':
708 sample_get_af_attrib(ctx);
709 break;
710 default:
711 break;
712 }
713 } while (key != 'q' && key != 'Q');
714
715 return XCAM_RETURN_NO_ERROR;
716 }
717
718
719