/*
|
* Copyright (c) 2019 Rockchip Corporation
|
*
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
* you may not use this file except in compliance with the License.
|
* You may obtain a copy of the License at
|
*
|
* http://www.apache.org/licenses/LICENSE-2.0
|
*
|
* Unless required by applicable law or agreed to in writing, software
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
* See the License for the specific language governing permissions and
|
* limitations under the License.
|
*
|
*/
|
|
#include "sample_comm.h"
|
|
static void sample_af_usage()
|
{
|
printf("\n\nUsage : \n");
|
printf("\t 0) AF: setFocusMode-OP_AUTO.\n");
|
printf("\t 1) AF: setFocusMode-OP_MANUAL.\n");
|
printf("\t 2) AF: setFocusMode-OP_SEMI_AUTO.\n");
|
printf("\t 3) AF: getFocusMode.\n");
|
printf("\t 4) AF: setFocusWin.\n");
|
printf("\t 5) AF: setFocusWin to defalut.\n");
|
printf("\t 6) AF: getFocusWin.\n");
|
printf("\t 7) AF: lockFocus.\n");
|
printf("\t 8) AF: unlockFocus.\n");
|
printf("\t 9) AF: oneshotFocus.\n");
|
printf("\t a) AF: manualTrigerFocus.\n");
|
printf("\t b) AF: trackingFocus.\n");
|
printf("\t c) AF: startZoomCalib.\n");
|
printf("\t d) AF: resetZoom.\n");
|
printf("\t e) AF: setAngleZ.\n");
|
printf("\t f) AF: + ZoomPosition.\n");
|
printf("\t g) AF: - ZoomPosition.\n");
|
printf("\t i) AF: + FocusPosition.\n");
|
printf("\t j) AF: - FocusPosition.\n");
|
printf("\t k) AF: getSearchResult.\n");
|
printf("\t l) AF: setFocusMeasCfg sync.\n");
|
printf("\t m) AF: setFocusMeasCfg async.\n");
|
printf("\t n) AF: getAfAttrib.\n");
|
printf("\t o) AF: get_customAfRes.\n");
|
printf("\t p) AF: set_customAfRes.\n");
|
printf("\t q) AF: return to main sample screen.\n");
|
|
printf("\n");
|
printf("\t please press the key: ");
|
|
return;
|
}
|
|
void sample_set_focus_automode(const rk_aiq_sys_ctx_t* ctx)
|
{
|
rk_aiq_uapi2_setFocusMode(ctx, OP_AUTO);
|
printf("setFocusMode auto\n");
|
}
|
|
void sample_set_focus_manualmode(const rk_aiq_sys_ctx_t* ctx)
|
{
|
rk_aiq_uapi2_setFocusMode(ctx, OP_MANUAL);
|
printf("setFocusMode manual\n");
|
}
|
|
void sample_set_focus_semiautomode(const rk_aiq_sys_ctx_t* ctx)
|
{
|
rk_aiq_uapi2_setFocusMode(ctx, OP_SEMI_AUTO);
|
printf("setFocusMode semi-auto\n");
|
}
|
|
void sample_get_focus_mode(const rk_aiq_sys_ctx_t* ctx)
|
{
|
opMode_t mode;
|
|
rk_aiq_uapi2_getFocusMode(ctx, &mode);
|
if (mode == OP_AUTO) {
|
printf("getFocusMode auto\n");
|
} else if (mode == OP_MANUAL) {
|
printf("getFocusMode manual\n");
|
} else if (mode == OP_SEMI_AUTO) {
|
printf("getFocusMode semi-auto\n");
|
} else {
|
printf("getFocusMode unknow mode %d\n", mode);
|
}
|
}
|
|
void sample_set_focus_win(const rk_aiq_sys_ctx_t* ctx)
|
{
|
paRect_t rect;
|
|
rect.x = 4;
|
rect.y = 4;
|
rect.w = 800;
|
rect.h = 600;
|
rk_aiq_uapi2_setFocusWin(ctx, &rect);
|
printf("setFocusWin rect: x %d, y %d, w %d, h %d\n", rect.x, rect.y, rect.w, rect.h);
|
}
|
|
void sample_set_focus_defwin(const rk_aiq_sys_ctx_t* ctx)
|
{
|
paRect_t rect;
|
|
memset(&rect, 0, sizeof(rect));
|
rk_aiq_uapi2_setFocusWin(ctx, &rect);
|
printf("setFocusWin rect to default value\n");
|
}
|
|
void sample_get_focus_win(const rk_aiq_sys_ctx_t* ctx)
|
{
|
paRect_t rect;
|
|
memset(&rect, 0, sizeof(rect));
|
rk_aiq_uapi2_getFocusWin(ctx, &rect);
|
printf("getFocusWin rect: x %d, y %d, w %d, h %d\n", rect.x, rect.y, rect.w, rect.h);
|
}
|
|
void sample_lock_focus(const rk_aiq_sys_ctx_t* ctx)
|
{
|
rk_aiq_uapi2_lockFocus(ctx);
|
printf("lockFocus\n");
|
}
|
|
void sample_unlock_focus(const rk_aiq_sys_ctx_t* ctx)
|
{
|
rk_aiq_uapi2_unlockFocus(ctx);
|
printf("unlockFocus\n");
|
}
|
|
void sample_oneshot_focus(const rk_aiq_sys_ctx_t* ctx)
|
{
|
rk_aiq_uapi2_oneshotFocus(ctx);
|
printf("oneshotFocus\n");
|
}
|
|
void sample_manual_triger_focus(const rk_aiq_sys_ctx_t* ctx)
|
{
|
rk_aiq_uapi2_manualTrigerFocus(ctx);
|
printf("manualTrigerFocus\n");
|
}
|
|
void sample_tracking_focus(const rk_aiq_sys_ctx_t* ctx)
|
{
|
rk_aiq_uapi2_trackingFocus(ctx);
|
printf("trackingFocus\n");
|
}
|
|
void sample_start_zoomcalib(const rk_aiq_sys_ctx_t* ctx)
|
{
|
rk_aiq_uapi2_startZoomCalib(ctx);
|
printf("startZoomCalib\n");
|
}
|
|
void sample_reset_zoom(const rk_aiq_sys_ctx_t* ctx)
|
{
|
rk_aiq_uapi2_resetZoom(ctx);
|
printf("resetZoom\n");
|
}
|
|
void sample_set_anglez(const rk_aiq_sys_ctx_t* ctx)
|
{
|
float angleZ = 90;
|
rk_aiq_uapi2_setAngleZ(ctx, angleZ);
|
printf("setAngleZ %f degree\n", angleZ);
|
}
|
|
void sample_get_customAfRes(const rk_aiq_sys_ctx_t* ctx)
|
{
|
rk_tool_customAf_res_t att;
|
int i;
|
|
rk_aiq_uapi2_getCustomAfRes(ctx, &att);
|
printf("af_en %d\n", att.af_en);
|
printf("rawaf_sel %d\n", att.rawaf_sel);
|
printf("gamma_en %d\n", att.gamma_en);
|
printf("gaus_en %d\n", att.gaus_en);
|
printf("v1_fir_sel %d\n", att.v1_fir_sel);
|
printf("hiir_en %d\n", att.hiir_en);
|
printf("viir_en %d\n", att.viir_en);
|
printf("v1_fv_outmode %d\n", att.v1_fv_outmode);
|
printf("v2_fv_outmode %d\n", att.v2_fv_outmode);
|
printf("h1_fv_outmode %d\n", att.h1_fv_outmode);
|
printf("h2_fv_outmode %d\n", att.h2_fv_outmode);
|
printf("ldg_en %d\n", att.ldg_en);
|
printf("ae_mode %d\n", att.ae_mode);
|
printf("y_mode %d\n", att.y_mode);
|
|
printf("window_num %d\n", att.window_num);
|
printf("wina_h_offs %d\n", att.wina_h_offs);
|
printf("wina_v_offs %d\n", att.wina_v_offs);
|
printf("wina_h_size %d\n", att.wina_h_size);
|
printf("wina_v_size %d\n", att.wina_v_size);
|
printf("winb_h_offs %d\n", att.winb_h_offs);
|
printf("winb_v_offs %d\n", att.winb_v_offs);
|
printf("winb_h_size %d\n", att.winb_h_size);
|
printf("winb_v_size %d\n", att.winb_v_size);
|
|
for (i = 0; i < 17; i++)
|
printf("gamma_y[%d] %d\n", i, att.gamma_y[i]);
|
|
printf("thres %d\n", att.thres);
|
printf("shift_sum_b %d\n", att.shift_sum_b);
|
printf("shift_y_b %d\n", att.shift_y_b);
|
|
for (i = 0; i < 9; i++)
|
printf("v1_iir_coe[%d] %d\n", i, att.v1_iir_coe[i]);
|
for (i = 0; i < 3; i++) {
|
printf("v1_fir_coe[%d] %d\n", i, att.v1_fir_coe[i]);
|
printf("v2_iir_coe[%d] %d\n", i, att.v2_iir_coe[i]);
|
printf("v2_fir_coe[%d] %d\n", i, att.v2_fir_coe[i]);
|
}
|
|
for (i = 0; i < 6; i++) {
|
printf("h1_iir1_coe[%d] %d\n", i, att.h1_iir1_coe[i]);
|
printf("h2_iir1_coe[%d] %d\n", i, att.h2_iir1_coe[i]);
|
printf("h1_iir2_coe[%d] %d\n", i, att.h1_iir2_coe[i]);
|
printf("h2_iir2_coe[%d] %d\n", i, att.h2_iir2_coe[i]);
|
}
|
|
for (i = 0; i < 2; i++) {
|
printf("h_ldg_lumth[%d] %d\n", i, att.h_ldg_lumth[i]);
|
printf("h_ldg_gain[%d] %d\n", i, att.h_ldg_gain[i]);
|
printf("h_ldg_gslp[%d] %d\n", i, att.h_ldg_gslp[i]);
|
printf("v_ldg_lumth[%d] %d\n", i, att.v_ldg_lumth[i]);
|
printf("v_ldg_gain[%d] %d\n", i, att.v_ldg_gain[i]);
|
printf("v_ldg_gslp[%d] %d\n", i, att.v_ldg_gslp[i]);
|
}
|
|
printf("v_fv_thresh %d\n", att.v_fv_thresh);
|
printf("h_fv_thresh %d\n", att.h_fv_thresh);
|
printf("v1_fv_shift %d\n", att.v1_fv_shift);
|
printf("v2_fv_shift %d\n", att.v2_fv_shift);
|
printf("h1_fv_shift %d\n", att.h1_fv_shift);
|
printf("h2_fv_shift %d\n", att.h2_fv_shift);
|
printf("highlit_thresh %d\n", att.highlit_thresh);
|
}
|
|
void sample_set_customAfRes(const rk_aiq_sys_ctx_t* ctx)
|
{
|
uint16_t gamma_y[RKAIQ_RAWAF_GAMMA_NUM] =
|
{0, 45, 108, 179, 245, 344, 409, 459, 500, 567, 622, 676, 759, 833, 896, 962, 1023};
|
rk_tool_customAf_res_t attr;
|
int i;
|
|
memset(&attr, 0, sizeof(attr));
|
attr.af_en = 1;
|
attr.rawaf_sel = 0; // normal = 0; hdr = 1
|
attr.accu_8bit_mode = 1;
|
attr.ae_mode = 1;
|
|
attr.window_num = 2;
|
attr.wina_h_offs = 2;
|
attr.wina_v_offs = 2;
|
attr.wina_h_size = 2580;
|
attr.wina_v_size = 1935;
|
|
attr.winb_h_offs = 500;
|
attr.winb_v_offs = 600;
|
attr.winb_h_size = 300;
|
attr.winb_v_size = 300;
|
|
attr.gamma_en = 1;
|
memcpy(attr.gamma_y, gamma_y, RKAIQ_RAWAF_GAMMA_NUM * sizeof(uint16_t));
|
|
// param for winb
|
attr.thres = 4;
|
attr.shift_sum_a = 0;
|
attr.shift_y_a = 0;
|
attr.shift_sum_b = 1;
|
attr.shift_y_b = 1;
|
|
// Vertical filter
|
// lowlit [0.025, 0.075], max=0.5
|
int ver_flt_lowlit[6] =
|
{ 503, 8, 9, -1997, 0, 1997 };
|
|
// normal [0.042, 0.14], max=0.5
|
int ver_flt_normal[6] =
|
{ 483, 28, 28, -1186, 0, 1186 };
|
|
attr.gaus_en = 1;
|
attr.v1_fir_sel = 1; // 0:old 1:new
|
attr.viir_en = 1;
|
attr.v1_fv_outmode = 0; // 0 square, 1 absolute
|
attr.v2_fv_outmode = 0; // 0 square, 1 absolute
|
attr.v1_fv_shift = 1; //only for sel1
|
attr.v2_fv_shift = 1;
|
attr.v_fv_thresh = 0;
|
attr.v1_iir_coe[1] = ver_flt_lowlit[0];
|
attr.v1_iir_coe[4] = ver_flt_lowlit[1];
|
attr.v1_iir_coe[7] = ver_flt_lowlit[2];
|
for (int i = 0; i < 3; i++) {
|
attr.v1_fir_coe[i] = ver_flt_lowlit[i + 3];
|
attr.v2_iir_coe[i] = ver_flt_normal[i];
|
attr.v2_fir_coe[i] = ver_flt_normal[i + 3];
|
}
|
|
// Horizontal filter
|
// lowlit [0.025, 0.075], max=0.5
|
int hor_flt_lowlit[2][6] =
|
{
|
{ 203, 811, -375, 673, 0, -673 },
|
{ 31, 945, -448, 323, 0, -323 },
|
};
|
// normal [0.042, 0.14], max=0.5
|
int hor_flt_normal[2][6] =
|
{
|
{ 512, 557, -276, 460, 0, -460 },
|
{ 100, 870, -399, 191, 0, -191 },
|
};
|
|
attr.hiir_en = 1;
|
attr.h1_fv_outmode = 0; // 0 square, 1 absolute
|
attr.h2_fv_outmode = 0; // 0 square, 1 absolute
|
attr.h1_fv_shift = 1;
|
attr.h2_fv_shift = 1;
|
attr.h_fv_thresh = 0;
|
for (int i = 0; i < 6; i++) {
|
attr.h1_iir1_coe[i] = hor_flt_lowlit[0][i];
|
attr.h1_iir2_coe[i] = hor_flt_lowlit[1][i];
|
attr.h2_iir1_coe[i] = hor_flt_normal[0][i];
|
attr.h2_iir2_coe[i] = hor_flt_normal[1][i];
|
}
|
|
// level depended gain
|
attr.ldg_en = 0;
|
attr.h_ldg_lumth[0] = 64;
|
attr.h_ldg_gain[0] = 28;
|
attr.h_ldg_gslp[0] = (255-28)*255/45;
|
attr.h_ldg_lumth[1] = 185;
|
attr.h_ldg_gain[1] = 8;
|
attr.h_ldg_gslp[1] = (255-8)*255/45;
|
attr.v_ldg_lumth[0] = 64;
|
attr.v_ldg_gain[0] = 28;
|
attr.v_ldg_gslp[0] = (255-28)*255/45;
|
attr.v_ldg_lumth[1] = 185;
|
attr.v_ldg_gain[1] = 8;
|
attr.v_ldg_gslp[1] = (255-8)*255/45;
|
|
// High light
|
attr.highlit_thresh = 912;
|
|
rk_aiq_uapi2_setCustomAfRes(ctx, &attr);
|
printf("setCustomAfRes\n");
|
}
|
|
|
void sample_add_zoom_position(const rk_aiq_sys_ctx_t* ctx)
|
{
|
rk_aiq_af_zoomrange range;
|
int code;
|
|
rk_aiq_uapi2_getZoomRange(ctx, &range);
|
printf("zoom.min_pos %d, zoom.max_pos %d\n", range.min_pos, range.max_pos);
|
|
rk_aiq_uapi2_getOpZoomPosition(ctx, &code);
|
printf("getOpZoomPosition code %d\n", code);
|
|
code += 20;
|
if (code > range.max_pos)
|
code = range.max_pos;
|
rk_aiq_uapi2_setOpZoomPosition(ctx, code);
|
rk_aiq_uapi2_endOpZoomChange(ctx);
|
printf("setOpZoomPosition %d\n", code);
|
}
|
|
void sample_sub_zoom_position(const rk_aiq_sys_ctx_t* ctx)
|
{
|
rk_aiq_af_zoomrange range;
|
int code;
|
|
rk_aiq_uapi2_getZoomRange(ctx, &range);
|
printf("zoom.min_pos %d, zoom.max_pos %d\n", range.min_pos, range.max_pos);
|
|
rk_aiq_uapi2_getOpZoomPosition(ctx, &code);
|
printf("getOpZoomPosition code %d\n", code);
|
|
code -= 20;
|
if (code < range.min_pos)
|
code = range.min_pos;
|
rk_aiq_uapi2_setOpZoomPosition(ctx, code);
|
rk_aiq_uapi2_endOpZoomChange(ctx);
|
printf("setOpZoomPosition %d\n", code);
|
}
|
|
void sample_add_focus_position(const rk_aiq_sys_ctx_t* ctx)
|
{
|
rk_aiq_af_focusrange range;
|
short code;
|
|
rk_aiq_uapi2_getFocusRange(ctx, &range);
|
printf("focus.min_pos %d, focus.max_pos %d\n", range.min_pos, range.max_pos);
|
|
rk_aiq_uapi2_getFocusPosition(ctx, &code);
|
|
code++;
|
if (code > range.max_pos)
|
code = range.max_pos;
|
rk_aiq_uapi2_setFocusPosition(ctx, code);
|
printf("set Focus Code %d\n", code);
|
}
|
|
void sample_sub_focus_position(const rk_aiq_sys_ctx_t* ctx)
|
{
|
rk_aiq_af_focusrange range;
|
short code;
|
|
rk_aiq_uapi2_getFocusRange(ctx, &range);
|
printf("focus.min_pos %d, focus.max_pos %d\n", range.min_pos, range.max_pos);
|
|
rk_aiq_uapi2_getFocusPosition(ctx, &code);
|
|
code--;
|
if (code < range.min_pos)
|
code = range.min_pos;
|
rk_aiq_uapi2_setFocusPosition(ctx, code);
|
printf("set Focus Code %d\n", code);
|
}
|
|
void sample_get_af_search_result(const rk_aiq_sys_ctx_t* ctx)
|
{
|
rk_aiq_af_result_t result;
|
rk_aiq_uapi2_getSearchResult(ctx, &result);
|
printf("get search result, stat: %d, final_pos: %d\n", result.stat, result.final_pos);
|
}
|
|
void sample_set_af_manual_meascfg(const rk_aiq_sys_ctx_t* ctx, rk_aiq_uapi_mode_sync_e sync_mode)
|
{
|
rk_aiq_af_attrib_t attr;
|
uint16_t gamma_y[RKAIQ_RAWAF_GAMMA_NUM] =
|
{0, 45, 108, 179, 245, 344, 409, 459, 500, 567, 622, 676, 759, 833, 896, 962, 1023};
|
|
rk_aiq_user_api2_af_GetAttrib(ctx, &attr);
|
attr.AfMode = RKAIQ_AF_MODE_FIXED;
|
if (CHECK_ISP_HW_V20() || CHECK_ISP_HW_V21()) {
|
memset(&attr.manual_meascfg, 0, sizeof(attr.manual_meascfg));
|
attr.manual_meascfg.contrast_af_en = 1;
|
attr.manual_meascfg.rawaf_sel = 0; // normal = 0; hdr = 1
|
|
attr.manual_meascfg.window_num = 2;
|
attr.manual_meascfg.wina_h_offs = 2;
|
attr.manual_meascfg.wina_v_offs = 2;
|
attr.manual_meascfg.wina_h_size = 2580;
|
attr.manual_meascfg.wina_v_size = 1935;
|
|
attr.manual_meascfg.winb_h_offs = 500;
|
attr.manual_meascfg.winb_v_offs = 600;
|
attr.manual_meascfg.winb_h_size = 300;
|
attr.manual_meascfg.winb_v_size = 300;
|
|
attr.manual_meascfg.gamma_flt_en = 1;
|
memcpy(attr.manual_meascfg.gamma_y, gamma_y, RKAIQ_RAWAF_GAMMA_NUM * sizeof(uint16_t));
|
|
attr.manual_meascfg.gaus_flt_en = 1;
|
attr.manual_meascfg.gaus_h0 = 0x20;
|
attr.manual_meascfg.gaus_h1 = 0x10;
|
attr.manual_meascfg.gaus_h2 = 0x08;
|
|
attr.manual_meascfg.afm_thres = 4;
|
|
attr.manual_meascfg.lum_var_shift[0] = 0;
|
attr.manual_meascfg.afm_var_shift[0] = 0;
|
attr.manual_meascfg.lum_var_shift[1] = 4;
|
attr.manual_meascfg.afm_var_shift[1] = 4;
|
|
attr.manual_meascfg.sp_meas.enable = true;
|
attr.manual_meascfg.sp_meas.ldg_xl = 10;
|
attr.manual_meascfg.sp_meas.ldg_yl = 28;
|
attr.manual_meascfg.sp_meas.ldg_kl = (255-28)*256/45;
|
attr.manual_meascfg.sp_meas.ldg_xh = 118;
|
attr.manual_meascfg.sp_meas.ldg_yh = 8;
|
attr.manual_meascfg.sp_meas.ldg_kh = (255-8)*256/15;
|
attr.manual_meascfg.sp_meas.highlight_th = 245;
|
attr.manual_meascfg.sp_meas.highlight2_th = 200;
|
} else if (CHECK_ISP_HW_V30()) {
|
memset(&attr.manual_meascfg_v30, 0, sizeof(attr.manual_meascfg_v30));
|
attr.manual_meascfg_v30.af_en = 1;
|
attr.manual_meascfg_v30.rawaf_sel = 0; // normal = 0; hdr = 1
|
attr.manual_meascfg_v30.accu_8bit_mode = 1;
|
attr.manual_meascfg_v30.ae_mode = 1;
|
|
attr.manual_meascfg_v30.window_num = 2;
|
attr.manual_meascfg_v30.wina_h_offs = 2;
|
attr.manual_meascfg_v30.wina_v_offs = 2;
|
attr.manual_meascfg_v30.wina_h_size = 2580;
|
attr.manual_meascfg_v30.wina_v_size = 1935;
|
|
attr.manual_meascfg_v30.winb_h_offs = 500;
|
attr.manual_meascfg_v30.winb_v_offs = 600;
|
attr.manual_meascfg_v30.winb_h_size = 300;
|
attr.manual_meascfg_v30.winb_v_size = 300;
|
|
attr.manual_meascfg_v30.gamma_en = 1;
|
memcpy(attr.manual_meascfg_v30.gamma_y, gamma_y, RKAIQ_RAWAF_GAMMA_NUM * sizeof(uint16_t));
|
|
// param for winb
|
attr.manual_meascfg_v30.thres = 4;
|
attr.manual_meascfg_v30.shift_sum_a = 0;
|
attr.manual_meascfg_v30.shift_y_a = 0;
|
attr.manual_meascfg_v30.shift_sum_b = 1;
|
attr.manual_meascfg_v30.shift_y_b = 1;
|
|
// Vertical filter
|
// lowlit [0.025, 0.075], max=0.5
|
int ver_flt_lowlit[6] =
|
{ 503, 8, 9, -1997, 0, 1997 };
|
|
// normal [0.042, 0.14], max=0.5
|
int ver_flt_normal[6] =
|
{ 483, 28, 28, -1186, 0, 1186 };
|
|
attr.manual_meascfg_v30.gaus_en = 1;
|
attr.manual_meascfg_v30.v1_fir_sel = 1; // 0:old 1:new
|
attr.manual_meascfg_v30.viir_en = 1;
|
attr.manual_meascfg_v30.v1_fv_outmode = 0; // 0 square, 1 absolute
|
attr.manual_meascfg_v30.v2_fv_outmode = 0; // 0 square, 1 absolute
|
attr.manual_meascfg_v30.v1_fv_shift = 1; //only for sel1
|
attr.manual_meascfg_v30.v2_fv_shift = 1;
|
attr.manual_meascfg_v30.v_fv_thresh = 0;
|
attr.manual_meascfg_v30.v1_iir_coe[1] = ver_flt_lowlit[0];
|
attr.manual_meascfg_v30.v1_iir_coe[4] = ver_flt_lowlit[1];
|
attr.manual_meascfg_v30.v1_iir_coe[7] = ver_flt_lowlit[2];
|
for (int i = 0; i < 3; i++) {
|
attr.manual_meascfg_v30.v1_fir_coe[i] = ver_flt_lowlit[i + 3];
|
attr.manual_meascfg_v30.v2_iir_coe[i] = ver_flt_normal[i];
|
attr.manual_meascfg_v30.v2_fir_coe[i] = ver_flt_normal[i + 3];
|
}
|
|
// Horizontal filter
|
// lowlit [0.025, 0.075], max=0.5
|
int hor_flt_lowlit[2][6] =
|
{
|
{ 203, 811, -375, 673, 0, -673 },
|
{ 31, 945, -448, 323, 0, -323 },
|
};
|
// normal [0.042, 0.14], max=0.5
|
int hor_flt_normal[2][6] =
|
{
|
{ 512, 557, -276, 460, 0, -460 },
|
{ 100, 870, -399, 191, 0, -191 },
|
};
|
|
attr.manual_meascfg_v30.hiir_en = 1;
|
attr.manual_meascfg_v30.h1_fv_outmode = 0; // 0 square, 1 absolute
|
attr.manual_meascfg_v30.h2_fv_outmode = 0; // 0 square, 1 absolute
|
attr.manual_meascfg_v30.h1_fv_shift = 1;
|
attr.manual_meascfg_v30.h2_fv_shift = 1;
|
attr.manual_meascfg_v30.h_fv_thresh = 0;
|
for (int i = 0; i < 6; i++) {
|
attr.manual_meascfg_v30.h1_iir1_coe[i] = hor_flt_lowlit[0][i];
|
attr.manual_meascfg_v30.h1_iir2_coe[i] = hor_flt_lowlit[1][i];
|
attr.manual_meascfg_v30.h2_iir1_coe[i] = hor_flt_normal[0][i];
|
attr.manual_meascfg_v30.h2_iir2_coe[i] = hor_flt_normal[1][i];
|
}
|
|
// level depended gain
|
attr.manual_meascfg_v30.ldg_en = 0;
|
attr.manual_meascfg_v30.h_ldg_lumth[0] = 64;
|
attr.manual_meascfg_v30.h_ldg_gain[0] = 28;
|
attr.manual_meascfg_v30.h_ldg_gslp[0] = (255-28)*255/45;
|
attr.manual_meascfg_v30.h_ldg_lumth[1] = 185;
|
attr.manual_meascfg_v30.h_ldg_gain[1] = 8;
|
attr.manual_meascfg_v30.h_ldg_gslp[1] = (255-8)*255/45;
|
attr.manual_meascfg_v30.v_ldg_lumth[0] = 64;
|
attr.manual_meascfg_v30.v_ldg_gain[0] = 28;
|
attr.manual_meascfg_v30.v_ldg_gslp[0] = (255-28)*255/45;
|
attr.manual_meascfg_v30.v_ldg_lumth[1] = 185;
|
attr.manual_meascfg_v30.v_ldg_gain[1] = 8;
|
attr.manual_meascfg_v30.v_ldg_gslp[1] = (255-8)*255/45;
|
|
// High light
|
attr.manual_meascfg_v30.highlit_thresh = 912;
|
}
|
|
attr.sync.sync_mode = sync_mode;
|
rk_aiq_user_api2_af_SetAttrib(ctx, &attr);
|
printf("setFocusMeasCfg\n");
|
}
|
|
void sample_get_af_attrib(const rk_aiq_sys_ctx_t* ctx)
|
{
|
rk_aiq_af_attrib_t attr;
|
|
rk_aiq_user_api2_af_GetAttrib(ctx, &attr);
|
printf("get sync.done %d, sync_mode %d\n", attr.sync.done, attr.sync.sync_mode);
|
}
|
|
void sample_print_af_info(const void *arg)
|
{
|
printf ("enter AF modult test!\n");
|
}
|
|
XCamReturn sample_af_module(const void *arg)
|
{
|
int key = -1;
|
CLEAR();
|
rk_aiq_wb_scene_t scene;
|
rk_aiq_wb_gain_t gain;
|
rk_aiq_wb_cct_t ct;
|
opMode_t mode;
|
const demo_context_t *demo_ctx = (demo_context_t *)arg;
|
const rk_aiq_sys_ctx_t* ctx = (const rk_aiq_sys_ctx_t*)(demo_ctx->aiq_ctx);
|
if (ctx == nullptr) {
|
ERR ("%s, ctx is nullptr\n", __FUNCTION__);
|
return XCAM_RETURN_ERROR_PARAM;
|
}
|
|
do {
|
sample_af_usage();
|
|
key = getchar ();
|
while (key == '\n' || key == '\r')
|
key = getchar();
|
printf ("\n\n");
|
|
switch (key)
|
{
|
case 'h':
|
sample_af_usage();
|
case '0':
|
sample_set_focus_automode(ctx);
|
break;
|
case '1':
|
sample_set_focus_manualmode(ctx);
|
break;
|
case '2':
|
sample_set_focus_semiautomode(ctx);
|
break;
|
case '3':
|
sample_get_focus_mode(ctx);
|
break;
|
case '4':
|
sample_set_focus_win(ctx);
|
break;
|
case '5':
|
sample_set_focus_defwin(ctx);
|
break;
|
case '6':
|
sample_get_focus_win(ctx);
|
break;
|
case '7':
|
sample_lock_focus(ctx);
|
break;
|
case '8':
|
sample_unlock_focus(ctx);
|
break;
|
case '9':
|
sample_oneshot_focus(ctx);
|
break;
|
case 'a':
|
sample_manual_triger_focus(ctx);
|
break;
|
case 'b':
|
sample_tracking_focus(ctx);
|
break;
|
case 'c':
|
sample_start_zoomcalib(ctx);
|
break;
|
case 'd':
|
sample_reset_zoom(ctx);
|
break;
|
case 'e':
|
sample_set_anglez(ctx);
|
break;
|
case 'f':
|
sample_add_zoom_position(ctx);
|
break;
|
case 'g':
|
sample_sub_zoom_position(ctx);
|
break;
|
case 'i':
|
sample_add_focus_position(ctx);
|
break;
|
case 'j':
|
sample_sub_focus_position(ctx);
|
break;
|
case 'k':
|
sample_get_af_search_result(ctx);
|
break;
|
case 'l':
|
sample_set_af_manual_meascfg(ctx, RK_AIQ_UAPI_MODE_SYNC);
|
break;
|
case 'm':
|
sample_set_af_manual_meascfg(ctx, RK_AIQ_UAPI_MODE_ASYNC);
|
break;
|
case 'n':
|
sample_get_af_attrib(ctx);
|
break;
|
case 'o':
|
sample_get_customAfRes(ctx);
|
break;
|
case 'p':
|
sample_set_customAfRes(ctx);
|
break;
|
default:
|
break;
|
}
|
} while (key != 'q' && key != 'Q');
|
|
return XCAM_RETURN_NO_ERROR;
|
}
|