/*
|
* Copyright (c) 2019-2022 Rockchip Eletronics Co., Ltd.
|
*
|
* 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 "rk_aiq_types_algo_agic_prvt.h"
|
|
#define SELECT_PARAM(ratio, hi, lo) (((ratio) * ((hi) - (lo)) + (lo) * (1 << 4) + (1 << 3)) >> 4)
|
#define SELECT_PARAM_F(ratioF, hi, lo) ((ratioF) * ((hi) - (lo)) + (lo))
|
|
inline static void GicV1CalibToAttr(CamCalibDbV2Context_t* calib, rkaiq_gic_v1_api_attr_t* attr) {
|
CalibDbV2_Gic_V20_t* db =
|
(CalibDbV2_Gic_V20_t*)(CALIBDBV2_GET_MODULE_PTR(calib, agic_calib_v20));
|
Gic_setting_v20_t* settings = &db->GicTuningPara.GicData;
|
XCAM_ASSERT(RKAIQ_GIC_MAX_ISO_CNT >= settings->ISO_len);
|
attr->gic_en = db->GicTuningPara.enable;
|
attr->edge_open = db->GicTuningPara.edge_en;
|
attr->noise_cut_en = db->GicTuningPara.noise_cut_en;
|
attr->iso_cnt = settings->ISO_len;
|
|
for (int i = 0; i < settings->ISO_len; i++) {
|
attr->auto_params[i].bypass = 0;
|
attr->auto_params[i].iso = settings->ISO[i];
|
attr->auto_params[i].gr_ratio = db->GicTuningPara.gr_ration;
|
attr->auto_params[i].min_busy_thre = settings->min_busy_thre[i];
|
attr->auto_params[i].min_grad_thr1 = settings->min_grad_thr1[i];
|
attr->auto_params[i].min_grad_thr2 = settings->min_grad_thr2[i];
|
attr->auto_params[i].k_grad1 = settings->k_grad1[i];
|
attr->auto_params[i].k_grad2 = settings->k_grad2[i];
|
attr->auto_params[i].gb_thre = settings->gb_thre[i];
|
attr->auto_params[i].maxCorV = settings->maxCorV[i];
|
attr->auto_params[i].maxCorVboth = settings->maxCorVboth[i];
|
attr->auto_params[i].dark_thre = settings->dark_thre[i];
|
attr->auto_params[i].dark_threHi = settings->dark_threHi[i];
|
attr->auto_params[i].k_grad1_dark = settings->k_grad1_dark[i];
|
attr->auto_params[i].k_grad2_dark = settings->k_grad2_dark[i];
|
attr->auto_params[i].min_grad_thr_dark1 = settings->min_grad_thr_dark1[i];
|
attr->auto_params[i].min_grad_thr_dark2 = settings->min_grad_thr_dark2[i];
|
attr->auto_params[i].noiseCurve_0 = settings->noiseCurve_0[i];
|
attr->auto_params[i].noiseCurve_1 = settings->noiseCurve_1[i];
|
attr->auto_params[i].GValueLimitLo = settings->GValueLimitLo[i];
|
attr->auto_params[i].GValueLimitHi = settings->GValueLimitHi[i];
|
attr->auto_params[i].textureStrength = settings->textureStrength[i];
|
attr->auto_params[i].ScaleLo = settings->ScaleLo[i];
|
attr->auto_params[i].ScaleHi = settings->ScaleHi[i];
|
attr->auto_params[i].globalStrength = settings->globalStrength[i];
|
attr->auto_params[i].diff_clip = settings->diff_clip[i];
|
}
|
}
|
|
inline static void GicV2CalibToAttr(CamCalibDbV2Context_t* calib, rkaiq_gic_v2_api_attr_t* attr) {
|
CalibDbV2_Gic_V21_t* db =
|
(CalibDbV2_Gic_V21_t*)(CALIBDBV2_GET_MODULE_PTR(calib, agic_calib_v21));
|
Gic_setting_v21_t* settings = &db->GicTuningPara.GicData;
|
XCAM_ASSERT(RKAIQ_GIC_MAX_ISO_CNT >= settings->ISO_len);
|
attr->gic_en = db->GicTuningPara.enable;
|
attr->iso_cnt = settings->ISO_len;
|
|
for (int i = 0; i < settings->ISO_len; i++) {
|
attr->auto_params[i].iso = settings->ISO[i];
|
attr->auto_params[i].bypass = 0;
|
attr->auto_params[i].gr_ratio = db->GicTuningPara.gr_ration;
|
attr->auto_params[i].min_busy_thre = settings->min_busy_thre[i];
|
attr->auto_params[i].min_grad_thr1 = settings->min_grad_thr1[i];
|
attr->auto_params[i].min_grad_thr2 = settings->min_grad_thr2[i];
|
attr->auto_params[i].k_grad1 = settings->k_grad1[i];
|
attr->auto_params[i].k_grad2 = settings->k_grad2[i];
|
attr->auto_params[i].gb_thre = settings->gb_thre[i];
|
attr->auto_params[i].maxCorV = settings->maxCorV[i];
|
attr->auto_params[i].maxCorVboth = settings->maxCorVboth[i];
|
attr->auto_params[i].dark_thre = settings->dark_thre[i];
|
attr->auto_params[i].dark_threHi = settings->dark_threHi[i];
|
attr->auto_params[i].k_grad1_dark = settings->k_grad1_dark[i];
|
attr->auto_params[i].k_grad2_dark = settings->k_grad2_dark[i];
|
attr->auto_params[i].min_grad_thr_dark1 = settings->min_grad_thr_dark1[i];
|
attr->auto_params[i].min_grad_thr_dark2 = settings->min_grad_thr_dark2[i];
|
attr->auto_params[i].NoiseScale = settings->NoiseScale[i];
|
attr->auto_params[i].NoiseBase = settings->NoiseBase[i];
|
attr->auto_params[i].noiseCurve_0 = settings->noiseCurve_0[i];
|
attr->auto_params[i].noiseCurve_1 = settings->noiseCurve_1[i];
|
attr->auto_params[i].globalStrength = settings->globalStrength[i];
|
attr->auto_params[i].diff_clip = settings->diff_clip[i];
|
}
|
}
|
|
#if 0
|
void GicV1SelectParam(rkaiq_gic_v1_param_selected_t* selected, int ratio, int index,
|
const rkaiq_gic_v1_param_selected_t* auto_params, int iso_cnt) {
|
#else
|
void GicV1SelectParam(AgicConfigV20_t* selected, int ratio, int index,
|
const rkaiq_gic_v1_param_selected_t* auto_params, int iso_cnt) {
|
#endif
|
float ratioF = ratio / 16.0f;
|
const rkaiq_gic_v1_param_selected_t* lo = &auto_params[index];
|
const rkaiq_gic_v1_param_selected_t* hi = &auto_params[index + 1];
|
|
#if 0
|
selected->iso = lo->iso;
|
selected->bypass = lo->bypass;
|
selected->gr_ratio = lo->gr_ratio;
|
selected->min_busy_thre = SELECT_PARAM(ratio, hi->min_busy_thre, lo->min_busy_thre);
|
selected->min_grad_thr1 = SELECT_PARAM(ratio, hi->min_grad_thr1, lo->min_grad_thr1);
|
selected->min_grad_thr2 = SELECT_PARAM(ratio, hi->min_grad_thr2, lo->min_grad_thr2);
|
selected->k_grad1 = SELECT_PARAM(ratio, hi->k_grad1, lo->k_grad1);
|
selected->k_grad2 = SELECT_PARAM(ratio, hi->k_grad2, lo->k_grad1);
|
selected->gb_thre = SELECT_PARAM(ratio, hi->gb_thre, lo->gb_thre);
|
selected->maxCorV = SELECT_PARAM(ratio, hi->maxCorV, lo->maxCorV);
|
selected->maxCorVboth = SELECT_PARAM(ratio, hi->maxCorVboth, lo->maxCorVboth);
|
selected->dark_thre = SELECT_PARAM(ratio, hi->dark_thre, lo->dark_thre);
|
selected->dark_threHi = SELECT_PARAM(ratio, hi->dark_threHi, lo->dark_threHi);
|
selected->k_grad1_dark = SELECT_PARAM(ratio, hi->k_grad1_dark, lo->k_grad1_dark);
|
selected->k_grad2_dark = SELECT_PARAM(ratio, hi->k_grad2_dark, lo->k_grad2_dark);
|
selected->min_grad_thr_dark1 =
|
SELECT_PARAM(ratio, hi->min_grad_thr_dark1, lo->min_grad_thr_dark1);
|
selected->min_grad_thr_dark2 =
|
SELECT_PARAM(ratio, hi->min_grad_thr_dark2, lo->min_grad_thr_dark2);
|
selected->GValueLimitLo = SELECT_PARAM_F(ratioF, hi->GValueLimitLo, lo->GValueLimitLo);
|
selected->GValueLimitHi = SELECT_PARAM_F(ratioF, hi->GValueLimitHi, lo->GValueLimitHi);
|
selected->textureStrength = SELECT_PARAM_F(ratioF, hi->textureStrength, lo->textureStrength);
|
selected->ScaleLo = SELECT_PARAM_F(ratioF, hi->ScaleLo, lo->ScaleLo);
|
selected->ScaleHi = SELECT_PARAM_F(ratioF, hi->ScaleHi, lo->ScaleHi);
|
selected->globalStrength = SELECT_PARAM_F(ratioF, hi->globalStrength, lo->globalStrength);
|
selected->noiseCurve_0 = SELECT_PARAM_F(ratioF, hi->noiseCurve_0, lo->noiseCurve_0);
|
selected->noiseCurve_1 = SELECT_PARAM_F(ratioF, hi->noiseCurve_1, lo->noiseCurve_1);
|
#else
|
selected->gr_ratio = lo->gr_ratio;
|
selected->regminbusythre = SELECT_PARAM(ratio, hi->min_busy_thre, lo->min_busy_thre);
|
selected->regmingradthr1 = SELECT_PARAM(ratio, hi->min_grad_thr1, lo->min_grad_thr1);
|
selected->regmingradthr2 = SELECT_PARAM(ratio, hi->min_grad_thr2, lo->min_grad_thr2);
|
selected->regkgrad1 = SELECT_PARAM(ratio, hi->k_grad1, lo->k_grad1);
|
selected->regkgrad2 = SELECT_PARAM(ratio, hi->k_grad2, lo->k_grad1);
|
selected->reggbthre = SELECT_PARAM(ratio, hi->gb_thre, lo->gb_thre);
|
selected->regmaxcorv = SELECT_PARAM(ratio, hi->maxCorV, lo->maxCorV);
|
selected->regmaxcorvboth = SELECT_PARAM(ratio, hi->maxCorVboth, lo->maxCorVboth);
|
selected->regdarkthre = SELECT_PARAM(ratio, hi->dark_thre, lo->dark_thre);
|
selected->regdarktthrehi = SELECT_PARAM(ratio, hi->dark_threHi, lo->dark_threHi);
|
selected->regkgrad1dark = SELECT_PARAM(ratio, hi->k_grad1_dark, lo->k_grad1_dark);
|
selected->regkgrad2dark = SELECT_PARAM(ratio, hi->k_grad2_dark, lo->k_grad2_dark);
|
selected->regmingradthrdark1 =
|
SELECT_PARAM(ratio, hi->min_grad_thr_dark1, lo->min_grad_thr_dark1);
|
selected->regmingradthrdark2 =
|
SELECT_PARAM(ratio, hi->min_grad_thr_dark2, lo->min_grad_thr_dark2);
|
selected->gvaluelimitlo = SELECT_PARAM_F(ratioF, hi->GValueLimitLo, lo->GValueLimitLo);
|
selected->gvaluelimithi = SELECT_PARAM_F(ratioF, hi->GValueLimitHi, lo->GValueLimitHi);
|
selected->textureStrength = SELECT_PARAM_F(ratioF, hi->textureStrength, lo->textureStrength);
|
selected->dnloscale = SELECT_PARAM_F(ratioF, hi->ScaleLo, lo->ScaleLo);
|
selected->dnhiscale = SELECT_PARAM_F(ratioF, hi->ScaleHi, lo->ScaleHi);
|
selected->globalStrength = SELECT_PARAM_F(ratioF, hi->globalStrength, lo->globalStrength);
|
selected->noiseCurve_0 = SELECT_PARAM_F(ratioF, hi->noiseCurve_0, lo->noiseCurve_0);
|
selected->noiseCurve_1 = SELECT_PARAM_F(ratioF, hi->noiseCurve_1, lo->noiseCurve_1);
|
#endif
|
}
|
|
#if 0
|
void GicV2SelectParam(rkaiq_gic_v2_param_selected_t* selected, int ratio, int index,
|
const rkaiq_gic_v2_param_selected_t* auto_params, int iso_cnt) {
|
float ratioF = ratio / 16.0f;
|
const rkaiq_gic_v2_param_selected_t* lo = &auto_params[index];
|
const rkaiq_gic_v2_param_selected_t* hi = &auto_params[index + 1];
|
|
selected->iso = lo->iso;
|
selected->bypass = lo->bypass;
|
selected->gr_ratio = lo->gr_ratio;
|
selected->min_busy_thre = SELECT_PARAM(ratio, hi->min_busy_thre, lo->min_busy_thre);
|
selected->min_grad_thr1 = SELECT_PARAM(ratio, hi->min_grad_thr1, lo->min_grad_thr1);
|
selected->min_grad_thr2 = SELECT_PARAM(ratio, hi->min_grad_thr2, lo->min_grad_thr2);
|
selected->k_grad1 = SELECT_PARAM(ratio, hi->k_grad1, lo->k_grad1);
|
selected->k_grad2 = SELECT_PARAM(ratio, hi->k_grad2, lo->k_grad2);
|
selected->gb_thre = SELECT_PARAM(ratio, hi->gb_thre, lo->gb_thre);
|
selected->maxCorV = SELECT_PARAM(ratio, hi->maxCorV, lo->maxCorV);
|
selected->maxCorVboth = SELECT_PARAM(ratio, hi->maxCorVboth, lo->maxCorVboth);
|
selected->dark_thre = SELECT_PARAM(ratio, hi->dark_thre, lo->dark_thre);
|
selected->dark_threHi = SELECT_PARAM(ratio, hi->dark_threHi, lo->dark_threHi);
|
selected->k_grad1_dark = SELECT_PARAM(ratio, hi->k_grad1_dark, lo->k_grad1_dark);
|
selected->k_grad2_dark = SELECT_PARAM(ratio, hi->k_grad2_dark, lo->k_grad2_dark);
|
selected->min_grad_thr_dark1 =
|
SELECT_PARAM(ratio, hi->min_grad_thr_dark1, lo->min_grad_thr_dark1);
|
selected->min_grad_thr_dark2 =
|
SELECT_PARAM(ratio, hi->min_grad_thr_dark2, lo->min_grad_thr_dark2);
|
selected->NoiseScale = SELECT_PARAM_F(ratioF, hi->NoiseScale, lo->NoiseScale);
|
selected->NoiseBase = SELECT_PARAM_F(ratioF, hi->NoiseBase, lo->NoiseBase);
|
selected->globalStrength = SELECT_PARAM_F(ratioF, hi->globalStrength, lo->globalStrength);
|
selected->diff_clip = SELECT_PARAM_F(ratioF, hi->diff_clip, lo->diff_clip);
|
}
|
#else
|
void GicV2SelectParam(AgicConfigV21_t* selected, int ratio, int index,
|
const rkaiq_gic_v2_param_selected_t* auto_params, int iso_cnt) {
|
float ratioF = ratio / 16.0f;
|
const rkaiq_gic_v2_param_selected_t* lo = &auto_params[index];
|
const rkaiq_gic_v2_param_selected_t* hi = &auto_params[index + 1];
|
|
selected->gr_ratio = lo->gr_ratio;
|
selected->regminbusythre = SELECT_PARAM(ratio, hi->min_busy_thre, lo->min_busy_thre);
|
selected->regmingradthr1 = SELECT_PARAM(ratio, hi->min_grad_thr1, lo->min_grad_thr1);
|
selected->regmingradthr2 = SELECT_PARAM(ratio, hi->min_grad_thr2, lo->min_grad_thr2);
|
selected->regkgrad1 = SELECT_PARAM(ratio, hi->k_grad1, lo->k_grad1);
|
selected->regkgrad2 = SELECT_PARAM(ratio, hi->k_grad2, lo->k_grad2);
|
selected->reggbthre = SELECT_PARAM(ratio, hi->gb_thre, lo->gb_thre);
|
selected->regmaxcorv = SELECT_PARAM(ratio, hi->maxCorV, lo->maxCorV);
|
selected->regmaxcorvboth = SELECT_PARAM(ratio, hi->maxCorVboth, lo->maxCorVboth);
|
selected->regdarkthre = SELECT_PARAM(ratio, hi->dark_thre, lo->dark_thre);
|
selected->regdarktthrehi = SELECT_PARAM(ratio, hi->dark_threHi, lo->dark_threHi);
|
selected->regkgrad1dark = SELECT_PARAM(ratio, hi->k_grad1_dark, lo->k_grad1_dark);
|
selected->regkgrad2dark = SELECT_PARAM(ratio, hi->k_grad2_dark, lo->k_grad2_dark);
|
selected->regmingradthrdark1 =
|
SELECT_PARAM(ratio, hi->min_grad_thr_dark1, lo->min_grad_thr_dark1);
|
selected->regmingradthrdark2 =
|
SELECT_PARAM(ratio, hi->min_grad_thr_dark2, lo->min_grad_thr_dark2);
|
selected->noise_scale = SELECT_PARAM_F(ratioF, hi->NoiseScale, lo->NoiseScale);
|
selected->noise_base = SELECT_PARAM_F(ratioF, hi->NoiseBase, lo->NoiseBase);
|
selected->noiseCurve_0 = SELECT_PARAM_F(ratioF, hi->noiseCurve_0, lo->noiseCurve_0);
|
selected->noiseCurve_1 = SELECT_PARAM_F(ratioF, hi->noiseCurve_1, lo->noiseCurve_1);
|
selected->globalStrength = SELECT_PARAM_F(ratioF, hi->globalStrength, lo->globalStrength);
|
selected->diff_clip = SELECT_PARAM_F(ratioF, hi->diff_clip, lo->diff_clip);
|
}
|
#endif
|
void GicV1SetManualParam(AgicConfigV20_t* selected,
|
const rkaiq_gic_v1_param_selected_t* manual_param) {
|
selected->gr_ratio = manual_param->gr_ratio;
|
selected->regminbusythre = manual_param->min_busy_thre;
|
selected->regmingradthr1 = manual_param->min_grad_thr1;
|
selected->regmingradthr2 = manual_param->min_grad_thr2;
|
selected->regkgrad1 = manual_param->k_grad1;
|
selected->regkgrad2 = manual_param->k_grad2;
|
selected->reggbthre = manual_param->gb_thre;
|
selected->regmaxcorv = manual_param->maxCorV;
|
selected->regmaxcorvboth = manual_param->maxCorVboth;
|
selected->regdarkthre = manual_param->dark_thre;
|
selected->regdarktthrehi = manual_param->dark_threHi;
|
selected->regkgrad1dark = manual_param->k_grad1_dark;
|
selected->regkgrad2dark = manual_param->k_grad2_dark;
|
selected->regmingradthrdark1 = manual_param->min_grad_thr_dark1;
|
selected->regmingradthrdark2 = manual_param->min_grad_thr_dark2;
|
|
selected->gvaluelimitlo = manual_param->GValueLimitLo;
|
selected->gvaluelimithi = manual_param->GValueLimitHi;
|
selected->textureStrength = manual_param->textureStrength;
|
selected->dnloscale = manual_param->ScaleLo;
|
selected->dnhiscale = manual_param->ScaleHi;
|
selected->globalStrength = manual_param->globalStrength;
|
selected->noiseCurve_0 = manual_param->noiseCurve_0;
|
selected->noiseCurve_1 = manual_param->noiseCurve_1;
|
}
|
|
void GicV2SetManualParam(AgicConfigV21_t* selected,
|
const rkaiq_gic_v2_param_selected_t* manual_param) {
|
selected->gr_ratio = manual_param->gr_ratio;
|
selected->regminbusythre = manual_param->min_busy_thre;
|
selected->regmingradthr1 = manual_param->min_grad_thr1;
|
selected->regmingradthr2 = manual_param->min_grad_thr2;
|
selected->regkgrad1 = manual_param->k_grad1;
|
selected->regkgrad2 = manual_param->k_grad2;
|
selected->reggbthre = manual_param->gb_thre;
|
selected->regmaxcorv = manual_param->maxCorV;
|
selected->regmaxcorvboth = manual_param->maxCorVboth;
|
selected->regdarkthre = manual_param->dark_thre;
|
selected->regdarktthrehi = manual_param->dark_threHi;
|
selected->regkgrad1dark = manual_param->k_grad1_dark;
|
selected->regkgrad2dark = manual_param->k_grad2_dark;
|
selected->regmingradthrdark1 = manual_param->min_grad_thr_dark1;
|
selected->regmingradthrdark2 = manual_param->min_grad_thr_dark2;
|
selected->noise_scale = manual_param->NoiseScale;
|
selected->noise_base = manual_param->NoiseBase;
|
selected->noiseCurve_0 = manual_param->noiseCurve_0;
|
selected->noiseCurve_1 = manual_param->noiseCurve_1;
|
selected->globalStrength = manual_param->globalStrength;
|
selected->diff_clip = manual_param->diff_clip;
|
}
|
|
void GicV1DumpReg(const rkaiq_gic_v1_hw_param_t* hw_param) {
|
LOG1_AGIC(
|
" GIC V1 reg values: "
|
" regmingradthrdark2 %d"
|
" regmingradthrdark1 %d"
|
" regminbusythre %d"
|
" regdarkthre %d"
|
" regmaxcorvboth %d"
|
" regdarktthrehi %d"
|
" regkgrad2dark %d"
|
" regkgrad1dark %d"
|
" regstrengthglobal_fix %d"
|
" regdarkthrestep %d"
|
" regkgrad2 %d"
|
" regkgrad1 %d"
|
" reggbthre %d"
|
" regmaxcorv %d"
|
" regmingradthr2 %d"
|
" regmingradthr1 %d"
|
" gr_ratio %d"
|
" dnloscale %d"
|
" dnhiscale %d"
|
" reglumapointsstep %d"
|
" gvaluelimitlo %d"
|
" gvaluelimithi %d"
|
" fusionratiohilimt1 %d"
|
" regstrength_fix %d"
|
" noise_cut_en %d"
|
" noise_coe_a %d"
|
" noise_coe_b %d"
|
" diff_clip %d",
|
hw_param->regmingradthrdark2, hw_param->regmingradthrdark1, hw_param->regminbusythre,
|
hw_param->regdarkthre, hw_param->regmaxcorvboth, hw_param->regdarktthrehi,
|
hw_param->regkgrad2dark, hw_param->regkgrad1dark, hw_param->regstrengthglobal_fix,
|
hw_param->regdarkthrestep, hw_param->regkgrad2, hw_param->regkgrad1, hw_param->reggbthre,
|
hw_param->regmaxcorv, hw_param->regmingradthr2, hw_param->regmingradthr1,
|
hw_param->gr_ratio, hw_param->dnloscale, hw_param->dnhiscale, hw_param->reglumapointsstep,
|
hw_param->gvaluelimitlo, hw_param->gvaluelimithi, hw_param->fusionratiohilimt1,
|
hw_param->regstrength_fix, hw_param->noise_cut_en, hw_param->noise_coe_a,
|
hw_param->noise_coe_b, hw_param->diff_clip);
|
}
|
|
void GicV2DumpReg(const rkaiq_gic_v2_hw_param_t* hw_param) {
|
LOG1_AGIC(
|
"GIC V2 reg values: \n"
|
" regmingradthrdark2 %d"
|
" regmingradthrdark1 %d"
|
" regminbusythre %d"
|
" regdarkthre %d"
|
" regmaxcorvboth %d"
|
" regdarktthrehi %d"
|
" regkgrad2dark %d"
|
" regkgrad1dark %d"
|
" regstrengthglobal_fix %d"
|
" regdarkthrestep %d"
|
" regkgrad2 %d"
|
" regkgrad1 %d"
|
" reggbthre %d"
|
" regmaxcorv %d"
|
" regmingradthr2 %d"
|
" regmingradthr1 %d"
|
" gr_ratio %d"
|
" noise_scale %d"
|
" noise_base %d"
|
" diff_clip %d",
|
hw_param->regmingradthrdark2, hw_param->regmingradthrdark1, hw_param->regminbusythre,
|
hw_param->regdarkthre, hw_param->regmaxcorvboth, hw_param->regdarktthrehi,
|
hw_param->regkgrad2dark, hw_param->regkgrad1dark, hw_param->regstrengthglobal_fix,
|
hw_param->regdarkthrestep, hw_param->regkgrad2, hw_param->regkgrad1, hw_param->reggbthre,
|
hw_param->regmaxcorv, hw_param->regmingradthr2, hw_param->regmingradthr1,
|
hw_param->gr_ratio, hw_param->noise_scale, hw_param->noise_base, hw_param->diff_clip);
|
}
|
|
XCamReturn AgicInit(AgicContext_t* pAgicCtx, CamCalibDbV2Context_t* calib) {
|
LOG1_AGIC("enter!");
|
|
memset(pAgicCtx, 0, sizeof(AgicContext_t));
|
pAgicCtx->state = AGIC_STATE_INITIALIZED;
|
|
if (CHECK_ISP_HW_V20()) {
|
GicV1CalibToAttr(calib, &pAgicCtx->attr.v1);
|
pAgicCtx->attr.v1.op_mode = RKAIQ_GIC_API_OPMODE_AUTO;
|
} else if (CHECK_ISP_HW_V21() || CHECK_ISP_HW_V30()) {
|
GicV2CalibToAttr(calib, &pAgicCtx->attr.v2);
|
pAgicCtx->attr.v2.op_mode = RKAIQ_GIC_API_OPMODE_AUTO;
|
}
|
pAgicCtx->calib_changed = true;
|
pAgicCtx->state = AGIC_STATE_RUNNING;
|
|
LOG1_AGIC("exit!");
|
return XCAM_RETURN_NO_ERROR;
|
}
|
|
XCamReturn AgicRelease(AgicContext_t* pAgicCtx) {
|
LOG1_AGIC("enter!");
|
|
AgicStop(pAgicCtx);
|
|
LOG1_AGIC("exit!");
|
return XCAM_RETURN_NO_ERROR;
|
}
|
|
XCamReturn AgicStop(AgicContext_t* pAgicCtx) {
|
LOG1_AGIC("enter!");
|
|
pAgicCtx->state = AGIC_STATE_STOPPED;
|
|
LOG1_AGIC("exit!");
|
return XCAM_RETURN_NO_ERROR;
|
}
|
|
XCamReturn AgicPreProcess(AgicContext_t* pAgicCtx) { return XCAM_RETURN_NO_ERROR; }
|
|
void AgicGetProcResultV21(AgicContext_t* pAgicCtx) {
|
LOG1_AGIC("enter!");
|
|
pAgicCtx->ProcRes.gic_en = pAgicCtx->ConfigData.ConfigV21.gic_en == 0 ? false : true;
|
pAgicCtx->ProcRes.ProcResV21.regmingradthrdark2 =
|
pAgicCtx->ConfigData.ConfigV21.regmingradthrdark2;
|
pAgicCtx->ProcRes.ProcResV21.regmingradthrdark1 =
|
pAgicCtx->ConfigData.ConfigV21.regmingradthrdark1;
|
pAgicCtx->ProcRes.ProcResV21.regminbusythre = pAgicCtx->ConfigData.ConfigV21.regminbusythre;
|
pAgicCtx->ProcRes.ProcResV21.regdarkthre = pAgicCtx->ConfigData.ConfigV21.regdarkthre;
|
pAgicCtx->ProcRes.ProcResV21.regmaxcorvboth = pAgicCtx->ConfigData.ConfigV21.regmaxcorvboth;
|
pAgicCtx->ProcRes.ProcResV21.regdarktthrehi = pAgicCtx->ConfigData.ConfigV21.regdarktthrehi;
|
pAgicCtx->ProcRes.ProcResV21.regkgrad2dark =
|
(int)(log(double(pAgicCtx->ConfigData.ConfigV21.regkgrad2dark)) / log((double)2) + 0.5f);
|
pAgicCtx->ProcRes.ProcResV21.regkgrad1dark =
|
(int)(log(double(pAgicCtx->ConfigData.ConfigV21.regkgrad1dark)) / log((double)2) + 0.5f);
|
|
pAgicCtx->ProcRes.ProcResV21.regstrengthglobal_fix =
|
(int)(pAgicCtx->ConfigData.ConfigV21.globalStrength * (1 << 7));
|
if (pAgicCtx->ProcRes.ProcResV21.regstrengthglobal_fix > (1 << 7) - 1)
|
pAgicCtx->ProcRes.ProcResV21.regstrengthglobal_fix = 7 + 1;
|
else
|
pAgicCtx->ProcRes.ProcResV21.regstrengthglobal_fix =
|
int(log(double((1 << 7) - pAgicCtx->ProcRes.ProcResV21.regstrengthglobal_fix)) /
|
log((double)2) +
|
0.5f);
|
|
pAgicCtx->ProcRes.ProcResV21.regdarkthrestep =
|
int(log(double(pAgicCtx->ConfigData.ConfigV21.regdarktthrehi -
|
pAgicCtx->ConfigData.ConfigV21.regdarkthre)) /
|
log((double)2) +
|
0.5f);
|
pAgicCtx->ProcRes.ProcResV21.regkgrad2 =
|
(int)(log(double(pAgicCtx->ConfigData.ConfigV21.regkgrad2)) / log((double)2) + 0.5f);
|
pAgicCtx->ProcRes.ProcResV21.regkgrad1 =
|
(int)(log(double(pAgicCtx->ConfigData.ConfigV21.regkgrad1)) / log((double)2) + 0.5f);
|
pAgicCtx->ProcRes.ProcResV21.reggbthre =
|
int(log(double(pAgicCtx->ConfigData.ConfigV21.reggbthre)) / log((double)2) + 0.5f);
|
pAgicCtx->ProcRes.ProcResV21.regmaxcorv = pAgicCtx->ConfigData.ConfigV21.regmaxcorv;
|
pAgicCtx->ProcRes.ProcResV21.regmingradthr1 = pAgicCtx->ConfigData.ConfigV21.regmingradthr1;
|
pAgicCtx->ProcRes.ProcResV21.regmingradthr2 = pAgicCtx->ConfigData.ConfigV21.regmingradthr2;
|
pAgicCtx->ProcRes.ProcResV21.gr_ratio = pAgicCtx->ConfigData.ConfigV21.gr_ratio;
|
pAgicCtx->ProcRes.ProcResV21.noise_scale =
|
(pAgicCtx->ConfigData.ConfigV21.noise_scale * 128 + 0.5);
|
pAgicCtx->ProcRes.ProcResV21.noise_base =
|
(int)(pAgicCtx->ConfigData.ConfigV21.noise_base * 4096 + 0.5);
|
|
for (int i = 0; i < 15; i++) {
|
pAgicCtx->ProcRes.ProcResV21.sigma_y[i] =
|
(int)(pAgicCtx->ConfigData.ConfigV21.sigma_y[i] * (1 << 7));
|
}
|
|
pAgicCtx->ProcRes.ProcResV21.diff_clip = pAgicCtx->ConfigData.ConfigV21.diff_clip;
|
|
if (pAgicCtx->ProcRes.ProcResV21.regkgrad2dark < pAgicCtx->ProcRes.ProcResV21.regkgrad2)
|
GIC_SWAP(int, pAgicCtx->ProcRes.ProcResV21.regkgrad2dark,
|
pAgicCtx->ProcRes.ProcResV21.regkgrad2);
|
|
if (pAgicCtx->ProcRes.ProcResV21.regmingradthrdark1 <
|
pAgicCtx->ProcRes.ProcResV21.regmingradthr1)
|
GIC_SWAP(int, pAgicCtx->ProcRes.ProcResV21.regmingradthrdark1,
|
pAgicCtx->ProcRes.ProcResV21.regmingradthr1);
|
|
if (pAgicCtx->ProcRes.ProcResV21.regmingradthrdark2 <
|
pAgicCtx->ProcRes.ProcResV21.regmingradthr2)
|
GIC_SWAP(int, pAgicCtx->ProcRes.ProcResV21.regmingradthrdark2,
|
pAgicCtx->ProcRes.ProcResV21.regmingradthr2);
|
|
if (pAgicCtx->ProcRes.ProcResV21.regdarktthrehi < pAgicCtx->ProcRes.ProcResV21.regdarkthre)
|
GIC_SWAP(int, pAgicCtx->ProcRes.ProcResV21.regdarktthrehi,
|
pAgicCtx->ProcRes.ProcResV21.regdarkthre);
|
|
GicV2DumpReg(&pAgicCtx->ProcRes.ProcResV21);
|
|
LOG1_AGIC("exit!");
|
}
|
|
void AgicGetProcResultV20(AgicContext_t* pAgicCtx) {
|
LOG1_AGIC("enter!");
|
|
pAgicCtx->ProcRes.gic_en = pAgicCtx->ConfigData.ConfigV20.gic_en == 0 ? false : true;
|
pAgicCtx->ProcRes.ProcResV20.edge_open = pAgicCtx->ConfigData.ConfigV20.edge_open;
|
pAgicCtx->ProcRes.ProcResV20.regmingradthrdark2 =
|
pAgicCtx->ConfigData.ConfigV20.regmingradthrdark2;
|
pAgicCtx->ProcRes.ProcResV20.regmingradthrdark1 =
|
pAgicCtx->ConfigData.ConfigV20.regmingradthrdark1;
|
pAgicCtx->ProcRes.ProcResV20.regminbusythre = pAgicCtx->ConfigData.ConfigV20.regminbusythre;
|
pAgicCtx->ProcRes.ProcResV20.regdarkthre = pAgicCtx->ConfigData.ConfigV20.regdarkthre;
|
pAgicCtx->ProcRes.ProcResV20.regmaxcorvboth = pAgicCtx->ConfigData.ConfigV20.regmaxcorvboth;
|
pAgicCtx->ProcRes.ProcResV20.regdarktthrehi = pAgicCtx->ConfigData.ConfigV20.regdarktthrehi;
|
pAgicCtx->ProcRes.ProcResV20.regkgrad2dark =
|
(int)(log(double(pAgicCtx->ConfigData.ConfigV20.regkgrad2dark)) / log((double)2) + 0.5f);
|
pAgicCtx->ProcRes.ProcResV20.regkgrad1dark =
|
(int)(log(double(pAgicCtx->ConfigData.ConfigV20.regkgrad1dark)) / log((double)2) + 0.5f);
|
|
pAgicCtx->ProcRes.ProcResV20.regstrengthglobal_fix =
|
(int)(pAgicCtx->ConfigData.ConfigV20.globalStrength * (1 << 7));
|
if (pAgicCtx->ProcRes.ProcResV20.regstrengthglobal_fix > (1 << 7) - 1)
|
pAgicCtx->ProcRes.ProcResV20.regstrengthglobal_fix = 7 + 1;
|
else
|
pAgicCtx->ProcRes.ProcResV20.regstrengthglobal_fix =
|
int(log(double((1 << 7) - pAgicCtx->ProcRes.ProcResV20.regstrengthglobal_fix)) /
|
log((double)2) +
|
0.5f);
|
|
pAgicCtx->ProcRes.ProcResV20.regdarkthrestep =
|
int(log(double(pAgicCtx->ConfigData.ConfigV20.regdarktthrehi -
|
pAgicCtx->ConfigData.ConfigV20.regdarkthre)) /
|
log((double)2) +
|
0.5f);
|
pAgicCtx->ProcRes.ProcResV20.regkgrad2 =
|
(int)(log(double(pAgicCtx->ConfigData.ConfigV20.regkgrad2)) / log((double)2) + 0.5f);
|
pAgicCtx->ProcRes.ProcResV20.regkgrad1 =
|
(int)(log(double(pAgicCtx->ConfigData.ConfigV20.regkgrad1)) / log((double)2) + 0.5f);
|
pAgicCtx->ProcRes.ProcResV20.reggbthre =
|
int(log(double(pAgicCtx->ConfigData.ConfigV20.reggbthre)) / log((double)2) + 0.5f);
|
pAgicCtx->ProcRes.ProcResV20.regmaxcorv = pAgicCtx->ConfigData.ConfigV20.regmaxcorv;
|
pAgicCtx->ProcRes.ProcResV20.regmingradthr1 = pAgicCtx->ConfigData.ConfigV20.regmingradthr1;
|
pAgicCtx->ProcRes.ProcResV20.regmingradthr2 = pAgicCtx->ConfigData.ConfigV20.regmingradthr2;
|
pAgicCtx->ProcRes.ProcResV20.gr_ratio = pAgicCtx->ConfigData.ConfigV20.gr_ratio;
|
pAgicCtx->ProcRes.ProcResV20.dnloscale =
|
(int)(pAgicCtx->ConfigData.ConfigV20.dnloscale * (1 << 7));
|
pAgicCtx->ProcRes.ProcResV20.dnhiscale =
|
(int)(pAgicCtx->ConfigData.ConfigV20.dnhiscale * (1 << 7));
|
pAgicCtx->ProcRes.ProcResV20.reglumapointsstep =
|
pAgicCtx->ConfigData.ConfigV20.reglumapointsstep;
|
pAgicCtx->ProcRes.ProcResV20.gvaluelimitlo = (int)pAgicCtx->ConfigData.ConfigV20.gvaluelimitlo;
|
pAgicCtx->ProcRes.ProcResV20.gvaluelimithi = (int)pAgicCtx->ConfigData.ConfigV20.gvaluelimithi;
|
pAgicCtx->ProcRes.ProcResV20.fusionratiohilimt1 =
|
(int)(pAgicCtx->ConfigData.ConfigV20.fusionratiohilimt1 * (1 << 7));
|
pAgicCtx->ProcRes.ProcResV20.regstrength_fix =
|
(int)(pAgicCtx->ConfigData.ConfigV20.textureStrength * (1 << 7));
|
|
for (int i = 0; i < 15; i++) {
|
pAgicCtx->ProcRes.ProcResV20.sigma_y[i] =
|
(int)(pAgicCtx->ConfigData.ConfigV20.sigma_y[i] * (1 << 7));
|
}
|
|
pAgicCtx->ProcRes.ProcResV20.noise_cut_en = pAgicCtx->ConfigData.ConfigV20.noise_cut_en;
|
pAgicCtx->ProcRes.ProcResV20.noise_coe_a = pAgicCtx->ConfigData.ConfigV20.noise_coe_a;
|
pAgicCtx->ProcRes.ProcResV20.noise_coe_b = pAgicCtx->ConfigData.ConfigV20.noise_coe_b;
|
pAgicCtx->ProcRes.ProcResV20.diff_clip = pAgicCtx->ConfigData.ConfigV20.diff_clip;
|
|
if (pAgicCtx->ProcRes.ProcResV20.regkgrad2dark < pAgicCtx->ProcRes.ProcResV20.regkgrad2)
|
GIC_SWAP(int, pAgicCtx->ProcRes.ProcResV20.regkgrad2dark,
|
pAgicCtx->ProcRes.ProcResV20.regkgrad2);
|
|
if (pAgicCtx->ProcRes.ProcResV20.regmingradthrdark1 <
|
pAgicCtx->ProcRes.ProcResV20.regmingradthr1)
|
GIC_SWAP(int, pAgicCtx->ProcRes.ProcResV20.regmingradthrdark1,
|
pAgicCtx->ProcRes.ProcResV20.regmingradthr1);
|
|
if (pAgicCtx->ProcRes.ProcResV20.regmingradthrdark2 <
|
pAgicCtx->ProcRes.ProcResV20.regmingradthr2)
|
GIC_SWAP(int, pAgicCtx->ProcRes.ProcResV20.regmingradthrdark2,
|
pAgicCtx->ProcRes.ProcResV20.regmingradthr2);
|
|
if (pAgicCtx->ProcRes.ProcResV20.regdarktthrehi < pAgicCtx->ProcRes.ProcResV20.regdarkthre)
|
GIC_SWAP(int, pAgicCtx->ProcRes.ProcResV20.regdarktthrehi,
|
pAgicCtx->ProcRes.ProcResV20.regdarkthre);
|
|
GicV1DumpReg(&pAgicCtx->ProcRes.ProcResV20);
|
|
LOG1_AGIC("exit!");
|
}
|
|
void AgicProcessV20(AgicContext_t* pAgicCtx, int ISO) {
|
LOG1_AGIC("enter!");
|
|
float ave1 = 0.0f, noiseSigma = 0.0f;
|
int ratio = 0;
|
int iso_lo = 50, iso_hi = 50;
|
int index = 0;
|
short LumaPoints[] = {0, 128, 256, 384, 512, 640, 768, 896,
|
1024, 1536, 2048, 2560, 3072, 3584, 4096};
|
|
LOGD_AGIC("enter, ISO=%d", ISO);
|
|
if (pAgicCtx == NULL) LOGE_AGIC("null pointer");
|
|
if (ISO <= 50) {
|
index = 0;
|
ratio = 0;
|
} else if (ISO > 12800) {
|
index = pAgicCtx->attr.v2.iso_cnt - 2;
|
ratio = (1 << 4);
|
} else {
|
int i = 0;
|
for (i = 0; i < (pAgicCtx->attr.v1.iso_cnt - 2); i++) {
|
iso_lo = (int)(pAgicCtx->attr.v1.auto_params[i].iso);
|
iso_hi = (int)(pAgicCtx->attr.v1.auto_params[i + 1].iso);
|
LOGD_AGIC("index=%d, iso_lo=%d, iso_hi=%d", index, iso_lo, iso_hi);
|
if (ISO > iso_lo && ISO <= iso_hi) {
|
break;
|
}
|
}
|
ratio = ((ISO - iso_lo) * (1 << 4)) / (iso_hi - iso_lo);
|
index = i;
|
}
|
|
if (pAgicCtx->attr.v1.op_mode == RKAIQ_GIC_API_OPMODE_AUTO) {
|
GicV1SelectParam(&pAgicCtx->ConfigData.ConfigV20, ratio, index,
|
pAgicCtx->attr.v1.auto_params, pAgicCtx->attr.v1.iso_cnt);
|
} else {
|
GicV1SetManualParam(&pAgicCtx->ConfigData.ConfigV20, &pAgicCtx->attr.v1.manual_param);
|
}
|
pAgicCtx->ConfigData.ConfigV20.gic_en = pAgicCtx->attr.v1.gic_en;
|
pAgicCtx->ConfigData.ConfigV20.edge_open = pAgicCtx->attr.v1.edge_open;
|
pAgicCtx->ConfigData.ConfigV20.noise_cut_en = pAgicCtx->attr.v1.noise_cut_en;
|
pAgicCtx->ConfigData.ConfigV20.reglumapointsstep = 7;
|
pAgicCtx->ConfigData.ConfigV20.fusionratiohilimt1 = 0.75;
|
|
for (int i = 0; i < 15; i++) {
|
ave1 = LumaPoints[i];
|
noiseSigma = pAgicCtx->ConfigData.ConfigV20.noiseCurve_0 * sqrt(ave1) +
|
pAgicCtx->ConfigData.ConfigV20.noiseCurve_1;
|
if (noiseSigma < 0) {
|
noiseSigma = 0;
|
}
|
pAgicCtx->ConfigData.ConfigV20.sigma_y[i] = noiseSigma;
|
}
|
|
short mulBit = 0;
|
int bitValue = pAgicCtx->raw_bits;
|
if (bitValue > 10) {
|
mulBit = 1 << (bitValue - 10);
|
} else {
|
mulBit = 1;
|
}
|
pAgicCtx->ConfigData.ConfigV20.regminbusythre *= mulBit;
|
pAgicCtx->ConfigData.ConfigV20.regmingradthr1 *= mulBit;
|
pAgicCtx->ConfigData.ConfigV20.regmingradthr2 *= mulBit;
|
pAgicCtx->ConfigData.ConfigV20.reggbthre *= mulBit;
|
pAgicCtx->ConfigData.ConfigV20.regmaxcorv *= mulBit;
|
pAgicCtx->ConfigData.ConfigV20.regmaxcorvboth *= mulBit;
|
pAgicCtx->ConfigData.ConfigV20.regdarkthre *= mulBit;
|
pAgicCtx->ConfigData.ConfigV20.regdarktthrehi *= mulBit;
|
pAgicCtx->ConfigData.ConfigV20.regmingradthrdark1 *= mulBit;
|
pAgicCtx->ConfigData.ConfigV20.regmingradthrdark2 *= mulBit;
|
|
LOG1_AGIC("exit!");
|
}
|
|
void AgicProcessV21(AgicContext_t* pAgicCtx, int ISO) {
|
LOG1_AGIC("enter!");
|
|
float ave1 = 0.0f, noiseSigma = 0.0f;
|
short ratio = 0;
|
short LumaPoints[] = {0, 128, 256, 384, 512, 640, 768, 896,
|
1024, 1536, 2048, 2560, 3072, 3584, 4096};
|
int index = 0, iso_hi = 0, iso_lo = 0;
|
|
LOGD_AGIC("enter, ISO=%d", ISO);
|
|
if (pAgicCtx == NULL) LOGE_AGIC("null pointer");
|
|
if (ISO <= 50) {
|
index = 0;
|
ratio = 0;
|
} else if (ISO > 12800) {
|
index = pAgicCtx->attr.v2.iso_cnt - 2;
|
ratio = (1 << 4);
|
} else {
|
int i = 0;
|
for (i = 0; i < (pAgicCtx->attr.v2.iso_cnt - 2); i++) {
|
iso_lo = (int)(pAgicCtx->attr.v2.auto_params[i].iso);
|
iso_hi = (int)(pAgicCtx->attr.v2.auto_params[i + 1].iso);
|
LOGD_AGIC("index=%d, iso_lo=%d, iso_hi=%d", index, iso_lo, iso_hi);
|
if (ISO > iso_lo && ISO <= iso_hi) {
|
break;
|
}
|
}
|
ratio = ((ISO - iso_lo) * (1 << 4)) / (iso_hi - iso_lo);
|
index = i;
|
}
|
|
if (pAgicCtx->attr.v2.op_mode == RKAIQ_GIC_API_OPMODE_AUTO) {
|
GicV2SelectParam(&pAgicCtx->ConfigData.ConfigV21, ratio, index,
|
pAgicCtx->attr.v2.auto_params, pAgicCtx->attr.v2.iso_cnt);
|
} else {
|
GicV2SetManualParam(&pAgicCtx->ConfigData.ConfigV21, &pAgicCtx->attr.v2.manual_param);
|
}
|
pAgicCtx->ConfigData.ConfigV21.gic_en = pAgicCtx->attr.v2.gic_en;
|
|
for (int i = 0; i < 15; i++) {
|
ave1 = LumaPoints[i];
|
noiseSigma = pAgicCtx->ConfigData.ConfigV21.noiseCurve_0 * sqrt(ave1) +
|
pAgicCtx->ConfigData.ConfigV21.noiseCurve_1;
|
if (noiseSigma < 0) {
|
noiseSigma = 0;
|
}
|
pAgicCtx->ConfigData.ConfigV20.sigma_y[i] = noiseSigma;
|
}
|
|
short mulBit = 0;
|
int bitValue = pAgicCtx->raw_bits;
|
if (bitValue > 10) {
|
mulBit = 1 << (bitValue - 10);
|
} else {
|
mulBit = 1;
|
}
|
pAgicCtx->ConfigData.ConfigV21.regminbusythre *= mulBit;
|
pAgicCtx->ConfigData.ConfigV21.regmingradthr1 *= mulBit;
|
pAgicCtx->ConfigData.ConfigV21.regmingradthr2 *= mulBit;
|
pAgicCtx->ConfigData.ConfigV21.reggbthre *= mulBit;
|
pAgicCtx->ConfigData.ConfigV21.regmaxcorv *= mulBit;
|
pAgicCtx->ConfigData.ConfigV21.regmaxcorvboth *= mulBit;
|
pAgicCtx->ConfigData.ConfigV21.regdarkthre *= mulBit;
|
pAgicCtx->ConfigData.ConfigV21.regdarktthrehi *= mulBit;
|
pAgicCtx->ConfigData.ConfigV21.regmingradthrdark1 *= mulBit;
|
pAgicCtx->ConfigData.ConfigV21.regmingradthrdark2 *= mulBit;
|
|
LOG1_AGIC("exit!");
|
}
|
|
XCamReturn AgicProcess(AgicContext_t* pAgicCtx, int ISO, int mode) {
|
LOG1_AGIC("enter!");
|
|
if (CHECK_ISP_HW_V20())
|
AgicProcessV20(pAgicCtx, ISO);
|
else if (CHECK_ISP_HW_V21() || CHECK_ISP_HW_V30())
|
AgicProcessV21(pAgicCtx, ISO);
|
else
|
LOGE_AGIC("Wrong hardware version!! ");
|
|
LOG1_AGIC("exit!");
|
return XCAM_RETURN_NO_ERROR;
|
}
|
|
XCamReturn AgicGetProcResult(AgicContext_t* pAgicCtx) {
|
LOG1_AGIC("enter!");
|
|
if (pAgicCtx == NULL) {
|
LOGE_AGIC("null pointer");
|
return XCAM_RETURN_ERROR_PARAM;
|
}
|
|
if (CHECK_ISP_HW_V20())
|
AgicGetProcResultV20(pAgicCtx);
|
else if (CHECK_ISP_HW_V21() || CHECK_ISP_HW_V30())
|
AgicGetProcResultV21(pAgicCtx);
|
else
|
LOGE_AGIC("Wrong hardware version!! ");
|
|
LOG1_AGIC("exit!");
|
return XCAM_RETURN_NO_ERROR;
|
}
|