#include "rk_aiq_auvnr_algo_uvnr_v1.h" 
 | 
  
 | 
  
 | 
RKAIQ_BEGIN_DECLARE 
 | 
  
 | 
Auvnr_result_t uvnr_get_mode_cell_idx_by_name_v1(CalibDb_UVNR_2_t *pCalibdb, char *name, int *mode_idx) 
 | 
{ 
 | 
    int i = 0; 
 | 
    Auvnr_result_t res = AUVNR_RET_SUCCESS; 
 | 
  
 | 
    if(pCalibdb == NULL || name == NULL || mode_idx == NULL ) { 
 | 
        LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__); 
 | 
        return AUVNR_RET_NULL_POINTER; 
 | 
    } 
 | 
  
 | 
    if(pCalibdb->mode_num < 1) { 
 | 
        LOGE_ANR("%s(%d): uvnr mode cell num is zero\n", __FUNCTION__, __LINE__); 
 | 
        return AUVNR_RET_INVALID_PARM; 
 | 
    } 
 | 
  
 | 
    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 = AUVNR_RET_SUCCESS; 
 | 
    } else { 
 | 
        *mode_idx = 0; 
 | 
        res = AUVNR_RET_FAILURE; 
 | 
    } 
 | 
  
 | 
    LOGE_ANR("%s:%d mode_name:%s  mode_idx:%d i:%d \n", __FUNCTION__, __LINE__, name, *mode_idx, i); 
 | 
    return res; 
 | 
  
 | 
} 
 | 
  
 | 
Auvnr_result_t uvnr_get_setting_idx_by_name_v1(CalibDb_UVNR_2_t *pCalibdb, char *name, int mode_idx, int *setting_idx) 
 | 
{ 
 | 
    int i = 0; 
 | 
    Auvnr_result_t res = AUVNR_RET_SUCCESS; 
 | 
  
 | 
    if(pCalibdb == NULL || name == NULL) { 
 | 
        LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__); 
 | 
        return AUVNR_RET_NULL_POINTER; 
 | 
    } 
 | 
  
 | 
    if(setting_idx == NULL) { 
 | 
        LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__); 
 | 
        return AUVNR_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 = AUVNR_RET_SUCCESS; 
 | 
    } else { 
 | 
        *setting_idx = 0; 
 | 
        res = AUVNR_RET_FAILURE; 
 | 
    } 
 | 
  
 | 
    LOGE_ANR("%s:%d snr_name:%s  snr_idx:%d i:%d \n", __FUNCTION__, __LINE__, name, * setting_idx, i); 
 | 
    return res; 
 | 
  
 | 
} 
 | 
  
 | 
Auvnr_result_t uvnr_config_setting_param_v1(RK_UVNR_Params_V1_t *pParams, CalibDb_UVNR_2_t *pCalibdb, char* param_mode, char * snr_name) 
 | 
{ 
 | 
    Auvnr_result_t res = AUVNR_RET_SUCCESS; 
 | 
    int mode_idx = 0; 
 | 
    int setting_idx = 0; 
 | 
  
 | 
    if(pParams == NULL || pCalibdb == NULL) { 
 | 
        LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__); 
 | 
        return AUVNR_RET_NULL_POINTER; 
 | 
    } 
 | 
  
 | 
    res = uvnr_get_mode_cell_idx_by_name_v1(pCalibdb, param_mode, &mode_idx); 
 | 
    if(res != AUVNR_RET_SUCCESS) { 
 | 
        LOGW_ANR("%s(%d): error!!!  can't find mode cell in iq files, use 0 instead\n", __FUNCTION__, __LINE__); 
 | 
    } 
 | 
  
 | 
    res = uvnr_get_setting_idx_by_name_v1(pCalibdb, snr_name, mode_idx, &setting_idx); 
 | 
    if(res != AUVNR_RET_SUCCESS) { 
 | 
        LOGW_ANR("%s(%d): error!!!  can't find setting in iq files, use 0 instead\n", __FUNCTION__, __LINE__); 
 | 
    } 
 | 
  
 | 
    res = init_uvnr_params_v1(pParams, pCalibdb, mode_idx, setting_idx); 
 | 
  
 | 
    return res; 
 | 
  
 | 
} 
 | 
  
 | 
