|
#include "rk_aiq_anr_algo_ynr.h"
|
|
RKAIQ_BEGIN_DECLARE
|
|
ANRresult_t ynr_get_mode_cell_idx_by_name(CalibDb_YNR_2_t *pCalibdb, char *name, int *mode_idx)
|
{
|
int i = 0;
|
ANRresult_t res = ANR_RET_SUCCESS;
|
|
if(pCalibdb == NULL){
|
LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
|
return ANR_RET_NULL_POINTER;
|
}
|
|
if(name == NULL){
|
LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
|
return ANR_RET_NULL_POINTER;
|
}
|
|
if(mode_idx == NULL){
|
LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
|
return ANR_RET_NULL_POINTER;
|
}
|
|
if(pCalibdb->mode_num < 1){
|
LOGE_ANR("%s(%d): mfnr mode cell num is zero\n", __FUNCTION__, __LINE__);
|
return ANR_RET_NULL_POINTER;
|
}
|
|
for(i=0; i<pCalibdb->mode_num; i++){
|
if(strncmp(name, pCalibdb->mode_cell[i].name, sizeof(pCalibdb->mode_cell[i].name)) == 0){
|
break;
|
}
|
}
|
|
if(i<pCalibdb->mode_num){
|
*mode_idx = i;
|
res = ANR_RET_SUCCESS;
|
}else{
|
*mode_idx = 0;
|
res = ANR_RET_FAILURE;
|
}
|
|
LOGD_ANR("%s:%d mode_name:%s mode_idx:%d i:%d \n", __FUNCTION__, __LINE__, name, *mode_idx, i);
|
return res;
|
|
}
|
|
|
ANRresult_t ynr_get_setting_idx_by_name(CalibDb_YNR_2_t *pCalibdb, char *name, int mode_idx, int *setting_idx)
|
{
|
int i = 0;
|
ANRresult_t res = ANR_RET_SUCCESS;
|
|
if(pCalibdb == NULL){
|
LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
|
return ANR_RET_NULL_POINTER;
|
}
|
|
if(name == NULL){
|
LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
|
return ANR_RET_NULL_POINTER;
|
}
|
|
if(setting_idx == NULL){
|
LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
|
return ANR_RET_NULL_POINTER;
|
}
|
|
for(i=0; i<CALIBDB_NR_SHARP_SETTING_LEVEL; i++){
|
if(strncmp(name, pCalibdb->mode_cell[mode_idx].setting[i].snr_mode, sizeof(pCalibdb->mode_cell[mode_idx].setting[i].snr_mode)) == 0){
|
break;
|
}
|
}
|
|
if(i<CALIBDB_NR_SHARP_SETTING_LEVEL){
|
*setting_idx = i;
|
res = ANR_RET_SUCCESS;
|
}else{
|
*setting_idx = 0;
|
res = ANR_RET_FAILURE;
|
}
|
|
LOGD_ANR("%s:%d snr_name:%s snr_idx:%d i:%d \n", __FUNCTION__, __LINE__,name, *setting_idx, i);
|
return res;
|
|
}
|
|
ANRresult_t ynr_config_setting_param(RKAnr_Ynr_Params_s *pParams, CalibDb_YNR_2_t *pCalibdb, char* param_mode, char* snr_name)
|
{
|
ANRresult_t res = ANR_RET_SUCCESS;
|
int mode_idx = 0;
|
int setting_idx = 0;
|
|
if(pParams == NULL){
|
LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
|
return ANR_RET_NULL_POINTER;
|
}
|
|
if(pCalibdb == NULL){
|
LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
|
return ANR_RET_NULL_POINTER;
|
}
|
|
res = ynr_get_mode_cell_idx_by_name(pCalibdb, param_mode, &mode_idx);
|
if(res != ANR_RET_SUCCESS){
|
LOGW_ANR("%s(%d): error!!! can't find mode name in iq files, use 0 instead\n", __FUNCTION__, __LINE__);
|
}
|
|
res = ynr_get_setting_idx_by_name(pCalibdb, snr_name, mode_idx, &setting_idx);
|
if(res != ANR_RET_SUCCESS){
|
LOGW_ANR("%s(%d): error!!! can't find setting in iq files, use 0 instead\n", __FUNCTION__, __LINE__);
|
}
|
|
res = init_ynr_params(pParams, pCalibdb, mode_idx, setting_idx);
|
|
return res;
|
|
}
|
ANRresult_t init_ynr_params(RKAnr_Ynr_Params_s *pYnrParams, CalibDb_YNR_2_t* pYnrCalib, int mode_idx, int setting_idx)
|
{
|
ANRresult_t res = ANR_RET_SUCCESS;
|
int i = 0;
|
int j = 0;
|
|
if(pYnrParams == NULL) {
|
LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
|
return ANR_RET_NULL_POINTER;
|
}
|
|
if(pYnrCalib == NULL) {
|
LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
|
return ANR_RET_NULL_POINTER;
|
}
|
|
RKAnr_Ynr_Params_Select_t *pParams = pYnrParams->aYnrParamsISO;
|
CalibDb_YNR_ISO_t *pCalibdb = pYnrCalib->mode_cell[mode_idx].setting[setting_idx].ynr_iso;
|
|
short isoCurveSectValue;
|
short isoCurveSectValue1;
|
int bit_shift;
|
int bit_proc;
|
int bit_calib;
|
|
bit_calib = 12;
|
bit_proc = YNR_SIGMA_BITS;
|
bit_shift = bit_calib - bit_proc;
|
isoCurveSectValue = (1 << (bit_calib - ISO_CURVE_POINT_BIT));//rawBit必须大于ISO_CURVE_POINT_BIT
|
isoCurveSectValue1 = (1 << bit_calib);// - 1;//rawBit必须大于ISO_CURVE_POINT_BIT, max use (1 << bit_calib);
|
|
#ifndef RK_SIMULATOR_HW
|
for(j = 0; j < MAX_ISO_STEP; j++) {
|
pParams[j].iso = pCalibdb[j].iso;
|
}
|
#endif
|
|
for(j = 0; j < MAX_ISO_STEP; j++) {
|
for(i = 0; i < WAVELET_LEVEL_NUM; i++) {
|
pParams[j].loFreqNoiseCi[i] = pCalibdb[j].ynr_lci[i];
|
pParams[j].ciISO[i * 3 + 0] = pCalibdb[j].ynr_lhci[i];
|
pParams[j].ciISO[i * 3 + 1] = pCalibdb[j].ynr_hlci[i];
|
pParams[j].ciISO[i * 3 + 2] = pCalibdb[j].ynr_hhci[i];
|
}
|
|
for(i = 0; i < ISO_CURVE_POINT_NUM; i++) {
|
float ave1, ave2, ave3, ave4;
|
if(i == (ISO_CURVE_POINT_NUM - 1)) {
|
ave1 = (float)isoCurveSectValue1;
|
}
|
else {
|
ave1 = (float)(i * isoCurveSectValue);
|
}
|
pParams[j].lumaPoints[i] = (short)ave1;
|
ave2 = ave1 * ave1;
|
ave3 = ave2 * ave1;
|
ave4 = ave3 * ave1;
|
pParams[j].noiseSigma[i] = pCalibdb[j].sigma_curve[0] * ave4
|
+ pCalibdb[j].sigma_curve[1] * ave3
|
+ pCalibdb[j].sigma_curve[2] * ave2
|
+ pCalibdb[j].sigma_curve[3] * ave1
|
+ pCalibdb[j].sigma_curve[4];
|
if(pParams[j].noiseSigma[i] < 0) {
|
pParams[j].noiseSigma[i] = 0;
|
}
|
}
|
|
for (i = 0; i < ISO_CURVE_POINT_NUM; i++) {
|
if(bit_shift > 0) {
|
pParams[j].lumaPoints[i] >>= bit_shift;
|
}
|
else {
|
pParams[j].lumaPoints[i] <<= ABS(bit_shift);
|
}
|
}
|
|
for(i = 0; i < WAVELET_LEVEL_NUM; i++) {
|
pParams[j].loFreqDenoiseWeight[i] = pCalibdb[j].denoise_weight[i];
|
pParams[j].loFreqBfScale[i] = pCalibdb[j].lo_bfScale[i];
|
}
|
|
for(i = 0; i < 6; i++) {
|
pParams[j].loFreqLumaNrCurvePoint[i] = pCalibdb[j].lo_lumaPoint[i];
|
pParams[j].loFreqLumaNrCurveRatio[i] = pCalibdb[j].lo_lumaRatio[i];
|
}
|
|
pParams[j].loFreqDenoiseStrength[0] = pCalibdb[j].imerge_ratio;
|
pParams[j].loFreqDenoiseStrength[1] = pCalibdb[j].imerge_bound;
|
pParams[j].loFreqDirectionStrength = pCalibdb[j].lo_directionStrength;
|
|
for(i = 0; i < WAVELET_LEVEL_NUM; i++) {
|
pParams[j].hiFreqDenoiseWeight[i] = pCalibdb[j].hi_denoiseWeight[i];
|
pParams[j].hiFreqBfScale[i] = pCalibdb[j].hi_bfScale[i];
|
pParams[j].hiFreqEdgeSoftness[i] = pCalibdb[j].hwith_d[i];
|
pParams[j].hiFreqSoftThresholdScale[i] = pCalibdb[j].hi_soft_thresh_scale[i];
|
pParams[j].lscGainRatioAdjust[i] = 1.0;
|
|
}
|
|
for(i = 0; i < 6; i++) {
|
pParams[j].hiFreqLumaNrCurvePoint[i] = pCalibdb[j].hi_lumaPoint[i];
|
pParams[j].hiFreqLumaNrCurveRatio[i] = pCalibdb[j].hi_lumaRatio[i];
|
}
|
pParams[j].hiFreqDenoiseStrength = pCalibdb[j].hi_denoiseStrength;
|
|
for(i = 0; i < 7; i++) {
|
pParams[j].radialNoiseCtrPoint[i] = 0;
|
pParams[j].radialNoiseCtrRatio[i] = 1.0;
|
}
|
|
for(i = 0; i < 6; i++) {
|
float tmp = pCalibdb[j].y_luma_point[i];
|
if(bit_shift > 0)
|
tmp /= (1 << bit_shift);
|
else
|
tmp *= (1 << ABS(bit_shift));
|
|
pParams[j].detailThre[i] = tmp;
|
pParams[j].detailThreRatioLevel[0][i] = pCalibdb[j].hgrad_y_level1[i];
|
pParams[j].detailThreRatioLevel[1][i] = pCalibdb[j].hgrad_y_level2[i];
|
pParams[j].detailThreRatioLevel[2][i] = pCalibdb[j].hgrad_y_level3[i];
|
pParams[j].detailThreLevel4[i] = tmp;
|
pParams[j].detailThreRatioLevel4[i] = pCalibdb[j].hgrad_y_level4[i];
|
}
|
|
pParams[j].detailMinAdjDnW = pCalibdb[j].hi_detailMinAdjDnW;
|
pParams[j].waveLetCoeffDeltaHi = 0;
|
pParams[j].waveLetCoeffDeltaLo = 0;
|
pParams[j].hiValueThre = 0;
|
pParams[j].loValueThre = 0;
|
}
|
|
memcpy(pYnrParams->ynr_ver_char, pYnrCalib->version, sizeof(pYnrParams->ynr_ver_char));
|
|
return res;
|
}
|
|
|
|
ANRresult_t ynr_get_setting_idx_by_name_json(CalibDbV2_YnrV1_t *pCalibdb, char *name, int *calib_idx, int *tuning_idx)
|
{
|
int i = 0;
|
ANRresult_t res = ANR_RET_SUCCESS;
|
|
if(pCalibdb == NULL){
|
LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
|
return ANR_RET_NULL_POINTER;
|
}
|
|
if(name == NULL){
|
LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
|
return ANR_RET_NULL_POINTER;
|
}
|
|
if(calib_idx == NULL){
|
LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
|
return ANR_RET_NULL_POINTER;
|
}
|
|
if(tuning_idx == NULL){
|
LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
|
return ANR_RET_NULL_POINTER;
|
}
|
|
for(i=0; i<pCalibdb->TuningPara.Setting_len; i++){
|
if(strncmp(name, pCalibdb->TuningPara.Setting[i].SNR_Mode , strlen(name)*sizeof(char)) == 0){
|
break;
|
}
|
}
|
|
if(i<pCalibdb->TuningPara.Setting_len){
|
*tuning_idx = i;
|
}else{
|
*tuning_idx = 0;
|
}
|
|
for(i=0; i<pCalibdb->CalibPara.Setting_len; i++){
|
if(strncmp(name, pCalibdb->CalibPara.Setting[i].SNR_Mode , strlen(name)*sizeof(char)) == 0){
|
break;
|
}
|
}
|
|
if(i<pCalibdb->CalibPara.Setting_len){
|
*calib_idx = i;
|
}else{
|
*calib_idx = 0;
|
}
|
|
LOGD_ANR("%s:%d snr_name:%s snr_idx:%d i:%d \n", __FUNCTION__, __LINE__,name, *calib_idx, i);
|
return res;
|
}
|
|
ANRresult_t init_ynr_params_json(RKAnr_Ynr_Params_s *pYnrParams, CalibDbV2_YnrV1_t* pYnrCalib, int calib_idx, int tuning_idx)
|
{
|
ANRresult_t res = ANR_RET_SUCCESS;
|
int i = 0;
|
int j = 0;
|
|
if(pYnrParams == NULL) {
|
LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
|
return ANR_RET_NULL_POINTER;
|
}
|
|
if(pYnrCalib == NULL) {
|
LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
|
return ANR_RET_NULL_POINTER;
|
}
|
|
RKAnr_Ynr_Params_Select_t *pParams = pYnrParams->aYnrParamsISO;
|
CalibDbV2_YnrV1_CalibPara_Setting_t *pCalibSetting = &pYnrCalib->CalibPara.Setting[calib_idx];
|
CalibDbV2_YnrV1_TuningPara_Setting_t *pTuningSetting = &pYnrCalib->TuningPara.Setting[tuning_idx];
|
CalibDbV2_YnrV1_CalibPara_Setting_ISO_t *pCalib_ISO = NULL;
|
CalibDbV2_YnrV1_TuningPara_Setting_ISO_t *pTuning_ISO = NULL;
|
|
short isoCurveSectValue;
|
short isoCurveSectValue1;
|
int bit_shift;
|
int bit_proc;
|
int bit_calib;
|
|
bit_calib = 12;
|
bit_proc = YNR_SIGMA_BITS;
|
bit_shift = bit_calib - bit_proc;
|
isoCurveSectValue = (1 << (bit_calib - ISO_CURVE_POINT_BIT));//rawBit必须大于ISO_CURVE_POINT_BIT
|
isoCurveSectValue1 = (1 << bit_calib);// - 1;//rawBit必须大于ISO_CURVE_POINT_BIT, max use (1 << bit_calib);
|
|
#ifndef RK_SIMULATOR_HW
|
for(j = 0; j < pTuningSetting->Tuning_ISO_len; j++) {
|
pParams[j].iso = pTuningSetting->Tuning_ISO[j].iso;
|
}
|
#endif
|
|
for(j = 0; j < pCalibSetting->Calib_ISO_len; j++) {
|
pCalib_ISO = &pCalibSetting->Calib_ISO[j];
|
for(i = 0; i < WAVELET_LEVEL_NUM; i++) {
|
pParams[j].loFreqNoiseCi[i] = pCalib_ISO->ynr_lci[i];
|
pParams[j].ciISO[i * 3 + 0] = pCalib_ISO->ynr_lhci[i];
|
pParams[j].ciISO[i * 3 + 1] = pCalib_ISO->ynr_hlci[i];
|
pParams[j].ciISO[i * 3 + 2] = pCalib_ISO->ynr_hhci[i];
|
}
|
|
for(i = 0; i < ISO_CURVE_POINT_NUM; i++) {
|
float ave1, ave2, ave3, ave4;
|
if(i == (ISO_CURVE_POINT_NUM - 1)) {
|
ave1 = (float)isoCurveSectValue1;
|
}
|
else {
|
ave1 = (float)(i * isoCurveSectValue);
|
}
|
pParams[j].lumaPoints[i] = (short)ave1;
|
ave2 = ave1 * ave1;
|
ave3 = ave2 * ave1;
|
ave4 = ave3 * ave1;
|
pParams[j].noiseSigma[i] = pCalib_ISO->sigma_curve[0] * ave4
|
+ pCalib_ISO->sigma_curve[1] * ave3
|
+ pCalib_ISO->sigma_curve[2] * ave2
|
+ pCalib_ISO->sigma_curve[3] * ave1
|
+ pCalib_ISO->sigma_curve[4];
|
if(pParams[j].noiseSigma[i] < 0) {
|
pParams[j].noiseSigma[i] = 0;
|
}
|
}
|
|
for (i = 0; i < ISO_CURVE_POINT_NUM; i++) {
|
if(bit_shift > 0) {
|
pParams[j].lumaPoints[i] >>= bit_shift;
|
}
|
else {
|
pParams[j].lumaPoints[i] <<= ABS(bit_shift);
|
}
|
}
|
}
|
|
for(j = 0; j < pTuningSetting->Tuning_ISO_len; j++) {
|
pTuning_ISO = &pTuningSetting->Tuning_ISO[j];
|
pParams[j].loFreqDenoiseWeight[0] = pTuning_ISO->denoise_weight_1;
|
pParams[j].loFreqDenoiseWeight[1] = pTuning_ISO->denoise_weight_2;
|
pParams[j].loFreqDenoiseWeight[2] = pTuning_ISO->denoise_weight_3;
|
pParams[j].loFreqDenoiseWeight[3] = pTuning_ISO->denoise_weight_4;
|
|
pParams[j].loFreqBfScale[0] = pTuning_ISO->lo_bfScale_1;
|
pParams[j].loFreqBfScale[1] = pTuning_ISO->lo_bfScale_2;
|
pParams[j].loFreqBfScale[2] = pTuning_ISO->lo_bfScale_3;
|
pParams[j].loFreqBfScale[3] = pTuning_ISO->lo_bfScale_4;
|
|
for(i = 0; i < 6; i++) {
|
pParams[j].loFreqLumaNrCurvePoint[i] = pTuning_ISO->luma_para.lo_lumaPoint[i];
|
pParams[j].loFreqLumaNrCurveRatio[i] = pTuning_ISO->luma_para.lo_lumaRatio[i];
|
}
|
|
pParams[j].loFreqDenoiseStrength[0] = pTuning_ISO->imerge_ratio;
|
pParams[j].loFreqDenoiseStrength[1] = pTuning_ISO->imerge_bound;
|
pParams[j].loFreqDirectionStrength = pTuning_ISO->lo_directionStrength;
|
|
|
pParams[j].hiFreqDenoiseWeight[0] = pTuning_ISO->hi_denoiseWeight_1;
|
pParams[j].hiFreqDenoiseWeight[1] = pTuning_ISO->hi_denoiseWeight_2;
|
pParams[j].hiFreqDenoiseWeight[2] = pTuning_ISO->hi_denoiseWeight_3;
|
pParams[j].hiFreqDenoiseWeight[3] = pTuning_ISO->hi_denoiseWeight_4;
|
|
pParams[j].hiFreqBfScale[0] = pTuning_ISO->hi_bfScale_1;
|
pParams[j].hiFreqBfScale[1] = pTuning_ISO->hi_bfScale_2;
|
pParams[j].hiFreqBfScale[2] = pTuning_ISO->hi_bfScale_3;
|
pParams[j].hiFreqBfScale[3] = pTuning_ISO->hi_bfScale_4;
|
|
for(int i=0; i<4; i++){
|
pParams[j].hiFreqEdgeSoftness[i] = pTuning_ISO->hwith_d[i];
|
}
|
|
pParams[j].hiFreqSoftThresholdScale[0] = pTuning_ISO->hi_soft_thresh_scale_1;
|
pParams[j].hiFreqSoftThresholdScale[1] = pTuning_ISO->hi_soft_thresh_scale_2;
|
pParams[j].hiFreqSoftThresholdScale[2] = pTuning_ISO->hi_soft_thresh_scale_3;
|
pParams[j].hiFreqSoftThresholdScale[3] = pTuning_ISO->hi_soft_thresh_scale_4;
|
|
for(int i=0; i<WAVELET_LEVEL_NUM; i++){
|
pParams[j].lscGainRatioAdjust[i] = 1.0;
|
}
|
|
|
for(i = 0; i < 6; i++) {
|
pParams[j].hiFreqLumaNrCurvePoint[i] = pTuning_ISO->luma_para.hi_lumaPoint[i];
|
pParams[j].hiFreqLumaNrCurveRatio[i] = pTuning_ISO->luma_para.hi_lumaRatio[i];
|
}
|
pParams[j].hiFreqDenoiseStrength = pTuning_ISO->hi_denoiseStrength;
|
|
for(i = 0; i < 7; i++) {
|
pParams[j].radialNoiseCtrPoint[i] = 0;
|
pParams[j].radialNoiseCtrRatio[i] = 1.0;
|
}
|
|
for(i = 0; i < 6; i++) {
|
float tmp = pTuning_ISO->hgrad_para.y_luma_point[i];
|
if(bit_shift > 0)
|
tmp /= (1 << bit_shift);
|
else
|
tmp *= (1 << ABS(bit_shift));
|
|
pParams[j].detailThre[i] = tmp;
|
pParams[j].detailThreRatioLevel[0][i] = pTuning_ISO->hgrad_para.hgrad_y_level1[i];
|
pParams[j].detailThreRatioLevel[1][i] = pTuning_ISO->hgrad_para.hgrad_y_level2[i];
|
pParams[j].detailThreRatioLevel[2][i] = pTuning_ISO->hgrad_para.hgrad_y_level3[i];
|
pParams[j].detailThreLevel4[i] = tmp;
|
pParams[j].detailThreRatioLevel4[i] = pTuning_ISO->hgrad_para.hgrad_y_level4[i];
|
}
|
|
pParams[j].detailMinAdjDnW = pTuning_ISO->hi_detailMinAdjDnW;
|
pParams[j].waveLetCoeffDeltaHi = 0;
|
pParams[j].waveLetCoeffDeltaLo = 0;
|
pParams[j].hiValueThre = 0;
|
pParams[j].loValueThre = 0;
|
}
|
|
strncpy(pYnrParams->ynr_ver_char, pYnrCalib->Version, sizeof(pYnrParams->ynr_ver_char));
|
|
ynr_algo_param_printf(pYnrParams);
|
return res;
|
}
|
|
ANRresult_t ynr_algo_param_printf(RKAnr_Ynr_Params_s *pYnrParams)
|
{
|
int i,j;
|
RKAnr_Ynr_Params_Select_t *pParams;
|
|
if(pYnrParams != NULL){
|
pParams = pYnrParams->aYnrParamsISO;
|
|
for(j = 0; j < MAX_ISO_STEP; j++) {
|
#ifndef RK_SIMULATOR_HW
|
LOGD_ANR("iso:%f\n", pParams[j].iso);
|
#endif
|
|
for(i = 0; i < WAVELET_LEVEL_NUM; i++) {
|
LOGD_ANR("wave_level:%d lci:%f lhci:%f hlci:%f hhci:%f\n",
|
i,
|
pParams[j].loFreqNoiseCi[i],
|
pParams[j].ciISO[i * 3 + 0],
|
pParams[j].ciISO[i * 3 + 1],
|
pParams[j].ciISO[i * 3 + 2]);
|
}
|
|
LOGD_ANR("lo_bfscale:%f %f %f %f\n",
|
pParams[j].loFreqBfScale[0],
|
pParams[j].loFreqBfScale[1],
|
pParams[j].loFreqBfScale[2],
|
pParams[j].loFreqBfScale[3]);
|
|
LOGD_ANR("denoise_weight:%f %f %f %f\n",
|
pParams[j].loFreqDenoiseWeight[0],
|
pParams[j].loFreqDenoiseWeight[1],
|
pParams[j].loFreqDenoiseWeight[2],
|
pParams[j].loFreqDenoiseWeight[3]);
|
|
LOGD_ANR("imerge_ratio:%f imerge_bound:%f lo_directionStrength:%f\n",
|
pParams[j].loFreqDenoiseStrength[0],
|
pParams[j].loFreqDenoiseStrength[1],
|
pParams[j].loFreqDirectionStrength);
|
|
for(i = 0; i < 6; i++) {
|
LOGD_ANR("lo luma:%f ratio:%f\n",
|
pParams[j].loFreqLumaNrCurvePoint[i],
|
pParams[j].loFreqLumaNrCurveRatio[i]);
|
}
|
|
|
LOGD_ANR("hi_bfscale:%f %f %f %f\n",
|
pParams[j].hiFreqBfScale[0],
|
pParams[j].hiFreqBfScale[1],
|
pParams[j].hiFreqBfScale[2],
|
pParams[j].hiFreqBfScale[3]);
|
|
|
LOGD_ANR("hi_denoise_weight:%f %f %f %f\n",
|
pParams[j].hiFreqDenoiseWeight[0],
|
pParams[j].hiFreqDenoiseWeight[1],
|
pParams[j].hiFreqDenoiseWeight[2],
|
pParams[j].hiFreqDenoiseWeight[3]);
|
|
LOGD_ANR("hi_ThresholdScale:%f %f %f %f\n",
|
pParams[j].hiFreqSoftThresholdScale[0],
|
pParams[j].hiFreqSoftThresholdScale[1],
|
pParams[j].hiFreqSoftThresholdScale[2],
|
pParams[j].hiFreqSoftThresholdScale[3]);
|
|
LOGD_ANR("hwith_d:%f %f %f %f\n",
|
pParams[j].hiFreqEdgeSoftness[0],
|
pParams[j].hiFreqEdgeSoftness[1],
|
pParams[j].hiFreqEdgeSoftness[2],
|
pParams[j].hiFreqEdgeSoftness[3]);
|
|
LOGD_ANR("hi_denoiseStrength:%f detailMinAdjDnW:%f\n",
|
pParams[j].hiFreqDenoiseStrength,
|
pParams[j].detailMinAdjDnW);
|
|
for(i = 0; i < 6; i++) {
|
LOGD_ANR("hi luma:%f ratio:%f\n",
|
pParams[j].hiFreqLumaNrCurvePoint[i],
|
pParams[j].hiFreqLumaNrCurveRatio[i]);
|
}
|
|
}
|
}
|
|
return ANR_RET_SUCCESS;
|
}
|
|
|
ANRresult_t ynr_config_setting_param_json(RKAnr_Ynr_Params_s *pParams, CalibDbV2_YnrV1_t*pCalibdb, char* param_mode, char* snr_name)
|
{
|
ANRresult_t res = ANR_RET_SUCCESS;
|
int tuning_idx = 0;
|
int calib_idx = 0;
|
|
if(pParams == NULL){
|
LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
|
return ANR_RET_NULL_POINTER;
|
}
|
|
if(pCalibdb == NULL){
|
LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
|
return ANR_RET_NULL_POINTER;
|
}
|
|
res = ynr_get_setting_idx_by_name_json(pCalibdb, snr_name, &calib_idx, &tuning_idx);
|
if(res != ANR_RET_SUCCESS){
|
LOGW_ANR("%s(%d): error!!! can't find setting in iq files, use 0 instead\n", __FUNCTION__, __LINE__);
|
}
|
|
res = init_ynr_params_json(pParams, pCalibdb, calib_idx, tuning_idx);
|
|
return res;
|
|
}
|
|
ANRresult_t select_ynr_params_by_ISO(RKAnr_Ynr_Params_t *stYnrParam, RKAnr_Ynr_Params_Select_t *stYnrParamSelected, ANRExpInfo_t *pExpInfo, short bitValue)
|
{
|
short multBit;
|
float ratio = 0.0f;
|
int isoValue = 50;
|
RKAnr_Ynr_Params_Select_t *pstYNrTuneParamHi = NULL;
|
RKAnr_Ynr_Params_Select_t *pstYNrTuneParamLo = NULL;
|
|
|
ANRresult_t res = ANR_RET_SUCCESS;
|
|
if(stYnrParam == NULL) {
|
LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
|
return ANR_RET_NULL_POINTER;
|
}
|
|
if(stYnrParamSelected == NULL) {
|
LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
|
return ANR_RET_NULL_POINTER;
|
}
|
|
if(pExpInfo == NULL) {
|
LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
|
return ANR_RET_NULL_POINTER;
|
}
|
|
/**************change bits*****************/
|
|
memcpy(stYnrParamSelected->ynr_ver_char, stYnrParam->ynr_ver_char, sizeof(stYnrParamSelected->ynr_ver_char));
|
|
/*********************************/
|
bitValue = RKAIQ_YNR_SIGMA_BITS;
|
multBit = 1;
|
if(bitValue >= 8)
|
{
|
multBit = 1 << (bitValue - 8);
|
}
|
|
#if 0
|
if(isoValue > 50 && isoValue <= 100)
|
{
|
ratio = (isoValue - 50) / (float)(100 - 50);
|
|
pstYNrTuneParamHi = &stYnrParam->stYNrParamsISO100;
|
pstYNrTuneParamLo = &stYnrParam->stYNrParamsISO50;
|
}
|
else if(isoValue > 100 && isoValue <= 200)
|
{
|
ratio = (isoValue - 100) / (float)(200 - 100);
|
|
pstYNrTuneParamHi = &stYnrParam->stYNrParamsISO200;
|
pstYNrTuneParamLo = &stYnrParam->stYNrParamsISO100;
|
}
|
else if(isoValue > 200 && isoValue <= 400)
|
{
|
ratio = (isoValue - 200) / (float)(400 - 200);
|
|
pstYNrTuneParamHi = &stYnrParam->stYNrParamsISO400;
|
pstYNrTuneParamLo = &stYnrParam->stYNrParamsISO200;
|
}
|
else if(isoValue > 400 && isoValue <= 800)
|
{
|
ratio = (isoValue - 400) / (float)(800 - 400);
|
|
pstYNrTuneParamHi = &stYnrParam->stYNrParamsISO800;
|
pstYNrTuneParamLo = &stYnrParam->stYNrParamsISO400;
|
}
|
else if(isoValue > 800 && isoValue <= 1600)
|
{
|
ratio = (isoValue - 800) / (float)(1600 - 800);
|
|
pstYNrTuneParamHi = &stYnrParam->stYNrParamsISO1600;
|
pstYNrTuneParamLo = &stYnrParam->stYNrParamsISO800;
|
}
|
else if(isoValue > 1600 && isoValue <= 3200)
|
{
|
ratio = (isoValue - 1600) / (float)(3200 - 1600);
|
|
pstYNrTuneParamHi = &stYnrParam->stYNrParamsISO3200;
|
pstYNrTuneParamLo = &stYnrParam->stYNrParamsISO1600;
|
}
|
else if(isoValue > 3200 && isoValue <= 6400)
|
{
|
ratio = (isoValue - 3200) / (float)(6400 - 3200);
|
|
pstYNrTuneParamHi = &stYnrParam->stYNrParamsISO6400;
|
pstYNrTuneParamLo = &stYnrParam->stYNrParamsISO3200;
|
}
|
else if(isoValue > 6400 && isoValue <= 12800)
|
{
|
ratio = (isoValue - 6400) / (float)(12800 - 6400);
|
|
pstYNrTuneParamHi = &stYnrParam->stYNrParamsISO12800;
|
pstYNrTuneParamLo = &stYnrParam->stYNrParamsISO6400;
|
}
|
else if(isoValue > 12800)
|
{
|
ratio = 1;
|
|
pstYNrTuneParamHi = &stYnrParam->stYNrParamsISO12800;
|
pstYNrTuneParamLo = &stYnrParam->stYNrParamsISO6400;
|
}
|
else if(isoValue <= 50)
|
{
|
ratio = 0;
|
|
pstYNrTuneParamHi = &stYnrParam->stYNrParamsISO100;
|
pstYNrTuneParamLo = &stYnrParam->stYNrParamsISO50;
|
}
|
#endif
|
|
if(pExpInfo->mfnr_mode_3to1){
|
isoValue = pExpInfo->preIso[pExpInfo->hdr_mode];
|
}else{
|
isoValue = pExpInfo->arIso[pExpInfo->hdr_mode];
|
}
|
|
int iso_div = 50;
|
int lowIso = 50;
|
int highIso = 50;
|
int i=0;
|
|
#ifndef RK_SIMULATOR_HW
|
for(i = 0; i < MAX_ISO_STEP - 1; i++) {
|
lowIso = stYnrParam->aYnrParamsISO[i].iso;
|
highIso = stYnrParam->aYnrParamsISO[i + 1].iso;
|
if(isoValue >= lowIso && isoValue <= highIso) {
|
ratio = (isoValue - lowIso ) / (float)(highIso - lowIso);
|
pstYNrTuneParamHi = &stYnrParam->aYnrParamsISO[i + 1];
|
pstYNrTuneParamLo = &stYnrParam->aYnrParamsISO[i];
|
break;
|
}
|
}
|
|
if(i == MAX_ISO_STEP - 1){
|
if(isoValue < stYnrParam->aYnrParamsISO[0].iso) {
|
ratio = 0;
|
lowIso = stYnrParam->aYnrParamsISO[0].iso;
|
highIso = stYnrParam->aYnrParamsISO[1].iso;
|
pstYNrTuneParamHi = &stYnrParam->aYnrParamsISO[1];
|
pstYNrTuneParamLo = &stYnrParam->aYnrParamsISO[0];
|
}
|
if(isoValue > stYnrParam->aYnrParamsISO[MAX_ISO_STEP - 1].iso) {
|
ratio = 1;
|
lowIso = stYnrParam->aYnrParamsISO[MAX_ISO_STEP - 2].iso;
|
highIso = stYnrParam->aYnrParamsISO[MAX_ISO_STEP - 1].iso;
|
pstYNrTuneParamHi = &stYnrParam->aYnrParamsISO[MAX_ISO_STEP - 2];
|
pstYNrTuneParamLo = &stYnrParam->aYnrParamsISO[MAX_ISO_STEP - 1];
|
}
|
}
|
#else
|
for(i = 0; i < MAX_ISO_STEP - 1; i++) {
|
int lowIso = iso_div * (1 << i);
|
int highIso = iso_div * (1 << (i + 1));
|
if(isoValue >= lowIso && isoValue <= highIso) {
|
ratio = (isoValue - lowIso ) / (float)(highIso - lowIso);
|
pstYNrTuneParamHi = &stYnrParam->aYnrParamsISO[i + 1];
|
pstYNrTuneParamLo = &stYnrParam->aYnrParamsISO[i];
|
break;
|
}
|
}
|
|
if(i == MAX_ISO_STEP - 1){
|
if(isoValue < iso_div) {
|
ratio = 0;
|
pstYNrTuneParamHi = &stYnrParam->aYnrParamsISO[1];
|
pstYNrTuneParamLo = &stYnrParam->aYnrParamsISO[0];
|
}
|
|
if(isoValue > iso_div * (2 << MAX_ISO_STEP)) {
|
ratio = 1;
|
pstYNrTuneParamHi = &stYnrParam->aYnrParamsISO[MAX_ISO_STEP - 2];
|
pstYNrTuneParamLo = &stYnrParam->aYnrParamsISO[MAX_ISO_STEP - 1];
|
}
|
}
|
#endif
|
|
LOGD_ANR("oyyf %s:%d iso:%d low:%d hight:%d ratio:%f\n", __FUNCTION__, __LINE__,
|
isoValue, lowIso, highIso, ratio);
|
|
//高频Ci值和亮度噪声曲线
|
for(int i = 0; i < 12; i++)
|
{
|
stYnrParamSelected->ciISO[i] = ratio * (pstYNrTuneParamHi->ciISO[i] - pstYNrTuneParamLo->ciISO[i]) + pstYNrTuneParamLo->ciISO[i];
|
}
|
|
for(int i = 0; i < ISO_CURVE_POINT_NUM; i++)
|
{
|
stYnrParamSelected->noiseSigma[i] = ratio * (pstYNrTuneParamHi->noiseSigma[i] - pstYNrTuneParamLo->noiseSigma[i]) + pstYNrTuneParamLo->noiseSigma[i];
|
stYnrParamSelected->lumaPoints[i] = (short)(ratio * (pstYNrTuneParamHi->lumaPoints[i] - pstYNrTuneParamLo->lumaPoints[i]) + pstYNrTuneParamLo->lumaPoints[i]);
|
}
|
|
//小波低频层去噪tuning参数
|
for(int i = 0; i < WAVELET_LEVEL_NUM; i++)
|
{
|
stYnrParamSelected->loFreqNoiseCi[i] = ratio * (pstYNrTuneParamHi->loFreqNoiseCi[i] - pstYNrTuneParamLo->loFreqNoiseCi[i]) + pstYNrTuneParamLo->loFreqNoiseCi[i];
|
stYnrParamSelected->loFreqDenoiseWeight[i] = ratio * (pstYNrTuneParamHi->loFreqDenoiseWeight[i] - pstYNrTuneParamLo->loFreqDenoiseWeight[i]) + pstYNrTuneParamLo->loFreqDenoiseWeight[i];
|
stYnrParamSelected->loFreqBfScale[i] = ratio * (pstYNrTuneParamHi->loFreqBfScale[i] - pstYNrTuneParamLo->loFreqBfScale[i]) + pstYNrTuneParamLo->loFreqBfScale[i];
|
}
|
|
// fix gain table bug
|
//float adj = 16 / sqrt(32.0f) / int(16 / sqrt(32.0f));
|
#ifndef RK_SIMULATOR_HW
|
float isoValue_clip = MIN(isoValue, iso_div * (2 << MAX_ISO_STEP));
|
float gain_f = sqrt(50.0f / isoValue_clip);
|
if (gain_f < 0.5f)
|
{
|
for (int i = 0; i < 12; i++)
|
{
|
stYnrParamSelected->ciISO[i] /= 2.0f;
|
}
|
|
for (int i = 0; i < WAVELET_LEVEL_NUM; i++)
|
{
|
stYnrParamSelected->loFreqNoiseCi[i] /= 2.0f;
|
}
|
|
gain_f *= 2.0f;
|
}
|
for (int i = 0; i < ISO_CURVE_POINT_NUM; i++)
|
{
|
stYnrParamSelected->noiseSigma[i] *= gain_f;
|
}
|
#endif
|
|
for(int i = 0; i < 6; i++)
|
{
|
stYnrParamSelected->loFreqLumaNrCurvePoint[i] = ratio * (pstYNrTuneParamHi->loFreqLumaNrCurvePoint[i] - pstYNrTuneParamLo->loFreqLumaNrCurvePoint[i]) + pstYNrTuneParamLo->loFreqLumaNrCurvePoint[i];
|
stYnrParamSelected->loFreqLumaNrCurveRatio[i] = ratio * (pstYNrTuneParamHi->loFreqLumaNrCurveRatio[i] - pstYNrTuneParamLo->loFreqLumaNrCurveRatio[i]) + pstYNrTuneParamLo->loFreqLumaNrCurveRatio[i];
|
|
stYnrParamSelected->loFreqLumaNrCurvePoint[i] *= multBit;
|
}
|
|
//stYnrParamSelected->loFreqDenoiseStrength = ratio * (pstYNrTuneParamHi->loFreqDenoiseStrength - pstYNrTuneParamLo->loFreqDenoiseStrength) + pstYNrTuneParamLo->loFreqDenoiseStrength;
|
stYnrParamSelected->loFreqDenoiseStrength[0] = ratio * (pstYNrTuneParamHi->loFreqDenoiseStrength[0] - pstYNrTuneParamLo->loFreqDenoiseStrength[0]) + pstYNrTuneParamLo->loFreqDenoiseStrength[0];
|
stYnrParamSelected->loFreqDenoiseStrength[1] = 1.0f / stYnrParamSelected->loFreqDenoiseStrength[0] / 2;
|
|
stYnrParamSelected->loFreqDirectionStrength = ratio * (pstYNrTuneParamHi->loFreqDirectionStrength - pstYNrTuneParamLo->loFreqDirectionStrength) + pstYNrTuneParamLo->loFreqDirectionStrength;
|
|
//小波高频层去噪tuning参数
|
for(int i = 0; i < WAVELET_LEVEL_NUM; i++)
|
{
|
stYnrParamSelected->hiFreqDenoiseWeight[i] = ratio * (pstYNrTuneParamHi->hiFreqDenoiseWeight[i] - pstYNrTuneParamLo->hiFreqDenoiseWeight[i]) + pstYNrTuneParamLo->hiFreqDenoiseWeight[i];
|
stYnrParamSelected->hiFreqSoftThresholdScale[i] = ratio * (pstYNrTuneParamHi->hiFreqSoftThresholdScale[i] - pstYNrTuneParamLo->hiFreqSoftThresholdScale[i]) + pstYNrTuneParamLo->hiFreqSoftThresholdScale[i];
|
stYnrParamSelected->hiFreqBfScale[i] = ratio * (pstYNrTuneParamHi->hiFreqBfScale[i] - pstYNrTuneParamLo->hiFreqBfScale[i]) + pstYNrTuneParamLo->hiFreqBfScale[i];
|
stYnrParamSelected->hiFreqEdgeSoftness[i] = ratio * (pstYNrTuneParamHi->hiFreqEdgeSoftness[i] - pstYNrTuneParamLo->hiFreqEdgeSoftness[i]) + pstYNrTuneParamLo->hiFreqEdgeSoftness[i];
|
stYnrParamSelected->lscGainRatioAdjust[i] = ratio * (pstYNrTuneParamHi->lscGainRatioAdjust[i] - pstYNrTuneParamLo->lscGainRatioAdjust[i]) + pstYNrTuneParamLo->lscGainRatioAdjust[i];
|
}
|
|
for(int i = 0; i < 6; i++)
|
{
|
stYnrParamSelected->hiFreqLumaNrCurvePoint[i] = ratio * (pstYNrTuneParamHi->hiFreqLumaNrCurvePoint[i] - pstYNrTuneParamLo->hiFreqLumaNrCurvePoint[i]) + pstYNrTuneParamLo->hiFreqLumaNrCurvePoint[i];
|
stYnrParamSelected->hiFreqLumaNrCurveRatio[i] = ratio * (pstYNrTuneParamHi->hiFreqLumaNrCurveRatio[i] - pstYNrTuneParamLo->hiFreqLumaNrCurveRatio[i]) + pstYNrTuneParamLo->hiFreqLumaNrCurveRatio[i];
|
|
stYnrParamSelected->hiFreqLumaNrCurvePoint[i] *= multBit;
|
}
|
|
stYnrParamSelected->hiFreqDenoiseStrength = ratio * (pstYNrTuneParamHi->hiFreqDenoiseStrength - pstYNrTuneParamLo->hiFreqDenoiseStrength) + pstYNrTuneParamLo->hiFreqDenoiseStrength;
|
|
//
|
for(int i = 0; i < 6; i++)
|
{
|
stYnrParamSelected->detailThre[i] = ratio * (pstYNrTuneParamHi->detailThre[i] - pstYNrTuneParamLo->detailThre[i]) + pstYNrTuneParamLo->detailThre[i];
|
stYnrParamSelected->detailThreRatioLevel[0][i] = ratio * (pstYNrTuneParamHi->detailThreRatioLevel[0][i] - pstYNrTuneParamLo->detailThreRatioLevel[0][i]) + pstYNrTuneParamLo->detailThreRatioLevel[0][i];
|
stYnrParamSelected->detailThreRatioLevel[1][i] = ratio * (pstYNrTuneParamHi->detailThreRatioLevel[1][i] - pstYNrTuneParamLo->detailThreRatioLevel[1][i]) + pstYNrTuneParamLo->detailThreRatioLevel[1][i];
|
stYnrParamSelected->detailThreRatioLevel[2][i] = ratio * (pstYNrTuneParamHi->detailThreRatioLevel[2][i] - pstYNrTuneParamLo->detailThreRatioLevel[2][i]) + pstYNrTuneParamLo->detailThreRatioLevel[2][i];
|
|
stYnrParamSelected->detailThreLevel4[i] = ratio * (pstYNrTuneParamHi->detailThreLevel4[i] - pstYNrTuneParamLo->detailThreLevel4[i]) + pstYNrTuneParamLo->detailThreLevel4[i];
|
stYnrParamSelected->detailThreRatioLevel4[i] = ratio * (pstYNrTuneParamHi->detailThreRatioLevel4[i] - pstYNrTuneParamLo->detailThreRatioLevel4[i]) + pstYNrTuneParamLo->detailThreRatioLevel4[i];
|
}
|
stYnrParamSelected->detailMinAdjDnW = ratio * (pstYNrTuneParamHi->detailMinAdjDnW - pstYNrTuneParamLo->detailMinAdjDnW) + pstYNrTuneParamLo->detailMinAdjDnW;
|
|
//stYnrParamSelected->detailHiHiTh = ratio * (pstYNrTuneParamHi->detailHiHiTh - pstYNrTuneParamLo->detailHiHiTh) + pstYNrTuneParamLo->detailHiHiTh;//
|
//stYnrParamSelected->detailHiLoTh = ratio * (pstYNrTuneParamHi->detailHiLoTh - pstYNrTuneParamLo->detailHiLoTh) + pstYNrTuneParamLo->detailHiLoTh;
|
//stYnrParamSelected->detailLoHiTh = ratio * (pstYNrTuneParamHi->detailLoHiTh - pstYNrTuneParamLo->detailLoHiTh) + pstYNrTuneParamLo->detailLoHiTh;
|
//stYnrParamSelected->detailLoLoTh = ratio * (pstYNrTuneParamHi->detailLoLoTh - pstYNrTuneParamLo->detailLoLoTh) + pstYNrTuneParamLo->detailLoLoTh;
|
//stYnrParamSelected->detailHiHiRatio = ratio * (pstYNrTuneParamHi->detailHiHiRatio - pstYNrTuneParamLo->detailHiHiRatio) + pstYNrTuneParamLo->detailHiHiRatio;
|
//stYnrParamSelected->detailHiLoRatio = ratio * (pstYNrTuneParamHi->detailHiLoRatio - pstYNrTuneParamLo->detailHiLoRatio) + pstYNrTuneParamLo->detailHiLoRatio;
|
//stYnrParamSelected->detailLoHiRatio = ratio * (pstYNrTuneParamHi->detailLoHiRatio - pstYNrTuneParamLo->detailLoHiRatio) + pstYNrTuneParamLo->detailLoHiRatio;
|
//stYnrParamSelected->detailLoLoRatio = ratio * (pstYNrTuneParamHi->detailLoLoRatio - pstYNrTuneParamLo->detailLoLoRatio) + pstYNrTuneParamLo->detailLoLoRatio;
|
//stYnrParamSelected->detailMaxAdjDnW = ratio * (pstYNrTuneParamHi->detailMaxAdjDnW - pstYNrTuneParamLo->detailMaxAdjDnW) + pstYNrTuneParamLo->detailMaxAdjDnW;
|
|
//stYnrParamSelected->detailHiHiThLevel4H = ratio * (pstYNrTuneParamHi->detailHiHiThLevel4H - pstYNrTuneParamLo->detailHiHiThLevel4H) + pstYNrTuneParamLo->detailHiHiThLevel4H;
|
//stYnrParamSelected->detailHiLoThLevel4H = ratio * (pstYNrTuneParamHi->detailHiLoThLevel4H - pstYNrTuneParamLo->detailHiLoThLevel4H) + pstYNrTuneParamLo->detailHiLoThLevel4H;
|
//stYnrParamSelected->detailLoHiThLevel4H = ratio * (pstYNrTuneParamHi->detailLoHiThLevel4H - pstYNrTuneParamLo->detailLoHiThLevel4H) + pstYNrTuneParamLo->detailLoHiThLevel4H;
|
//stYnrParamSelected->detailLoLoThLevel4H = ratio * (pstYNrTuneParamHi->detailLoLoThLevel4H - pstYNrTuneParamLo->detailLoLoThLevel4H) + pstYNrTuneParamLo->detailLoLoThLevel4H;
|
//stYnrParamSelected->detailHiHiRatioLevel4H = ratio * (pstYNrTuneParamHi->detailHiHiRatioLevel4H - pstYNrTuneParamLo->detailHiHiRatioLevel4H) + pstYNrTuneParamLo->detailHiHiRatioLevel4H;
|
//stYnrParamSelected->detailHiLoRatioLevel4H = ratio * (pstYNrTuneParamHi->detailHiLoRatioLevel4H - pstYNrTuneParamLo->detailHiLoRatioLevel4H) + pstYNrTuneParamLo->detailHiLoRatioLevel4H;
|
//stYnrParamSelected->detailLoHiRatioLevel4H = ratio * (pstYNrTuneParamHi->detailLoHiRatioLevel4H - pstYNrTuneParamLo->detailLoHiRatioLevel4H) + pstYNrTuneParamLo->detailLoHiRatioLevel4H;
|
//stYnrParamSelected->detailLoLoRatioLevel4H = ratio * (pstYNrTuneParamHi->detailLoLoRatioLevel4H - pstYNrTuneParamLo->detailLoLoRatioLevel4H) + pstYNrTuneParamLo->detailLoLoRatioLevel4H;
|
//
|
//径向去噪tuning参数
|
for(int i = 0; i < 7; i++)
|
{
|
stYnrParamSelected->radialNoiseCtrPoint[i] = (short)(ratio * (pstYNrTuneParamHi->radialNoiseCtrPoint[i] - pstYNrTuneParamLo->radialNoiseCtrPoint[i]) + pstYNrTuneParamLo->radialNoiseCtrPoint[i]);
|
stYnrParamSelected->radialNoiseCtrRatio[i] = ratio * (pstYNrTuneParamHi->radialNoiseCtrRatio[i] - pstYNrTuneParamLo->radialNoiseCtrRatio[i]) + pstYNrTuneParamLo->radialNoiseCtrRatio[i];
|
}
|
|
//小波第四层LL递归参数
|
stYnrParamSelected->waveLetCoeffDeltaHi = (short)(ratio * (pstYNrTuneParamHi->waveLetCoeffDeltaHi - pstYNrTuneParamLo->waveLetCoeffDeltaHi) + pstYNrTuneParamLo->waveLetCoeffDeltaHi);
|
stYnrParamSelected->waveLetCoeffDeltaLo = (short)(ratio * (pstYNrTuneParamHi->waveLetCoeffDeltaLo - pstYNrTuneParamLo->waveLetCoeffDeltaLo) + pstYNrTuneParamLo->waveLetCoeffDeltaLo);
|
stYnrParamSelected->hiValueThre = (short)(ratio * (pstYNrTuneParamHi->hiValueThre - pstYNrTuneParamLo->hiValueThre) + pstYNrTuneParamLo->hiValueThre);
|
stYnrParamSelected->loValueThre = (short)(ratio * (pstYNrTuneParamHi->loValueThre - pstYNrTuneParamLo->loValueThre) + pstYNrTuneParamLo->loValueThre);
|
stYnrParamSelected->ynr_level4_max_gain = ROUND_F(sqrt((float)isoValue / 50) * (1 << GAIN_YNR_FIX_BITS_DECI));
|
|
return res;
|
}
|
|
|
int find_top_one_pos(int data)
|
{
|
int i, j = 1;
|
int pos = 0;
|
for(i = 0; i < 32; i++)
|
{
|
if(data & j)
|
{
|
pos = i + 1;
|
}
|
j = j << 1;
|
}
|
return pos;
|
}
|
|
ANRresult_t ynr_fix_transfer(RKAnr_Ynr_Params_Select_t* ynr, RKAnr_Ynr_Fix_t *pNrCfg, float gain_ratio, float fStrength)
|
{
|
LOGI_ANR("%s:(%d) enter \n", __FUNCTION__, __LINE__);
|
|
ANRresult_t res = ANR_RET_SUCCESS;
|
|
if(ynr == NULL) {
|
LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
|
return ANR_RET_NULL_POINTER;
|
}
|
|
if(pNrCfg == NULL) {
|
LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
|
return ANR_RET_NULL_POINTER;
|
}
|
|
LOGD_ANR("%s:%d strength:%f\n", __FUNCTION__, __LINE__, fStrength);
|
if(fStrength <= 0.0){
|
fStrength = 0.000001;
|
}
|
|
int i = 0;
|
int j = 0;
|
int tmp = 0;
|
int strength_i = 2;
|
|
//0x0104 - 0x0108
|
for(i = 0; i < 16; i++) {
|
pNrCfg->ynr_sgm_dx[i] = find_top_one_pos(ynr->lumaPoints[i + 1] - ynr->lumaPoints[i]) - 2;
|
LOGI_ANR("##########ynr sgm dx[%d] :%d reg:%d\n", i, ynr->lumaPoints[i], pNrCfg->ynr_sgm_dx[i]);
|
}
|
|
//0x010c - 0x012c
|
for(i = 0; i < 17; i++) {
|
float rate;
|
for(j = 0; j < 6; j++) {
|
if(ynr->lumaPoints[i] <= ynr->loFreqLumaNrCurvePoint[j])
|
break;
|
}
|
|
if(j <= 0)
|
rate = ynr->loFreqLumaNrCurveRatio[0];
|
else if(j >= 6)
|
rate = ynr->loFreqLumaNrCurveRatio[5];
|
else {
|
rate = ((float)ynr->lumaPoints[i] - ynr->loFreqLumaNrCurvePoint[j - 1]) / (ynr->loFreqLumaNrCurvePoint[j] - ynr->loFreqLumaNrCurvePoint[j - 1]);
|
rate = ynr->loFreqLumaNrCurveRatio[j - 1] + rate * (ynr->loFreqLumaNrCurveRatio[j] - ynr->loFreqLumaNrCurveRatio[j - 1]);
|
}
|
tmp = ynr->noiseSigma[i] * (1 << FIX_BIT_NOISE_SIGMA);
|
tmp = (int)(rate * tmp);
|
//clip sigma be 10bit;
|
pNrCfg->ynr_lsgm_y[i] = MIN(tmp / ((1 << (12 - YNR_SIGMA_BITS)) * sqrt(gain_ratio)), (1 << (FIX_BIT_NOISE_SIGMA + 9)) - 1);
|
// pNrCfg->ynr_lsgm_y[i] = tmp / (1 << (12 - YNR_SIGMA_BITS));
|
// if(i==0)
|
// printf("pNrCfg->ynr_lsgm_y[i] %d, tmp %d\n", pNrCfg->ynr_lsgm_y[i], tmp);
|
}
|
|
|
//0x0130
|
for(i = 0; i < 4; i++) {
|
if(i>strength_i){
|
tmp = (ynr->loFreqNoiseCi[i] *(1 << FIX_BIT_CI));
|
}else{
|
tmp = (ynr->loFreqNoiseCi[i] * fStrength *(1 << FIX_BIT_CI));
|
}
|
//printf("ynr ci[%d]: ci:%f reg:0x%x fstrength: %f \n", i, ynr->loFreqNoiseCi[i], tmp, fStrength);
|
|
if(tmp > 0xff){
|
tmp = 0xff;
|
}
|
pNrCfg->ynr_lci[i] = tmp;
|
}
|
|
//0x0134
|
for(i = 0; i < 4; i++) {
|
if(i>strength_i){
|
tmp = (ynr->loFreqBfScale[i] * (1 << FIX_BIT_BF_SCALE));
|
}else{
|
tmp = (ynr->loFreqBfScale[i] * fStrength * (1 << FIX_BIT_BF_SCALE));
|
}
|
if(tmp > 0xff){
|
tmp = 0xff;
|
}
|
pNrCfg->ynr_lgain_min[i] = tmp;
|
}
|
|
//0x0138
|
pNrCfg->ynr_lgain_max = (unsigned char)(ynr->loFreqDirectionStrength * (1 << FIX_BIT_DIRECTION_STRENGTH));
|
|
|
//0x013c
|
pNrCfg->ynr_lmerge_bound = (unsigned char)((ynr->loFreqDenoiseStrength[1]) * (1 << FIX_BIT_DENOISE_STRENGTH) );
|
pNrCfg->ynr_lmerge_ratio = (unsigned char)((ynr->loFreqDenoiseStrength[0]) * (1 << FIX_BIT_DENOISE_STRENGTH));
|
|
//0x0140
|
for(i = 0; i < 4; i++) {
|
if(i>strength_i){
|
pNrCfg->ynr_lweit_flt[i] = (unsigned char)(ynr->loFreqDenoiseWeight[i] * (1 << FIX_BIT_DENOISE_WEIGHT));
|
}else{
|
pNrCfg->ynr_lweit_flt[i] = (unsigned char)(ynr->loFreqDenoiseWeight[i] * fStrength * (1 << FIX_BIT_DENOISE_WEIGHT));
|
}
|
if(pNrCfg->ynr_lweit_flt[i] > 0x80){
|
pNrCfg->ynr_lweit_flt[i] = 0x80;
|
}
|
}
|
|
//0x0144 - 0x0164
|
for(i = 0; i < 17; i++) {
|
float rate;
|
for(j = 0; j < 6; j++) {
|
if(ynr->lumaPoints[i] <= ynr->hiFreqLumaNrCurvePoint[j])
|
break;
|
}
|
|
if(j <= 0)
|
rate = ynr->hiFreqLumaNrCurveRatio[0];
|
else if(j >= 6)
|
rate = ynr->hiFreqLumaNrCurveRatio[5];
|
else {
|
rate = ((float)ynr->lumaPoints[i] - ynr->hiFreqLumaNrCurvePoint[j - 1])
|
/ (ynr->hiFreqLumaNrCurvePoint[j] - ynr->hiFreqLumaNrCurvePoint[j - 1]);
|
rate = ynr->hiFreqLumaNrCurveRatio[j - 1]
|
+ rate * (ynr->hiFreqLumaNrCurveRatio[j] - ynr->hiFreqLumaNrCurveRatio[j - 1]);
|
}
|
tmp = ynr->noiseSigma[i] * (1 << FIX_BIT_NOISE_SIGMA);
|
tmp = (int)(rate * tmp);
|
//clip sigma be 10bit;
|
|
pNrCfg->ynr_hsgm_y[i] = MIN(tmp / ((1 << (12 - YNR_SIGMA_BITS)) * sqrt(gain_ratio)), (1 << (FIX_BIT_NOISE_SIGMA + 9)) - 1);
|
// pNrCfg->ynr_hsgm_y[i] = tmp / (1 << (12 - YNR_SIGMA_BITS));
|
}
|
|
//0x0168
|
for(i = 0; i < 4; i++) {
|
if(i>strength_i){
|
tmp = (ynr->ciISO[i * 3 + 1] * (1 << FIX_BIT_CI));
|
}else{
|
tmp = (ynr->ciISO[i * 3 + 1] * (1 << FIX_BIT_CI));
|
}
|
if(tmp > 0xff){
|
tmp = 0xff;
|
}
|
pNrCfg->ynr_hlci[i] = tmp;
|
}
|
|
//0x016c
|
for(i = 0; i < 4; i++) {
|
if(i>strength_i){
|
tmp = (ynr->ciISO[i * 3 + 0] * (1 << FIX_BIT_CI));
|
}else{
|
tmp = (ynr->ciISO[i * 3 + 0] * (1 << FIX_BIT_CI));
|
}
|
if(tmp > 0xff){
|
tmp = 0xff;
|
}
|
pNrCfg->ynr_lhci[i] = tmp;
|
}
|
|
//0x0170
|
for(i = 0; i < 4; i++) {
|
if(i>strength_i){
|
tmp = (ynr->ciISO[i * 3 + 2] * (1 << FIX_BIT_CI));
|
}else{
|
tmp = (ynr->ciISO[i * 3 + 2] * (1 << FIX_BIT_CI));
|
}
|
if(tmp > 0xff){
|
tmp = 0xff;
|
}
|
pNrCfg->ynr_hhci[i] = tmp;
|
}
|
|
//0x0174
|
for(i = 0; i < 4; i++) {
|
if(i>strength_i){
|
tmp = (ynr->hiFreqBfScale[i] * (1 << FIX_BIT_BF_SCALE));
|
}else{
|
tmp = (ynr->hiFreqBfScale[i] * fStrength * (1 << FIX_BIT_BF_SCALE));
|
}
|
if(tmp > 0xff){
|
tmp = 0xff;
|
}
|
pNrCfg->ynr_hgain_sgm[i] = tmp;
|
}
|
|
//0x0178 - 0x0188
|
int wavelvl = 0;
|
int EdgeSoftness = 0;
|
for(i = 0; i < 4; i++) {
|
if(i == 0)wavelvl = 0;
|
if(i == 1)wavelvl = 1;
|
if(i == 2)wavelvl = 2;
|
if(i == 3)wavelvl = 3;
|
EdgeSoftness = (int)(ynr->hiFreqEdgeSoftness[wavelvl] * (1 << FIX_BIT_EDGE_SOFTNESS));
|
pNrCfg->ynr_hweit_d[0 * 4 + i] = (int)((exp(-(((0 * 0 + 1 * 1) * (1 << (FIX_BIT_EDGE_SOFTNESS + FIX_BIT_EDGE_SOFTNESS))) / (float)(2 * EdgeSoftness * EdgeSoftness)))) * (1 << YNR_exp_lut_y));
|
pNrCfg->ynr_hweit_d[1 * 4 + i] = (int)((exp(-(((1 * 1 + 1 * 1) * (1 << (FIX_BIT_EDGE_SOFTNESS + FIX_BIT_EDGE_SOFTNESS))) / (float)(2 * EdgeSoftness * EdgeSoftness)))) * (1 << YNR_exp_lut_y));
|
pNrCfg->ynr_hweit_d[2 * 4 + i] = (int)((exp(-(((0 * 0 + 2 * 2) * (1 << (FIX_BIT_EDGE_SOFTNESS + FIX_BIT_EDGE_SOFTNESS))) / (float)(2 * EdgeSoftness * EdgeSoftness)))) * (1 << YNR_exp_lut_y));
|
pNrCfg->ynr_hweit_d[3 * 4 + i] = (int)((exp(-(((1 * 1 + 2 * 2) * (1 << (FIX_BIT_EDGE_SOFTNESS + FIX_BIT_EDGE_SOFTNESS))) / (float)(2 * EdgeSoftness * EdgeSoftness)))) * (1 << YNR_exp_lut_y));
|
pNrCfg->ynr_hweit_d[4 * 4 + i] = (int)((exp(-(((2 * 2 + 2 * 2) * (1 << (FIX_BIT_EDGE_SOFTNESS + FIX_BIT_EDGE_SOFTNESS))) / (float)(2 * EdgeSoftness * EdgeSoftness)))) * (1 << YNR_exp_lut_y));
|
LOGI_ANR("########ynr hweit wavelvl[%d]: edge:%d weit: %d %d %d %d %d \n",
|
i, EdgeSoftness,
|
pNrCfg->ynr_hweit_d[0 * 4 + i],
|
pNrCfg->ynr_hweit_d[1 * 4 + i],
|
pNrCfg->ynr_hweit_d[2 * 4 + i],
|
pNrCfg->ynr_hweit_d[3 * 4 + i],
|
pNrCfg->ynr_hweit_d[4 * 4 + i]);
|
}
|
|
|
//0x018c - 0x01a0
|
for(i = 0; i < 6; i++) {
|
pNrCfg->ynr_hgrad_y[i * 4 + 0] = (int)(ynr->detailThreRatioLevel[0][i] * (1 << FIX_BIT_GRAD_ADJUST_CURVE));
|
pNrCfg->ynr_hgrad_y[i * 4 + 1] = (int)(ynr->detailThreRatioLevel[1][i] * (1 << FIX_BIT_GRAD_ADJUST_CURVE));
|
pNrCfg->ynr_hgrad_y[i * 4 + 2] = (int)(ynr->detailThreRatioLevel[2][i] * (1 << FIX_BIT_GRAD_ADJUST_CURVE));
|
pNrCfg->ynr_hgrad_y[i * 4 + 3] = (int)(ynr->detailThreRatioLevel4[i] * (1 << FIX_BIT_GRAD_ADJUST_CURVE));
|
}
|
|
//0x01a4 -0x01a8
|
for(i = 0; i < 4; i++) {
|
if(i>strength_i){
|
pNrCfg->ynr_hweit[i] = (unsigned short)(ynr->hiFreqDenoiseWeight[i] *(1 << FIX_BIT_DENOISE_WEIGHT));
|
}else{
|
pNrCfg->ynr_hweit[i] = (unsigned short)(ynr->hiFreqDenoiseWeight[i] * fStrength * (1 << FIX_BIT_DENOISE_WEIGHT));
|
}
|
|
if(pNrCfg->ynr_hweit[i] > 0x1ff){
|
pNrCfg->ynr_hweit[i] = 0x1ff;
|
}
|
}
|
|
//0x01b0
|
pNrCfg->ynr_hmax_adjust = (unsigned char)(ynr->detailMinAdjDnW * (1 << FIX_BIT_GRAD_ADJUST_CURVE));
|
|
//0x01b4
|
tmp = (ynr->hiFreqDenoiseStrength * fStrength * (1 << FIX_BIT_DENOISE_STRENGTH));
|
if(tmp > 0xff){
|
tmp = 0xff;
|
}
|
pNrCfg->ynr_hstrength = tmp;
|
|
//0x01b8
|
pNrCfg->ynr_lweit_cmp[0] = (int)(0.1f * (1 << YNR_exp_lut_y) + 0.5f);//13
|
pNrCfg->ynr_lweit_cmp[1] = (int)(0.1f * (1 << YNR_exp_lut_y) + 0.5f);//13
|
|
|
//0x01bc
|
pNrCfg->ynr_lmaxgain_lv4 = ynr->ynr_level4_max_gain;
|
|
//0x01c0 - 0x01e0
|
for(i = 0; i < 17; i++) {
|
tmp = (int)(ynr->noiseSigma[i] * (1 << FIX_BIT_NOISE_SIGMA));
|
pNrCfg->ynr_hstv_y[i] = tmp / ((1 << (12 - YNR_SIGMA_BITS)) * sqrt(gain_ratio));
|
}
|
|
//0x01e4 - 0x01e8
|
if (strcmp(ynr->ynr_ver_char, "V2") == 0) {
|
// Lite Version
|
for(i = 0; i < 3; i++) {
|
pNrCfg->ynr_st_scale[i] = (unsigned short)(ynr->hiFreqSoftThresholdScale[i] * (1 << FIX_BIT_SOFT_THRESHOLD_SCALE_V2));
|
}
|
} else {
|
// old v1 version
|
for(i = 0; i < 3; i++) {
|
pNrCfg->ynr_st_scale[i] = (unsigned short)(ynr->hiFreqSoftThresholdScale[i] * (1 << FIX_BIT_SOFT_THRESHOLD_SCALE));
|
}
|
}
|
|
#if YNR_FIX_VALUE_PRINTF
|
ynr_fix_printf(pNrCfg);
|
#endif
|
|
LOGI_ANR("%s:(%d) exit \n", __FUNCTION__, __LINE__);
|
|
return res;
|
}
|
|
ANRresult_t ynr_fix_printf(RKAnr_Ynr_Fix_t * pNrCfg)
|
{
|
LOGD_ANR("%s:(%d) enter \n", __FUNCTION__, __LINE__);
|
|
ANRresult_t res = ANR_RET_SUCCESS;
|
|
if(pNrCfg == NULL) {
|
LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
|
return ANR_RET_NULL_POINTER;
|
}
|
|
int i = 0;
|
|
//0x0104 - 0x0108
|
for(i = 0; i < 16; i++) {
|
LOGD_ANR("(0x0104 - 0x0108) ynr_sgm_dx[%d]:%d \n",
|
i, pNrCfg->ynr_sgm_dx[i]);
|
}
|
|
//0x010c - 0x012c
|
for(i = 0; i < 17; i++) {
|
LOGD_ANR("(0x010c - 0x012c) ynr_lsgm_y[%d]:%d \n",
|
i, pNrCfg->ynr_lsgm_y[i]);
|
}
|
|
//0x0130
|
for(i = 0; i < 4; i++) {
|
LOGD_ANR("(0x0130) ynr_lci[%d]:%d \n",
|
i, pNrCfg->ynr_lci[i]);
|
}
|
|
//0x0134
|
for(i = 0; i < 4; i++) {
|
LOGD_ANR("(0x0134) ynr_lgain_min[%d]:%d \n",
|
i, pNrCfg->ynr_lgain_min[i]);
|
}
|
|
//0x0138
|
LOGD_ANR("(0x0138) ynr_lgain_max:%d \n",
|
pNrCfg->ynr_lgain_max);
|
|
|
//0x013c
|
LOGD_ANR("(0x013c) ynr_lmerge_bound:%d ynr_lmerge_ratio:%d\n",
|
pNrCfg->ynr_lmerge_bound,
|
pNrCfg->ynr_lmerge_ratio);
|
|
//0x0140
|
for(i = 0; i < 4; i++) {
|
LOGD_ANR("(0x0140) ynr_lweit_flt[%d]:%d \n",
|
i, pNrCfg->ynr_lweit_flt[i]);
|
}
|
|
//0x0144 - 0x0164
|
for(i = 0; i < 17; i++) {
|
LOGD_ANR("(0x0144 - 0x0164) ynr_hsgm_y[%d]:%d \n",
|
i, pNrCfg->ynr_hsgm_y[i]);
|
}
|
|
//0x0168
|
for(i = 0; i < 4; i++) {
|
LOGD_ANR("(0x0168) ynr_hlci[%d]:%d \n",
|
i, pNrCfg->ynr_hlci[i]);
|
}
|
|
//0x016c
|
for(i = 0; i < 4; i++) {
|
LOGD_ANR("(0x016c) ynr_lhci[%d]:%d \n",
|
i, pNrCfg->ynr_lhci[i]);
|
}
|
|
//0x0170
|
for(i = 0; i < 4; i++) {
|
LOGD_ANR("(0x0170) ynr_hhci[%d]:%d \n",
|
i, pNrCfg->ynr_hhci[i]);
|
}
|
|
//0x0174
|
for(i = 0; i < 4; i++) {
|
LOGD_ANR("(0x0174) ynr_hgain_sgm[%d]:%d \n",
|
i, pNrCfg->ynr_hgain_sgm[i]);
|
}
|
|
//0x0178 - 0x0188
|
for(i = 0; i < 5; i++) {
|
LOGD_ANR("(0x0178 - 0x0188) ynr_hweit_d[%d - %d]:%d %d %d %d \n",
|
i * 4 + 0, i * 4 + 3,
|
pNrCfg->ynr_hweit_d[i * 4 + 0],
|
pNrCfg->ynr_hweit_d[i * 4 + 1],
|
pNrCfg->ynr_hweit_d[i * 4 + 2],
|
pNrCfg->ynr_hweit_d[i * 4 + 3]);
|
}
|
|
|
//0x018c - 0x01a0
|
for(i = 0; i < 6; i++) {
|
LOGD_ANR("(0x018c - 0x01a0) ynr_hgrad_y[%d - %d]:%d %d %d %d \n",
|
i * 4 + 0, i * 4 + 3,
|
pNrCfg->ynr_hgrad_y[i * 4 + 0],
|
pNrCfg->ynr_hgrad_y[i * 4 + 1],
|
pNrCfg->ynr_hgrad_y[i * 4 + 2],
|
pNrCfg->ynr_hgrad_y[i * 4 + 3]);
|
}
|
|
//0x01a4 -0x01a8
|
for(i = 0; i < 4; i++) {
|
LOGD_ANR("(0x01a4 -0x01a8) ynr_hweit[%d]:%d \n",
|
i, pNrCfg->ynr_hweit[i]);
|
}
|
|
//0x01b0
|
LOGD_ANR("(0x01b0) ynr_hmax_adjust:%d \n",
|
pNrCfg->ynr_hmax_adjust);
|
|
//0x01b4
|
LOGD_ANR("(0x01b4) ynr_hstrength:%d \n",
|
pNrCfg->ynr_hstrength);
|
|
//0x01b8
|
LOGD_ANR("(0x01b8) ynr_lweit_cmp0-1:%d %d\n",
|
pNrCfg->ynr_lweit_cmp[0],
|
pNrCfg->ynr_lweit_cmp[1]);
|
|
//0x01bc
|
LOGD_ANR("(0x01bc) ynr_lmaxgain_lv4:%d \n",
|
pNrCfg->ynr_lmaxgain_lv4);
|
|
//0x01c0 - 0x01e0
|
for(i = 0; i < 17; i++) {
|
LOGD_ANR("(0x01c0 - 0x01e0 ) ynr_hstv_y[%d]:%d \n",
|
i, pNrCfg->ynr_hstv_y[i]);
|
}
|
|
//0x01e4 - 0x01e8
|
for(i = 0; i < 3; i++) {
|
LOGD_ANR("(0x01e4 - 0x01e8 ) ynr_st_scale[%d]:%d \n",
|
i, pNrCfg->ynr_st_scale[i]);
|
}
|
|
LOGD_ANR("%s:(%d) exit \n", __FUNCTION__, __LINE__);
|
|
return res;
|
}
|
|
|
ANRresult_t ynr_calibdbV2_assign(CalibDbV2_YnrV1_t *pDst, CalibDbV2_YnrV1_t *pSrc)
|
{
|
ANRresult_t res = ANR_RET_SUCCESS;
|
CalibDbV2_YnrV1_CalibPara_t *pSrcCalibParaV2 = NULL;
|
CalibDbV2_YnrV1_TuningPara_t *pSrcTuningParaV2 = NULL;
|
CalibDbV2_YnrV1_CalibPara_t *pDstCalibParaV2 = NULL;
|
CalibDbV2_YnrV1_TuningPara_t *pDstTuningParaV2 = NULL;
|
int setting_len =0;
|
int iso_len = 0;
|
|
|
if(pDst == NULL) {
|
LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
|
return ANR_RET_NULL_POINTER;
|
}
|
|
if(pSrc == NULL) {
|
LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
|
return ANR_RET_NULL_POINTER;
|
}
|
|
ynr_calibdbV2_free(pDst);
|
|
pSrcCalibParaV2 = &pSrc->CalibPara;
|
pSrcTuningParaV2 = &pSrc->TuningPara;
|
pDstCalibParaV2 = &pDst->CalibPara;
|
pDstTuningParaV2 = &pDst->TuningPara;
|
|
//assign the value
|
pDst->Version = strdup(pSrc->Version);
|
pDstTuningParaV2->enable = pSrcTuningParaV2->enable;
|
|
//malloc iso size
|
setting_len = pSrcCalibParaV2->Setting_len;
|
pDstCalibParaV2->Setting = (CalibDbV2_YnrV1_CalibPara_Setting_t *)malloc(setting_len * sizeof(CalibDbV2_YnrV1_CalibPara_Setting_t));
|
memset(pDstCalibParaV2->Setting, 0x00, setting_len * sizeof(CalibDbV2_YnrV1_CalibPara_Setting_t));
|
pDstCalibParaV2->Setting_len = setting_len;
|
|
|
for(int i=0; i<setting_len; i++){
|
iso_len = pSrcCalibParaV2->Setting[i].Calib_ISO_len;
|
pDstCalibParaV2->Setting[i].Calib_ISO = (CalibDbV2_YnrV1_CalibPara_Setting_ISO_t *)malloc(iso_len * sizeof(CalibDbV2_YnrV1_CalibPara_Setting_ISO_t));
|
memset(pDstCalibParaV2->Setting[i].Calib_ISO, 0x00, iso_len * sizeof(CalibDbV2_YnrV1_CalibPara_Setting_ISO_t));
|
pDstCalibParaV2->Setting[i].Calib_ISO_len = iso_len;
|
}
|
|
for(int i=0; i<setting_len; i++){
|
iso_len = pSrcCalibParaV2->Setting[i].Calib_ISO_len;
|
pDstCalibParaV2->Setting[i].SNR_Mode = strdup(pSrcTuningParaV2->Setting[i].SNR_Mode);
|
pDstCalibParaV2->Setting[i].Sensor_Mode = strdup(pSrcTuningParaV2->Setting[i].Sensor_Mode);
|
|
for(int j=0; j<iso_len; j++){
|
pDstCalibParaV2->Setting[i].Calib_ISO[j] = pSrcCalibParaV2->Setting[i].Calib_ISO[j];
|
}
|
}
|
|
|
|
setting_len = pSrcTuningParaV2->Setting_len;
|
pDstTuningParaV2->Setting = (CalibDbV2_YnrV1_TuningPara_Setting_t *)malloc(setting_len * sizeof(CalibDbV2_YnrV1_TuningPara_Setting_t));
|
memset(pDstTuningParaV2->Setting, 0x00, setting_len * sizeof(CalibDbV2_YnrV1_TuningPara_Setting_t));
|
pDstTuningParaV2->Setting_len = setting_len;
|
|
for(int i=0; i<setting_len; i++){
|
iso_len = pSrcTuningParaV2->Setting[i].Tuning_ISO_len;
|
pDstTuningParaV2->Setting[i].Tuning_ISO = (CalibDbV2_YnrV1_TuningPara_Setting_ISO_t *)malloc(iso_len * sizeof(CalibDbV2_YnrV1_TuningPara_Setting_ISO_t));
|
memset(pDstTuningParaV2->Setting[i].Tuning_ISO, 0x00, iso_len * sizeof(CalibDbV2_YnrV1_TuningPara_Setting_ISO_t));
|
pDstTuningParaV2->Setting[i].Tuning_ISO_len = iso_len;
|
}
|
|
for(int i=0; i<setting_len; i++){
|
iso_len = pSrcTuningParaV2->Setting[i].Tuning_ISO_len;
|
|
pDstTuningParaV2->Setting[i].SNR_Mode = strdup(pSrcTuningParaV2->Setting[i].SNR_Mode);
|
pDstTuningParaV2->Setting[i].Sensor_Mode = strdup(pSrcTuningParaV2->Setting[i].Sensor_Mode);
|
|
for(int j=0; j<iso_len; j++){
|
pDstTuningParaV2->Setting[i].Tuning_ISO[j] = pSrcTuningParaV2->Setting[i].Tuning_ISO[j];
|
}
|
}
|
|
return res;
|
}
|
|
|
|
void ynr_calibdbV2_free(CalibDbV2_YnrV1_t *pCalibdbV2)
|
{
|
if(pCalibdbV2){
|
if(pCalibdbV2->Version){
|
free(pCalibdbV2->Version);
|
}
|
|
if(pCalibdbV2->CalibPara.Setting){
|
for(int i=0; i<pCalibdbV2->CalibPara.Setting_len; i++){
|
if(pCalibdbV2->CalibPara.Setting[i].SNR_Mode){
|
free(pCalibdbV2->CalibPara.Setting[i].SNR_Mode);
|
}
|
if(pCalibdbV2->CalibPara.Setting[i].Sensor_Mode){
|
free(pCalibdbV2->CalibPara.Setting[i].Sensor_Mode);
|
}
|
if(pCalibdbV2->CalibPara.Setting[i].Calib_ISO){
|
free(pCalibdbV2->CalibPara.Setting[i].Calib_ISO);
|
}
|
}
|
|
free(pCalibdbV2->CalibPara.Setting);
|
}
|
|
if(pCalibdbV2->TuningPara.Setting){
|
for(int i=0; i<pCalibdbV2->TuningPara.Setting_len; i++){
|
if(pCalibdbV2->TuningPara.Setting[i].SNR_Mode){
|
free(pCalibdbV2->TuningPara.Setting[i].SNR_Mode);
|
}
|
if(pCalibdbV2->TuningPara.Setting[i].Sensor_Mode){
|
free(pCalibdbV2->TuningPara.Setting[i].Sensor_Mode);
|
}
|
if(pCalibdbV2->TuningPara.Setting[i].Tuning_ISO){
|
free(pCalibdbV2->TuningPara.Setting[i].Tuning_ISO);
|
}
|
}
|
|
free(pCalibdbV2->TuningPara.Setting);
|
}
|
|
}
|
|
}
|
|
|
RKAIQ_END_DECLARE
|