Auvnr_result_t init_uvnr_params_v1(RK_UVNR_Params_V1_t *pParams, CalibDb_UVNR_2_t *pCalibdb, int mode_idx, int setting_idx) 
 | 
{ 
 | 
    Auvnr_result_t res = AUVNR_RET_SUCCESS; 
 | 
    int i = 0; 
 | 
    int j = 0; 
 | 
  
 | 
    LOGE_ANR("%s:%d enter\n", __FUNCTION__, __LINE__); 
 | 
  
 | 
    if(pParams == NULL || pCalibdb == NULL) { 
 | 
        LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__); 
 | 
        return AUVNR_RET_NULL_POINTER; 
 | 
    } 
 | 
  
 | 
    CalibDb_UVNR_Params_t *pSetting = &pCalibdb->mode_cell[mode_idx].setting[setting_idx]; 
 | 
    for(i = 0; i < UVNR_MAX_ISO_STEP; i++) { 
 | 
#ifndef RK_SIMULATOR_HW 
 | 
        pParams->iso[i] = pSetting->ISO[i]; 
 | 
#endif 
 | 
        pParams->ratio[i] = pSetting->step0_uvgrad_ratio[i]; 
 | 
        pParams->offset[i] = pSetting->step0_uvgrad_offset[i]; 
 | 
  
 | 
        pParams->wStep1[i] = pSetting->step1_downSample_w[i]; 
 | 
        pParams->hStep1[i] = pSetting->step1_downSample_h[i]; 
 | 
        pParams->meanSize1[i] = pSetting->step1_downSample_meansize[i]; 
 | 
  
 | 
        pParams->medSize1[i] = pSetting->step1_median_size[i]; 
 | 
        pParams->medRatio1[i] = pSetting->step1_median_ratio[i]; 
 | 
        pParams->isMedIIR1[i] = pSetting->step1_median_IIR[i]; 
 | 
  
 | 
        pParams->bfSize1[i] = pSetting->step1_bf_size[i]; 
 | 
        pParams->sigmaR1[i] = pSetting->step1_bf_sigmaR[i]; 
 | 
        pParams->sigmaD1[i] = pSetting->step1_bf_sigmaD[i]; 
 | 
        pParams->uvgain1[i] = pSetting->step1_bf_uvgain[i]; 
 | 
        pParams->bfRatio1[i] = pSetting->step1_bf_ratio[i]; 
 | 
        pParams->isRowIIR1[i] = pSetting->step1_bf_isRowIIR[i]; 
 | 
        pParams->isYcopy1[i] = pSetting->step1_bf_isYcopy[i]; 
 | 
  
 | 
        pParams->wStep2[i] = pSetting->step2_downSample_w[i]; 
 | 
        pParams->hStep2[i] = pSetting->step2_downSample_h[i]; 
 | 
        pParams->meanSize2[i] = pSetting->step2_downSample_meansize[i]; 
 | 
  
 | 
        pParams->medSize2[i] = pSetting->step2_median_size[i]; 
 | 
        pParams->medRatio2[i] = pSetting->step2_median_ratio[i]; 
 | 
        pParams->isMedIIR2[i] = pSetting->step2_median_IIR[i]; 
 | 
  
 | 
        pParams->bfSize3[i] = pSetting->step2_bf_size[i]; 
 | 
        pParams->sigmaR2[i] = pSetting->step2_bf_sigmaR[i]; 
 | 
        pParams->sigmaD2[i] = pSetting->step2_bf_sigmaD[i]; 
 | 
        pParams->uvgain2[i] = pSetting->step2_bf_uvgain[i]; 
 | 
        pParams->bfRatio2[i] = pSetting->step2_bf_ratio[i]; 
 | 
        pParams->isRowIIR2[i] = pSetting->step2_bf_isRowIIR[i]; 
 | 
        pParams->isYcopy2[i] = pSetting->step2_bf_isYcopy[i]; 
 | 
  
 | 
        pParams->bfSize3[i] = pSetting->step3_bf_size[i]; 
 | 
        pParams->sigmaR3[i] = pSetting->step3_bf_sigmaR[i]; 
 | 
        pParams->sigmaD3[i] = pSetting->step3_bf_sigmaD[i]; 
 | 
        pParams->uvgain3[i] = pSetting->step3_bf_uvgain[i]; 
 | 
        pParams->bfRatio3[i] = pSetting->step3_bf_ratio[i]; 
 | 
        pParams->isRowIIR3[i] = pSetting->step3_bf_isRowIIR[i]; 
 | 
        pParams->isYcopy3[i] = pSetting->step3_bf_isYcopy[i]; 
 | 
  
 | 
    } 
 | 
  
 | 
    for(i = 0; i < 4; i++) { 
 | 
        pParams->nonMed1[i] = pSetting->step1_nonMed1[i]; 
 | 
        pParams->nonBf1[i] = pSetting->step1_nonBf1[i]; 
 | 
        pParams->block2_ext[i] = pSetting->step2_nonExt_block[i]; 
 | 
        pParams->nonMed2[i] = pSetting->step2_nonMed[i]; 
 | 
        pParams->nonBf2[i] = pSetting->step2_nonBf[i]; 
 | 
        pParams->nonBf3[i] = pSetting->step3_nonBf3[i]; 
 | 
    } 
 | 
  
 | 
    for(i = 0; i < 3; i++) { 
 | 
        pParams->kernel_3x3_table[i] = pSetting->kernel_3x3[i]; 
 | 
    } 
 | 
  
 | 
    for(i = 0; i < 5; i++) { 
 | 
        pParams->kernel_5x5_talbe[i] = pSetting->kernel_5x5[i]; 
 | 
    } 
 | 
  
 | 
    for(i = 0; i < 8; i++) { 
 | 
        pParams->kernel_9x9_table[i] = pSetting->kernel_9x9[i]; 
 | 
    } 
 | 
  
 | 
    pParams->kernel_9x9_num = pSetting->kernel_9x9_num; 
 | 
  
 | 
    for(i = 0; i < 9; i++) { 
 | 
        pParams->sigmaAdj_x[i] = pSetting->sigma_adj_luma[i]; 
 | 
        pParams->sigamAdj_y[i] = pSetting->sigma_adj_ratio[i]; 
 | 
  
 | 
        pParams->threAdj_x[i] = pSetting->threshold_adj_luma[i]; 
 | 
        pParams->threAjd_y[i] = pSetting->threshold_adj_thre[i]; 
 | 
    } 
 | 
  
 | 
    LOGE_ANR("%s:%d exit\n", __FUNCTION__, __LINE__); 
 | 
    return AUVNR_RET_SUCCESS; 
 | 
  
 | 
} 
 | 
  
 | 
Auvnr_result_t uvnr_get_setting_idx_by_name_json_v1(CalibDbV2_UVNR_t *pCalibdb, char *name, int *tuning_idx) 
 | 
{ 
 | 
    int i = 0; 
 | 
    Auvnr_result_t res = AUVNR_RET_SUCCESS; 
 | 
  
 | 
    if(pCalibdb == NULL || name == NULL || tuning_idx == NULL) { 
 | 
        LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__); 
 | 
        return AUVNR_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; 
 | 
        res = AUVNR_RET_SUCCESS; 
 | 
    } else { 
 | 
        *tuning_idx = 0; 
 | 
        res = AUVNR_RET_FAILURE; 
 | 
    } 
 | 
  
 | 
    LOGD_ANR("%s:%d snr_name:%s  snr_idx:%d i:%d \n", __FUNCTION__, __LINE__, name, *tuning_idx, i); 
 | 
    return res; 
 | 
  
 | 
} 
 | 
  
 | 
  
 | 
Auvnr_result_t init_uvnr_params_json_v1(RK_UVNR_Params_V1_t *pParams, CalibDbV2_UVNR_t *pCalibdb,  int setting_idx) 
 | 
{ 
 | 
    Auvnr_result_t res = AUVNR_RET_SUCCESS; 
 | 
    int i = 0; 
 | 
    int j = 0; 
 | 
    float luma[9] = {0.0000, 32.0000, 64.0000, 96.0000, 128.0000, 160.0000, 192.0000, 224.0000, 256.0000 }; 
 | 
  
 | 
    if(pParams == NULL || pCalibdb == NULL) { 
 | 
        LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__); 
 | 
        return AUVNR_RET_NULL_POINTER; 
 | 
    } 
 | 
  
 | 
    CalibDbV2_UVNR_TuningPara_Setting_t *pSetting = &pCalibdb->TuningPara.Setting[setting_idx]; 
 | 
    CalibDbV2_UVNR_TuningPara_Setting_ISO_t *pTuning_ISO = NULL; 
 | 
    for(i = 0; i < pSetting->Tuning_ISO_len; i++) { 
 | 
        pTuning_ISO = &pSetting->Tuning_ISO[i]; 
 | 
#ifndef RK_SIMULATOR_HW 
 | 
        pParams->iso[i] = pTuning_ISO->iso; 
 | 
#endif 
 | 
        pParams->ratio[i] = pTuning_ISO->step0_uvgrad_ratio; 
 | 
        pParams->offset[i] = pTuning_ISO->step0_uvgrad_offset; 
 | 
  
 | 
        pParams->wStep1[i] = 4; 
 | 
        pParams->hStep1[i] = 4; 
 | 
        pParams->meanSize1[i] = 4; 
 | 
  
 | 
        pParams->medSize1[i] = 3; 
 | 
        pParams->medRatio1[i] = pTuning_ISO->step1_median_ratio; 
 | 
        pParams->isMedIIR1[i] = 0; 
 | 
  
 | 
        pParams->bfSize1[i] = 5; 
 | 
        pParams->sigmaR1[i] = pTuning_ISO->step1_bf_sigmaR; 
 | 
        pParams->sigmaD1[i] = 16; 
 | 
        pParams->uvgain1[i] = pTuning_ISO->step1_bf_uvgain; 
 | 
        pParams->bfRatio1[i] = pTuning_ISO->step1_bf_ratio; 
 | 
        pParams->isRowIIR1[i] = 0; 
 | 
        pParams->isYcopy1[i] = 1; 
 | 
  
 | 
        pParams->wStep2[i] = 32; 
 | 
        pParams->hStep2[i] = 32; 
 | 
        pParams->meanSize2[i] = 8; 
 | 
  
 | 
        pParams->medSize2[i] = 3; 
 | 
        pParams->medRatio2[i] = pTuning_ISO->step2_median_ratio; 
 | 
        pParams->isMedIIR2[i] = 0; 
 | 
  
 | 
        pParams->bfSize3[i] = 5; 
 | 
        pParams->sigmaR2[i] = pTuning_ISO->step2_bf_sigmaR; 
 | 
        pParams->sigmaD2[i] = 128; 
 | 
        pParams->uvgain2[i] = pTuning_ISO->step2_bf_uvgain; 
 | 
        pParams->bfRatio2[i] = pTuning_ISO->step2_bf_ratio; 
 | 
        pParams->isRowIIR2[i] = 0; 
 | 
        pParams->isYcopy2[i] = 1; 
 | 
  
 | 
        pParams->bfSize3[i] = 3; 
 | 
        pParams->sigmaR3[i] = pTuning_ISO->step3_bf_sigmaR; 
 | 
        pParams->sigmaD3[i] = 8; 
 | 
        pParams->uvgain3[i] = pTuning_ISO->step3_bf_uvgain; 
 | 
        pParams->bfRatio3[i] = pTuning_ISO->step3_bf_ratio; 
 | 
        pParams->isRowIIR3[i] = 0; 
 | 
        pParams->isYcopy3[i] = 1; 
 | 
  
 | 
    } 
 | 
  
 | 
    for(i = 0; i < 4; i++) { 
 | 
        pParams->nonMed1[i] = 3; 
 | 
        pParams->nonBf1[i] = 31; 
 | 
        pParams->block2_ext[i] = 7; 
 | 
        pParams->nonMed2[i] = 1; 
 | 
        pParams->nonBf2[i] = 3; 
 | 
        pParams->nonBf3[i] = 32; 
 | 
    } 
 | 
  
 | 
    for(i = 0; i < 3; i++) { 
 | 
        pParams->kernel_3x3_table[i] = pCalibdb->TuningPara.Kernel_Coeff.kernel_3x3[i]; 
 | 
    } 
 | 
  
 | 
    for(i = 0; i < 5; i++) { 
 | 
        pParams->kernel_5x5_talbe[i] = pCalibdb->TuningPara.Kernel_Coeff.kernel_5x5[i]; 
 | 
    } 
 | 
  
 | 
    for(i = 0; i < 8; i++) { 
 | 
        pParams->kernel_9x9_table[i] = pCalibdb->TuningPara.Kernel_Coeff.kernel_9x9[i]; 
 | 
    } 
 | 
  
 | 
    pParams->kernel_9x9_num = pCalibdb->TuningPara.Kernel_Coeff.kernel_9x9_num; 
 | 
  
 | 
    for(i = 0; i < 9; i++) { 
 | 
        pParams->sigmaAdj_x[i] = luma[i]; 
 | 
        pParams->sigamAdj_y[i] = 1; 
 | 
  
 | 
        pParams->threAdj_x[i] = luma[i]; 
 | 
        pParams->threAjd_y[i] = 10; 
 | 
    } 
 | 
  
 | 
    uvnr_algo_param_printf_v1(pParams); 
 | 
    return AUVNR_RET_SUCCESS; 
 | 
  
 | 
} 
 | 
  
 | 
Auvnr_result_t uvnr_algo_param_printf_v1(RK_UVNR_Params_V1_t *pParams) 
 | 
{ 
 | 
    int i, j; 
 | 
  
 | 
    if(pParams != NULL) { 
 | 
        for(i = 0; i < UVNR_MAX_ISO_STEP; i++) { 
 | 
#ifndef RK_SIMULATOR_HW 
 | 
            LOGD_ANR("uvnr iso:%f\n", 
 | 
                     pParams->iso[i]); 
 | 
#endif 
 | 
            LOGD_ANR(" ratio:%f, offset:%f medRatio1\n", 
 | 
                     pParams->ratio[i], 
 | 
                     pParams->offset[i]); 
 | 
  
 | 
            LOGD_ANR("step1_median_ratio:%f  step1_bf_sigmaR:%f step1_bf_uvgain:%f step1_bf_ratio:%f\n", 
 | 
                     pParams->medRatio1[i], 
 | 
                     pParams->sigmaR1[i], 
 | 
                     pParams->uvgain1[i], 
 | 
                     pParams->bfRatio1[i]); 
 | 
  
 | 
            LOGD_ANR("step2_median_ratio:%f  step2_bf_sigmaR:%f step2_bf_uvgain:%f step2_bf_ratio:%f\n", 
 | 
                     pParams->medRatio2[i], 
 | 
                     pParams->sigmaR2[i], 
 | 
                     pParams->uvgain2[i], 
 | 
                     pParams->bfRatio2[i]); 
 | 
  
 | 
            LOGD_ANR(" step2_bf_sigmaR:%f step2_bf_uvgain:%f step2_bf_ratio:%f\n", 
 | 
                     pParams->sigmaR3[i], 
 | 
                     pParams->uvgain3[i], 
 | 
                     pParams->bfRatio3[i]); 
 | 
  
 | 
            LOGD_ANR(" kernel3x3: %f %f %f\n", 
 | 
                     pParams->kernel_3x3_table[0], 
 | 
                     pParams->kernel_3x3_table[1], 
 | 
                     pParams->kernel_3x3_table[2]); 
 | 
  
 | 
            LOGD_ANR(" kernel5x5: %f %f %f %f %f\n", 
 | 
                     pParams->kernel_5x5_talbe[0], 
 | 
                     pParams->kernel_5x5_talbe[1], 
 | 
                     pParams->kernel_5x5_talbe[2], 
 | 
                     pParams->kernel_5x5_talbe[3], 
 | 
                     pParams->kernel_5x5_talbe[4]); 
 | 
  
 | 
            LOGD_ANR(" kernel9x9: %f %f %f %f %f %f %f %f\n", 
 | 
                     pParams->kernel_9x9_table[0], 
 | 
                     pParams->kernel_9x9_table[1], 
 | 
                     pParams->kernel_9x9_table[2], 
 | 
                     pParams->kernel_9x9_table[3], 
 | 
                     pParams->kernel_9x9_table[4], 
 | 
                     pParams->kernel_9x9_table[5], 
 | 
                     pParams->kernel_9x9_table[6], 
 | 
                     pParams->kernel_9x9_table[7]); 
 | 
  
 | 
            LOGD_ANR("kernel_num:%d\n\n", pParams->kernel_9x9_num); 
 | 
  
 | 
  
 | 
        } 
 | 
    } 
 | 
  
 | 
    return AUVNR_RET_SUCCESS; 
 | 
} 
 | 
  
 | 
  
 | 
Auvnr_result_t uvnr_config_setting_param_json_v1(RK_UVNR_Params_V1_t *pParams, CalibDbV2_UVNR_t *pCalibdb, char* param_mode, char * snr_name) 
 | 
{ 
 | 
    Auvnr_result_t res = AUVNR_RET_SUCCESS; 
 | 
    int tuning_idx = 0; 
 | 
  
 | 
    if(pParams == NULL || pCalibdb == NULL) { 
 | 
        LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__); 
 | 
        return AUVNR_RET_NULL_POINTER; 
 | 
    } 
 | 
  
 | 
    res = uvnr_get_setting_idx_by_name_json_v1(pCalibdb, snr_name,  &tuning_idx); 
 | 
    if(res != AUVNR_RET_SUCCESS) { 
 | 
        LOGW_ANR("%s(%d): error!!!  can't find setting in iq files, use 0 instead\n", __FUNCTION__, __LINE__); 
 | 
    } 
 | 
  
 | 
    res = init_uvnr_params_json_v1(pParams, pCalibdb, tuning_idx); 
 | 
  
 | 
    return res; 
 | 
  
 | 
} 
 | 
  
 | 
float ufnr_interpISO_v1(int ISO_low, int ISO_high, float value_low, float value_high, int ISO, float value) 
 | 
{ 
 | 
    if (ISO <= ISO_low) 
 | 
    { 
 | 
        value = value_low; 
 | 
    } 
 | 
    else if (ISO >= ISO_high) 
 | 
    { 
 | 
        value = value_high; 
 | 
    } 
 | 
    else 
 | 
    { 
 | 
        value = float(ISO - ISO_low) / float(ISO_high - ISO_low) * (value_high - value_low) + value_low; 
 | 
    } 
 | 
    return value; 
 | 
} 
 | 
  
 | 
  
 | 
Auvnr_result_t select_uvnr_params_by_ISO_v1(RK_UVNR_Params_V1_t *stRKUVNrParams, RK_UVNR_Params_V1_Select_t *stRKUVNrParamsSelected, Auvnr_ExpInfo_t *pExpInfo) 
 | 
{ 
 | 
    Auvnr_result_t res = AUVNR_RET_SUCCESS; 
 | 
    int iso = 50; 
 | 
    if(stRKUVNrParams == NULL || stRKUVNrParamsSelected == NULL || pExpInfo == NULL) { 
 | 
        LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__); 
 | 
        return AUVNR_RET_NULL_POINTER; 
 | 
    } 
 | 
  
 | 
    if(pExpInfo->mfnr_mode_3to1) { 
 | 
        iso = pExpInfo->preIso[pExpInfo->hdr_mode]; 
 | 
    } else { 
 | 
        iso = pExpInfo->arIso[pExpInfo->hdr_mode]; 
 | 
    } 
 | 
    //È·¶¨isoµÈ¼¶ 
 | 
    //rkuvnriso@50 100 200 400 800 1600 3200  6400 12800 
 | 
    //      isogain: 1  2   4   8   16  32   64    128  256 
 | 
    //     isoindex: 0  1   2   3   4   5    6     7    8 
 | 
  
 | 
    int isoIndex = 0; 
 | 
    int isoGainLow = 0; 
 | 
    int isoGainHigh = 0; 
 | 
    int isoIndexLow = 0; 
 | 
    int isoIndexHigh = 0; 
 | 
    int iso_div         = 50; 
 | 
    int max_iso_step  = UVNR_MAX_ISO_STEP; 
 | 
    int i = 0; 
 | 
  
 | 
#ifndef RK_SIMULATOR_HW 
 | 
    for ( i = 0; i < max_iso_step - 1 ; i++) 
 | 
    { 
 | 
        if (iso >=  stRKUVNrParams->iso[i]  &&  iso <= stRKUVNrParams->iso[i + 1]) 
 | 
        { 
 | 
            isoGainLow =  stRKUVNrParams->iso[i] ; 
 | 
            isoGainHigh = stRKUVNrParams->iso[i + 1]; 
 | 
            isoIndexLow = i; 
 | 
            isoIndexHigh = i + 1; 
 | 
            isoIndex = isoIndexLow; 
 | 
            break; 
 | 
        } 
 | 
    } 
 | 
  
 | 
    if(i == max_iso_step - 1) { 
 | 
        if(iso < stRKUVNrParams->iso[0] ) { 
 | 
            isoGainLow =  stRKUVNrParams->iso[0]; 
 | 
            isoGainHigh = stRKUVNrParams->iso[1]; 
 | 
            isoIndexLow = 0; 
 | 
            isoIndexHigh = 1; 
 | 
            isoIndex = 0; 
 | 
        } 
 | 
  
 | 
        if(iso >  stRKUVNrParams->iso[max_iso_step - 1] ) { 
 | 
            isoGainLow =  stRKUVNrParams->iso[max_iso_step - 2] ; 
 | 
            isoGainHigh = stRKUVNrParams->iso[max_iso_step - 1]; 
 | 
            isoIndexLow = max_iso_step - 2; 
 | 
            isoIndexHigh = max_iso_step - 1; 
 | 
            isoIndex = max_iso_step - 1; 
 | 
        } 
 | 
    } 
 | 
#else 
 | 
    isoIndex = int(log(float(iso / iso_div)) / log(2.0f)); 
 | 
  
 | 
    for (i = max_iso_step - 1; i >= 0; i--) 
 | 
    { 
 | 
        if (iso < iso_div * (2 << i)) 
 | 
        { 
 | 
            isoGainLow = iso_div * (2 << (i)) / 2; 
 | 
            isoGainHigh = iso_div * (2 << i); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    isoGainLow      = MIN(isoGainLow, iso_div * (2 << max_iso_step)); 
 | 
    isoGainHigh     = MIN(isoGainHigh, iso_div * (2 << max_iso_step)); 
 | 
  
 | 
    isoIndexHigh    = (int)(log((float)isoGainHigh / iso_div) / log((float)2)); 
 | 
    isoIndexLow     = (int)(log((float)isoGainLow / iso_div) / log((float)2)); 
 | 
  
 | 
    isoIndexLow     = MIN(MAX(isoIndexLow, 0), max_iso_step - 1); 
 | 
    isoIndexHigh    = MIN(MAX(isoIndexHigh, 0), max_iso_step - 1); 
 | 
#endif 
 | 
  
 | 
    LOGD_ANR("%s:%d iso:%d high:%d low:%d \n", 
 | 
             __FUNCTION__, __LINE__, 
 | 
             iso, isoGainHigh, isoGainLow); 
 | 
  
 | 
    //È¡Êý 
 | 
    memcpy(stRKUVNrParamsSelected->select_iso, stRKUVNrParams->rkuvnrISO, sizeof(char) * 256); 
 | 
    //step0:uvgainÔ¤´¦Àí 
 | 
    stRKUVNrParamsSelected->ratio = ufnr_interpISO_v1(isoGainLow, isoGainHigh, stRKUVNrParams->ratio[isoIndexLow], 
 | 
                                    stRKUVNrParams->ratio[isoIndexHigh], iso, stRKUVNrParamsSelected->ratio); 
 | 
    stRKUVNrParamsSelected->offset = ufnr_interpISO_v1(isoGainLow, isoGainHigh, stRKUVNrParams->offset[isoIndexLow], 
 | 
                                     stRKUVNrParams->offset[isoIndexHigh], iso, stRKUVNrParamsSelected->offset); 
 | 
    //step1-ϲÉÑù1 
 | 
    //¾ùÖµ1 
 | 
    stRKUVNrParamsSelected->wStep1 = stRKUVNrParams->wStep1[isoIndex]; 
 | 
    stRKUVNrParamsSelected->hStep1 = stRKUVNrParams->hStep1[isoIndex]; 
 | 
    stRKUVNrParamsSelected->meanSize1 = stRKUVNrParams->meanSize1[isoIndex]; 
 | 
    //ÖÐÖµ1 
 | 
    memcpy(stRKUVNrParamsSelected->nonMed1, stRKUVNrParams->nonMed1, sizeof(int) * 4); 
 | 
    stRKUVNrParamsSelected->medSize1 = stRKUVNrParams->medSize1[isoIndex]; 
 | 
    stRKUVNrParamsSelected->medRatio1 = ufnr_interpISO_v1(isoGainLow, isoGainHigh, stRKUVNrParams->medRatio1[isoIndexLow], 
 | 
                                        stRKUVNrParams->medRatio1[isoIndexHigh], iso, stRKUVNrParamsSelected->medRatio1); 
 | 
    stRKUVNrParamsSelected->isMedIIR1 = stRKUVNrParams->isMedIIR1[isoIndex]; 
 | 
    //Ë«±ß1 
 | 
    memcpy(stRKUVNrParamsSelected->nonBf1, stRKUVNrParams->nonBf1, sizeof(int) * 4); 
 | 
    stRKUVNrParamsSelected->bfSize1 = stRKUVNrParams->bfSize1[isoIndex]; 
 | 
    stRKUVNrParamsSelected->sigmaR1 = ufnr_interpISO_v1(isoGainLow, isoGainHigh, stRKUVNrParams->sigmaR1[isoIndexLow], 
 | 
                                      stRKUVNrParams->sigmaR1[isoIndexHigh], iso, stRKUVNrParamsSelected->sigmaR1); 
 | 
    stRKUVNrParamsSelected->sigmaD1 = ufnr_interpISO_v1(isoGainLow, isoGainHigh, stRKUVNrParams->sigmaD1[isoIndexLow], 
 | 
                                      stRKUVNrParams->sigmaD1[isoIndexHigh], iso, stRKUVNrParamsSelected->sigmaD1); 
 | 
    stRKUVNrParamsSelected->uvgain1 = ufnr_interpISO_v1(isoGainLow, isoGainHigh, stRKUVNrParams->uvgain1[isoIndexLow], 
 | 
                                      stRKUVNrParams->uvgain1[isoIndexHigh], iso, stRKUVNrParamsSelected->uvgain1); 
 | 
    stRKUVNrParamsSelected->bfRatio1 = ufnr_interpISO_v1(isoGainLow, isoGainHigh, stRKUVNrParams->bfRatio1[isoIndexLow], 
 | 
                                       stRKUVNrParams->bfRatio1[isoIndexHigh], iso, stRKUVNrParamsSelected->bfRatio1); 
 | 
    stRKUVNrParamsSelected->isRowIIR1 = stRKUVNrParams->isRowIIR1[isoIndex]; 
 | 
    stRKUVNrParamsSelected->isYcopy1 = stRKUVNrParams->isYcopy1[isoIndex]; 
 | 
  
 | 
    //step2-ϲÉÑù2 
 | 
    memcpy(stRKUVNrParamsSelected->block2_ext, stRKUVNrParams->block2_ext, sizeof(int) * 4); 
 | 
    //¾ùÖµ2 
 | 
    stRKUVNrParamsSelected->wStep2 = stRKUVNrParams->wStep2[isoIndex]; 
 | 
    stRKUVNrParamsSelected->hStep2 = stRKUVNrParams->hStep2[isoIndex]; 
 | 
    stRKUVNrParamsSelected->meanSize2 = stRKUVNrParams->meanSize2[isoIndex]; 
 | 
    //ÖÐÖµ2 
 | 
    memcpy(stRKUVNrParamsSelected->nonMed2, stRKUVNrParams->nonMed2, sizeof(int) * 4); 
 | 
    stRKUVNrParamsSelected->medSize2 = stRKUVNrParams->medSize2[isoIndex]; 
 | 
    stRKUVNrParamsSelected->medRatio2 = ufnr_interpISO_v1(isoGainLow, isoGainHigh, stRKUVNrParams->medRatio2[isoIndexLow], 
 | 
                                        stRKUVNrParams->medRatio2[isoIndexHigh], iso, stRKUVNrParamsSelected->medRatio2); 
 | 
    stRKUVNrParamsSelected->isMedIIR2 = stRKUVNrParams->isMedIIR2[isoIndex]; 
 | 
    //Ë«±ß2 
 | 
    memcpy(stRKUVNrParamsSelected->nonBf2, stRKUVNrParams->nonBf2, sizeof(int) * 4); 
 | 
    stRKUVNrParamsSelected->bfSize2 = stRKUVNrParams->bfSize2[isoIndex]; 
 | 
    stRKUVNrParamsSelected->sigmaR2 = ufnr_interpISO_v1(isoGainLow, isoGainHigh, stRKUVNrParams->sigmaR2[isoIndexLow], 
 | 
                                      stRKUVNrParams->sigmaR2[isoIndexHigh], iso, stRKUVNrParamsSelected->sigmaR2); 
 | 
    stRKUVNrParamsSelected->sigmaD2 = ufnr_interpISO_v1(isoGainLow, isoGainHigh, stRKUVNrParams->sigmaD2[isoIndexLow], 
 | 
                                      stRKUVNrParams->sigmaD2[isoIndexHigh], iso, stRKUVNrParamsSelected->sigmaD2); 
 | 
    stRKUVNrParamsSelected->uvgain2 = ufnr_interpISO_v1(isoGainLow, isoGainHigh, stRKUVNrParams->uvgain2[isoIndexLow], 
 | 
                                      stRKUVNrParams->uvgain2[isoIndexHigh], iso, stRKUVNrParamsSelected->uvgain2); 
 | 
    stRKUVNrParamsSelected->bfRatio2 = ufnr_interpISO_v1(isoGainLow, isoGainHigh, stRKUVNrParams->bfRatio2[isoIndexLow], 
 | 
                                       stRKUVNrParams->bfRatio2[isoIndexHigh], iso, stRKUVNrParamsSelected->bfRatio2); 
 | 
    stRKUVNrParamsSelected->isRowIIR2 = stRKUVNrParams->isRowIIR2[isoIndex]; 
 | 
    stRKUVNrParamsSelected->isYcopy2 = stRKUVNrParams->isYcopy2[isoIndex]; 
 | 
  
 | 
    //step3 
 | 
    memcpy(stRKUVNrParamsSelected->nonBf3, stRKUVNrParams->nonBf3, sizeof(int) * 4); 
 | 
    //Ë«±ß3 
 | 
    stRKUVNrParamsSelected->bfSize3 = stRKUVNrParams->bfSize3[isoIndex]; 
 | 
    stRKUVNrParamsSelected->sigmaR3 = ufnr_interpISO_v1(isoGainLow, isoGainHigh, stRKUVNrParams->sigmaR3[isoIndexLow], 
 | 
                                      stRKUVNrParams->sigmaR3[isoIndexHigh], iso, stRKUVNrParamsSelected->sigmaR3); 
 | 
    stRKUVNrParamsSelected->sigmaD3 = ufnr_interpISO_v1(isoGainLow, isoGainHigh, stRKUVNrParams->sigmaD3[isoIndexLow], 
 | 
                                      stRKUVNrParams->sigmaD3[isoIndexHigh], iso, stRKUVNrParamsSelected->sigmaD3); 
 | 
    stRKUVNrParamsSelected->uvgain3 = ufnr_interpISO_v1(isoGainLow, isoGainHigh, stRKUVNrParams->uvgain3[isoIndexLow], 
 | 
                                      stRKUVNrParams->uvgain3[isoIndexHigh], iso, stRKUVNrParamsSelected->uvgain3); 
 | 
    stRKUVNrParamsSelected->bfRatio3 = ufnr_interpISO_v1(isoGainLow, isoGainHigh, stRKUVNrParams->bfRatio3[isoIndexLow], 
 | 
                                       stRKUVNrParams->bfRatio3[isoIndexHigh], iso, stRKUVNrParamsSelected->bfRatio3); 
 | 
    stRKUVNrParamsSelected->isRowIIR3 = stRKUVNrParams->isRowIIR3[isoIndex]; 
 | 
    stRKUVNrParamsSelected->isYcopy3 = stRKUVNrParams->isYcopy3[isoIndex]; 
 | 
  
 | 
    //kernels 
 | 
    memcpy(stRKUVNrParamsSelected->kernel_3x3_table, stRKUVNrParams->kernel_3x3_table, sizeof(float) * 3); 
 | 
    memcpy(stRKUVNrParamsSelected->kernel_5x5_table, stRKUVNrParams->kernel_5x5_talbe, sizeof(float) * 5); 
 | 
    memcpy(stRKUVNrParamsSelected->kernel_9x9_table, stRKUVNrParams->kernel_9x9_table, sizeof(float) * 8); 
 | 
    stRKUVNrParamsSelected->kernel_9x9_num = stRKUVNrParams->kernel_9x9_num; 
 | 
  
 | 
    //curves 
 | 
    memcpy(stRKUVNrParamsSelected->sigmaAdj_x, stRKUVNrParams->sigmaAdj_x, sizeof(int) * 9); 
 | 
    memcpy(stRKUVNrParamsSelected->sigmaAdj_y, stRKUVNrParams->sigamAdj_y, sizeof(float) * 9); 
 | 
    memcpy(stRKUVNrParamsSelected->threAdj_x, stRKUVNrParams->threAdj_x, sizeof(int) * 9); 
 | 
    memcpy(stRKUVNrParamsSelected->threAdj_y, stRKUVNrParams->threAjd_y, sizeof(int) * 9); 
 | 
  
 | 
    return AUVNR_RET_SUCCESS; 
 | 
  
 | 
} 
 | 
  
 | 
  
 | 
Auvnr_result_t uvnr_fix_transfer_v1(RK_UVNR_Params_V1_Select_t *uvnr, RK_UVNR_Fix_V1_t *pNrCfg, Auvnr_ExpInfo_t *pExpInfo, float gain_ratio, float fStrength) 
 | 
{ 
 | 
    LOGI_ANR("%s:(%d) enter \n", __FUNCTION__, __LINE__); 
 | 
  
 | 
    int i = 0; 
 | 
    Auvnr_result_t res = AUVNR_RET_SUCCESS; 
 | 
  
 | 
    if(uvnr == NULL || pNrCfg == NULL || pExpInfo == NULL) { 
 | 
        LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__); 
 | 
        return AUVNR_RET_NULL_POINTER; 
 | 
    } 
 | 
  
 | 
    int iso = pExpInfo->arIso[pExpInfo->hdr_mode] * gain_ratio; 
 | 
  
 | 
    int log2e                       = (int)(0.8493f * (1 << RKUVNR_log2e)); 
 | 
    log2e                           = log2e * (1 << RKUVNR_imgBit_set); 
 | 
  
 | 
    //0x0080 
 | 
    pNrCfg->uvnr_step1_en = 1; 
 | 
    pNrCfg->uvnr_step2_en = 1; 
 | 
    pNrCfg->nr_gain_en = 1; 
 | 
    pNrCfg->uvnr_nobig_en = 0; 
 | 
    pNrCfg->uvnr_big_en = 0; 
 | 
  
 | 
  
 | 
    //0x0084 
 | 
    pNrCfg->uvnr_gain_1sigma = (unsigned char)(uvnr->ratio * (1 << RKUVNR_ratio)); 
 | 
  
 | 
    //0x0088 
 | 
    pNrCfg->uvnr_gain_offset = (unsigned char)(uvnr->offset * (1 << RKUVNR_offset)); 
 | 
  
 | 
    //0x008c 
 | 
    pNrCfg->uvnr_gain_uvgain[0] = (unsigned char)(uvnr->uvgain1 * fStrength * (1 << RKUVNR_uvgain)); 
 | 
    if( pNrCfg->uvnr_gain_uvgain[0]  > 0x7f) { 
 | 
        pNrCfg->uvnr_gain_uvgain[0] = 0x7f; 
 | 
    } 
 | 
    pNrCfg->uvnr_gain_uvgain[1] = (unsigned char)(uvnr->uvgain3 * fStrength * (1 << RKUVNR_uvgain)); 
 | 
    if( pNrCfg->uvnr_gain_uvgain[1]  > 0x7f) { 
 | 
        pNrCfg->uvnr_gain_uvgain[1] = 0x7f; 
 | 
    } 
 | 
    pNrCfg->uvnr_gain_t2gen = (unsigned char)(uvnr->uvgain2 *  fStrength * (1 << RKUVNR_uvgain)); 
 | 
    if( pNrCfg->uvnr_gain_t2gen  > 0x7f) { 
 | 
        pNrCfg->uvnr_gain_t2gen = 0x7f; 
 | 
    } 
 | 
    pNrCfg->uvnr_gain_iso = (int)(sqrt(50.0 / (float)(iso)) * (1 << RKUVNR_gainRatio)); 
 | 
    if(pNrCfg->uvnr_gain_iso > 0x80) { 
 | 
        pNrCfg->uvnr_gain_iso = 0x80; 
 | 
    } 
 | 
  
 | 
    if(pNrCfg->uvnr_gain_iso < 0x8) { 
 | 
        pNrCfg->uvnr_gain_iso = 0x8; 
 | 
    } 
 | 
  
 | 
    //0x0090 
 | 
    pNrCfg->uvnr_t1gen_m3alpha = (uvnr->medRatio1 * (1 << RKUVNR_medRatio)); 
 | 
  
 | 
    //0x0094 
 | 
    pNrCfg->uvnr_t1flt_mode = uvnr->kernel_9x9_num; 
 | 
  
 | 
    //0x0098 
 | 
    pNrCfg->uvnr_t1flt_msigma = (unsigned short)(log2e / uvnr->sigmaR1); 
 | 
  
 | 
    pNrCfg->uvnr_t1flt_msigma = MIN(pNrCfg->uvnr_t1flt_msigma, 8191); 
 | 
  
 | 
  
 | 
    //0x009c 
 | 
    pNrCfg->uvnr_t1flt_wtp = (unsigned char)(uvnr->bfRatio1 * (1 << RKUVNR_bfRatio)); 
 | 
  
 | 
    //0x00a0-0x00a4 
 | 
    for(i = 0; i < 8; i++) { 
 | 
        pNrCfg->uvnr_t1flt_wtq[i] = (unsigned char)(uvnr->kernel_9x9_table[i] * (1 << RKUVNR_kernels)); 
 | 
    } 
 | 
  
 | 
    //0x00a8 
 | 
    pNrCfg->uvnr_t2gen_m3alpha = (unsigned char)(uvnr->medRatio2 * (1 << RKUVNR_medRatio)); 
 | 
  
 | 
    //0x00ac 
 | 
    pNrCfg->uvnr_t2gen_msigma = (unsigned short)(log2e / uvnr->sigmaR2); 
 | 
    pNrCfg->uvnr_t2gen_msigma = MIN(pNrCfg->uvnr_t2gen_msigma, 8191); 
 | 
  
 | 
  
 | 
    //0x00b0 
 | 
    pNrCfg->uvnr_t2gen_wtp = (unsigned char)(uvnr->kernel_5x5_table[0] * (1 << RKUVNR_kernels)); 
 | 
  
 | 
    //0x00b4 
 | 
    for(i = 0; i < 4; i++) { 
 | 
        pNrCfg->uvnr_t2gen_wtq[i] = (unsigned char)(uvnr->kernel_5x5_table[i + 1] * (1 << RKUVNR_kernels)); 
 | 
    } 
 | 
  
 | 
    //0x00b8 
 | 
    pNrCfg->uvnr_t2flt_msigma = (unsigned short)(log2e / uvnr->sigmaR3); 
 | 
    pNrCfg->uvnr_t2flt_msigma = MIN(pNrCfg->uvnr_t2flt_msigma, 8191); 
 | 
  
 | 
    //0x00bc 
 | 
    pNrCfg->uvnr_t2flt_wtp = (unsigned char)(uvnr->bfRatio3 * (1 << RKUVNR_bfRatio)); 
 | 
    for(i = 0; i < 3; i++) { 
 | 
        pNrCfg->uvnr_t2flt_wt[i] = (unsigned char)(uvnr->kernel_3x3_table[i] * (1 << RKUVNR_kernels)); 
 | 
    } 
 | 
  
 | 
#if UVNR_FIX_VALUE_PRINTF 
 | 
    uvnr_fix_Printf_v1(pNrCfg); 
 | 
#endif 
 | 
  
 | 
    LOGI_ANR("%s:(%d) exit \n", __FUNCTION__, __LINE__); 
 | 
  
 | 
    return AUVNR_RET_SUCCESS; 
 | 
} 
 | 
  
 | 
  
 | 
Auvnr_result_t uvnr_fix_Printf_v1(RK_UVNR_Fix_V1_t  * pNrCfg) 
 | 
{ 
 | 
    int i = 0; 
 | 
    LOGI_ANR("%s:(%d) enter \n", __FUNCTION__, __LINE__); 
 | 
  
 | 
    Auvnr_result_t res = AUVNR_RET_SUCCESS; 
 | 
  
 | 
    if(pNrCfg == NULL) { 
 | 
        LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__); 
 | 
        return AUVNR_RET_NULL_POINTER; 
 | 
    } 
 | 
  
 | 
    //0x0080 
 | 
    LOGD_ANR("(0x0080) uvnr_step1_en:%d uvnr_step2_en:%d nr_gain_en:%d uvnr_nobig_en:%d uvnr_big_en:%d\n", 
 | 
             pNrCfg->uvnr_step1_en, 
 | 
             pNrCfg->uvnr_step2_en, 
 | 
             pNrCfg->nr_gain_en, 
 | 
             pNrCfg->uvnr_nobig_en, 
 | 
             pNrCfg->uvnr_big_en); 
 | 
  
 | 
    //0x0084 
 | 
    LOGD_ANR("(0x0084) uvnr_gain_1sigma:%d \n", 
 | 
             pNrCfg->uvnr_gain_1sigma); 
 | 
  
 | 
    //0x0088 
 | 
    LOGD_ANR("(0x0088) uvnr_gain_offset:%d \n", 
 | 
             pNrCfg->uvnr_gain_offset); 
 | 
  
 | 
    //0x008c 
 | 
    LOGD_ANR("uvnr: (0x008c) uvnr_gain_uvgain:%d uvnr_step2_en:%d uvnr_gain_t2gen:%d uvnr_gain_iso:%d\n", 
 | 
             pNrCfg->uvnr_gain_uvgain[0], 
 | 
             pNrCfg->uvnr_gain_uvgain[1], 
 | 
             pNrCfg->uvnr_gain_t2gen, 
 | 
             pNrCfg->uvnr_gain_iso); 
 | 
  
 | 
  
 | 
    //0x0090 
 | 
    LOGD_ANR("(0x0090) uvnr_t1gen_m3alpha:%d \n", 
 | 
             pNrCfg->uvnr_t1gen_m3alpha); 
 | 
  
 | 
    //0x0094 
 | 
    LOGD_ANR("(0x0094) uvnr_t1flt_mode:%d \n", 
 | 
             pNrCfg->uvnr_t1flt_mode); 
 | 
  
 | 
    //0x0098 
 | 
    LOGD_ANR("(0x0098) uvnr_t1flt_msigma:%d \n", 
 | 
             pNrCfg->uvnr_t1flt_msigma); 
 | 
  
 | 
    //0x009c 
 | 
    LOGD_ANR("(0x009c) uvnr_t1flt_wtp:%d \n", 
 | 
             pNrCfg->uvnr_t1flt_wtp); 
 | 
  
 | 
    //0x00a0-0x00a4 
 | 
    for(i = 0; i < 8; i++) { 
 | 
        LOGD_ANR("(0x00a0-0x00a4) uvnr_t1flt_wtq[%d]:%d \n", 
 | 
                 i, pNrCfg->uvnr_t1flt_wtq[i]); 
 | 
    } 
 | 
  
 | 
    //0x00a8 
 | 
    LOGD_ANR("(0x00a8) uvnr_t2gen_m3alpha:%d \n", 
 | 
             pNrCfg->uvnr_t2gen_m3alpha); 
 | 
  
 | 
    //0x00ac 
 | 
    LOGD_ANR("(0x00ac) uvnr_t2gen_msigma:%d \n", 
 | 
             pNrCfg->uvnr_t2gen_msigma); 
 | 
  
 | 
    //0x00b0 
 | 
    LOGD_ANR("(0x00b0) uvnr_t2gen_wtp:%d \n", 
 | 
             pNrCfg->uvnr_t2gen_wtp); 
 | 
  
 | 
    //0x00b4 
 | 
    for(i = 0; i < 4; i++) { 
 | 
        LOGD_ANR("(0x00b4) uvnr_t2gen_wtq[%d]:%d \n", 
 | 
                 i, pNrCfg->uvnr_t2gen_wtq[i]); 
 | 
    } 
 | 
  
 | 
    //0x00b8 
 | 
    LOGD_ANR("(0x00b8) uvnr_t2flt_msigma:%d \n", 
 | 
             pNrCfg->uvnr_t2flt_msigma); 
 | 
  
 | 
    //0x00bc 
 | 
    LOGD_ANR("(0x00bc) uvnr_t2flt_wtp:%d \n", 
 | 
             pNrCfg->uvnr_t2flt_wtp); 
 | 
    for(i = 0; i < 3; i++) { 
 | 
        LOGD_ANR("(0x00bc) uvnr_t2flt_wt[%d]:%d \n", 
 | 
                 i, pNrCfg->uvnr_t2flt_wt[i]); 
 | 
    } 
 | 
  
 | 
  
 | 
    LOGD_ANR("%s:(%d) exit \n", __FUNCTION__, __LINE__); 
 | 
  
 | 
    return AUVNR_RET_SUCCESS; 
 | 
} 
 | 
  
 | 
  
 | 
Auvnr_result_t uvnr_calibdbV2_assign_v1(CalibDbV2_UVNR_t *pDst, CalibDbV2_UVNR_t *pSrc) 
 | 
{ 
 | 
    Auvnr_result_t res = AUVNR_RET_SUCCESS; 
 | 
    CalibDbV2_UVNR_TuningPara_t *pSrcTuningParaV2 = NULL; 
 | 
    CalibDbV2_UVNR_TuningPara_t *pDstTuningParaV2 = NULL; 
 | 
    int setting_len = 0; 
 | 
    int iso_len = 0; 
 | 
  
 | 
  
 | 
    if(pDst == NULL || pSrc == NULL) { 
 | 
        LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__); 
 | 
        return AUVNR_RET_NULL_POINTER; 
 | 
    } 
 | 
  
 | 
    uvnr_calibdbV2_free_v1(pDst); 
 | 
  
 | 
    pSrcTuningParaV2 = &pSrc->TuningPara; 
 | 
    pDstTuningParaV2 = &pDst->TuningPara; 
 | 
  
 | 
    //assign the value 
 | 
    pDst->Version = strdup(pSrc->Version); 
 | 
    pDstTuningParaV2->enable = pSrcTuningParaV2->enable; 
 | 
  
 | 
    //malloc iso size 
 | 
    setting_len = pSrcTuningParaV2->Setting_len; 
 | 
    pDstTuningParaV2->Setting = (CalibDbV2_UVNR_TuningPara_Setting_t *)malloc(setting_len * sizeof(CalibDbV2_UVNR_TuningPara_Setting_t)); 
 | 
    memset(pDstTuningParaV2->Setting, 0x00, setting_len * sizeof(CalibDbV2_UVNR_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_UVNR_TuningPara_Setting_ISO_t *)malloc(iso_len * sizeof(CalibDbV2_UVNR_TuningPara_Setting_ISO_t)); 
 | 
        memset(pDstTuningParaV2->Setting[i].Tuning_ISO, 0x00, iso_len * sizeof(CalibDbV2_UVNR_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]; 
 | 
        } 
 | 
    } 
 | 
  
 | 
    pDstTuningParaV2->Kernel_Coeff = pSrcTuningParaV2->Kernel_Coeff; 
 | 
  
 | 
    return res; 
 | 
  
 | 
} 
 | 
  
 | 
  
 | 
  
 | 
void uvnr_calibdbV2_free_v1(CalibDbV2_UVNR_t *pCalibdbV2) 
 | 
{ 
 | 
    if(pCalibdbV2) { 
 | 
        if(pCalibdbV2->Version) { 
 | 
            free(pCalibdbV2->Version); 
 | 
        } 
 | 
  
 | 
        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 
 |