| 
#include "rk_aiq_auvnr_algo_v1.h" 
 | 
#include "rk_aiq_auvnr_algo_itf_v1.h" 
 | 
  
 | 
RKAIQ_BEGIN_DECLARE 
 | 
  
 | 
Auvnr_result_t Auvnr_Start_V1(Auvnr_Context_V1_t *pAuvnrCtx) 
 | 
{ 
 | 
    LOGI_ANR( "%s:enter!\n", __FUNCTION__); 
 | 
  
 | 
    // initial checks 
 | 
    if (pAuvnrCtx == NULL) { 
 | 
        return (AUVNR_RET_NULL_POINTER); 
 | 
    } 
 | 
  
 | 
    if ((AUVNR_STATE_RUNNING == pAuvnrCtx->eState) 
 | 
            || (AUVNR_STATE_LOCKED == pAuvnrCtx->eState)) { 
 | 
        return (AUVNR_RET_FAILURE); 
 | 
    } 
 | 
  
 | 
    pAuvnrCtx->eState = AUVNR_STATE_RUNNING; 
 | 
  
 | 
    LOGI_ANR( "%s:exit!\n", __FUNCTION__); 
 | 
    return (AUVNR_RET_SUCCESS); 
 | 
} 
 | 
  
 | 
  
 | 
Auvnr_result_t Auvnr_Stop_V1(Auvnr_Context_V1_t *pAuvnrCtx) 
 | 
{ 
 | 
    LOGI_ANR( "%s:enter!\n", __FUNCTION__); 
 | 
  
 | 
    // initial checks 
 | 
    if (pAuvnrCtx == NULL) { 
 | 
        return (AUVNR_RET_NULL_POINTER); 
 | 
    } 
 | 
  
 | 
    if (AUVNR_STATE_LOCKED == pAuvnrCtx->eState) { 
 | 
        return (AUVNR_RET_FAILURE); 
 | 
    } 
 | 
  
 | 
    pAuvnrCtx->eState = AUVNR_STATE_STOPPED; 
 | 
  
 | 
    LOGI_ANR( "%s:exit!\n", __FUNCTION__); 
 | 
    return (AUVNR_RET_SUCCESS); 
 | 
} 
 | 
  
 | 
  
 | 
//anr inint 
 | 
Auvnr_result_t Auvnr_Init_V1(Auvnr_Context_V1_t **ppAuvnrCtx, CamCalibDbContext_t *pCalibDb) 
 | 
{ 
 | 
    Auvnr_Context_V1_t * pAuvnrCtx; 
 | 
  
 | 
    LOGE_ANR("%s(%d): enter!\n", __FUNCTION__, __LINE__); 
 | 
  
 | 
    pAuvnrCtx = (Auvnr_Context_V1_t *)malloc(sizeof(Auvnr_Context_V1_t)); 
 | 
    if(pAuvnrCtx == NULL) { 
 | 
        LOGE_ANR("%s(%d): malloc fail\n", __FUNCTION__, __LINE__); 
 | 
        return AUVNR_RET_NULL_POINTER; 
 | 
    } 
 | 
  
 | 
    memset(pAuvnrCtx, 0x00, sizeof(Auvnr_Context_V1_t)); 
 | 
  
 | 
    //gain state init 
 | 
    pAuvnrCtx->stGainState.gain_stat_full_last = -1; 
 | 
    pAuvnrCtx->stGainState.gainState = -1; 
 | 
    pAuvnrCtx->stGainState.gainState_last = -1; 
 | 
    pAuvnrCtx->stGainState.gain_th0[0]    = 2.0; 
 | 
    pAuvnrCtx->stGainState.gain_th1[0]    = 4.0; 
 | 
    pAuvnrCtx->stGainState.gain_th0[1]    = 32.0; 
 | 
    pAuvnrCtx->stGainState.gain_th1[1]    = 64.0; 
 | 
  
 | 
    pAuvnrCtx->fChrom_SF_Strength = 1.0; 
 | 
  
 | 
    pAuvnrCtx->eState = AUVNR_STATE_INITIALIZED; 
 | 
    *ppAuvnrCtx = pAuvnrCtx; 
 | 
  
 | 
    pAuvnrCtx->eMode = AUVNR_OP_MODE_AUTO; 
 | 
    pAuvnrCtx->isIQParaUpdate = false; 
 | 
    pAuvnrCtx->isGrayMode = false; 
 | 
  
 | 
  
 | 
#if AUVNR_USE_XML_FILE_V1 
 | 
    //read v1 params from xml 
 | 
    pAuvnrCtx->stUvnrCalib = 
 | 
        *(CalibDb_UVNR_2_t*)(CALIBDB_GET_MODULE_PTR((void*)pCalibDb, uvnr)); 
 | 
  
 | 
  
 | 
    CalibDb_MFNR_2_t *pMfnrCalib = 
 | 
        (CalibDb_MFNR_2_t*)(CALIBDB_GET_MODULE_PTR((void*)pCalibDb, mfnr)); 
 | 
    pAuvnrCtx->mfnr_mode_3to1 = pMfnrCalib->mode_3to1; 
 | 
    pAuvnrCtx->mfnr_local_gain_en = pMfnrCalib->local_gain_en; 
 | 
  
 | 
  
 | 
    LOGE_ANR("%s(%d): uvnr version:%s mode_3to1:%d\n", 
 | 
             __FUNCTION__, __LINE__, 
 | 
             pAuvnrCtx->stUvnrCalib.version, 
 | 
             pAuvnrCtx->mfnr_mode_3to1); 
 | 
#endif 
 | 
  
 | 
#if RK_SIMULATOR_HW 
 | 
    //just for v2 params from html 
 | 
  
 | 
#endif 
 | 
  
 | 
#if AUVNR_USE_XML_FILE_V1 
 | 
    pAuvnrCtx->stExpInfo.snr_mode = 1; 
 | 
    pAuvnrCtx->eParamMode = AUVNR_PARAM_MODE_NORMAL; 
 | 
    Auvnr_ConfigSettingParam_V1(pAuvnrCtx, pAuvnrCtx->eParamMode, pAuvnrCtx->stExpInfo.snr_mode); 
 | 
#endif 
 | 
  
 | 
    LOGD_ANR("%s(%d):", __FUNCTION__, __LINE__); 
 | 
  
 | 
  
 | 
    LOGE_ANR("%s(%d): exit!\n", __FUNCTION__, __LINE__); 
 | 
    return AUVNR_RET_SUCCESS; 
 | 
} 
 | 
  
 | 
  
 | 
  
 | 
//anr inint 
 | 
Auvnr_result_t Auvnr_Init_Json_V1(Auvnr_Context_V1_t **ppAuvnrCtx, CamCalibDbV2Context_t *pCalibDbV2) 
 | 
{ 
 | 
    Auvnr_Context_V1_t * pAuvnrCtx; 
 | 
  
 | 
    LOGI_ANR("%s(%d): enter!\n", __FUNCTION__, __LINE__); 
 | 
  
 | 
    pAuvnrCtx = (Auvnr_Context_V1_t *)malloc(sizeof(Auvnr_Context_V1_t)); 
 | 
    if(pAuvnrCtx == NULL) { 
 | 
        LOGE_ANR("%s(%d): malloc fail\n", __FUNCTION__, __LINE__); 
 | 
        return AUVNR_RET_NULL_POINTER; 
 | 
    } 
 | 
  
 | 
    memset(pAuvnrCtx, 0x00, sizeof(Auvnr_Context_V1_t)); 
 | 
  
 | 
    //gain state init 
 | 
    pAuvnrCtx->stGainState.gain_stat_full_last = -1; 
 | 
    pAuvnrCtx->stGainState.gainState = -1; 
 | 
    pAuvnrCtx->stGainState.gainState_last = -1; 
 | 
    pAuvnrCtx->stGainState.gain_th0[0]    = 2.0; 
 | 
    pAuvnrCtx->stGainState.gain_th1[0]    = 4.0; 
 | 
    pAuvnrCtx->stGainState.gain_th0[1]    = 32.0; 
 | 
    pAuvnrCtx->stGainState.gain_th1[1]    = 64.0; 
 | 
  
 | 
    pAuvnrCtx->fChrom_SF_Strength = 1.0; 
 | 
  
 | 
    pAuvnrCtx->eState = AUVNR_STATE_INITIALIZED; 
 | 
    *ppAuvnrCtx = pAuvnrCtx; 
 | 
  
 | 
    pAuvnrCtx->eMode = AUVNR_OP_MODE_AUTO; 
 | 
    pAuvnrCtx->isIQParaUpdate = false; 
 | 
    pAuvnrCtx->isGrayMode = false; 
 | 
  
 | 
#if AUVNR_USE_JSON_FILE_V1 
 | 
    //read v1 params from xml 
 | 
    CalibDbV2_UVNR_t* calibv2_uvnr_v1 = 
 | 
        (CalibDbV2_UVNR_t*)(CALIBDBV2_GET_MODULE_PTR(pCalibDbV2, uvnr_v1)); 
 | 
    uvnr_calibdbV2_assign_v1(&pAuvnrCtx->uvnr_v1, calibv2_uvnr_v1); 
 | 
  
 | 
    CalibDbV2_MFNR_t* pCalibv2_mfnr_v1 = 
 | 
        (CalibDbV2_MFNR_t*)(CALIBDBV2_GET_MODULE_PTR(pCalibDbV2, mfnr_v1)); 
 | 
    pAuvnrCtx->mfnr_mode_3to1 = pCalibv2_mfnr_v1->TuningPara.mode_3to1; 
 | 
    pAuvnrCtx->mfnr_local_gain_en = pCalibv2_mfnr_v1->TuningPara.local_gain_en; 
 | 
  
 | 
    LOGD_ANR("%s(%d): uvnr version:%s mode_3to1:%d\n", 
 | 
             __FUNCTION__, __LINE__, 
 | 
             pAuvnrCtx->stUvnrCalib.version, 
 | 
             pAuvnrCtx->mfnr_mode_3to1); 
 | 
#endif 
 | 
  
 | 
#if RK_SIMULATOR_HW 
 | 
    //just for v2 params from html 
 | 
  
 | 
#endif 
 | 
  
 | 
#if AUVNR_USE_JSON_FILE_V1 
 | 
    pAuvnrCtx->stExpInfo.snr_mode = 1; 
 | 
    pAuvnrCtx->eParamMode = AUVNR_PARAM_MODE_NORMAL; 
 | 
    Auvnr_ConfigSettingParam_V1(pAuvnrCtx, pAuvnrCtx->eParamMode, pAuvnrCtx->stExpInfo.snr_mode); 
 | 
#endif 
 | 
  
 | 
  
 | 
    LOGI_ANR("%s(%d): exit!\n", __FUNCTION__, __LINE__); 
 | 
    return AUVNR_RET_SUCCESS; 
 | 
} 
 | 
  
 | 
  
 | 
//anr release 
 | 
Auvnr_result_t Auvnr_Release_V1(Auvnr_Context_V1_t *pAuvnrCtx) 
 | 
{ 
 | 
    Auvnr_result_t result = AUVNR_RET_SUCCESS; 
 | 
    LOGI_ANR("%s(%d): enter!\n", __FUNCTION__, __LINE__); 
 | 
    if(pAuvnrCtx == NULL) { 
 | 
        LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__); 
 | 
        return AUVNR_RET_NULL_POINTER; 
 | 
    } 
 | 
  
 | 
    result = Auvnr_Stop_V1(pAuvnrCtx); 
 | 
    if (result != AUVNR_RET_SUCCESS) { 
 | 
        LOGE_ANR( "%s: ANRStop() failed!\n", __FUNCTION__); 
 | 
        return (result); 
 | 
    } 
 | 
  
 | 
    // check state 
 | 
    if ((AUVNR_STATE_RUNNING == pAuvnrCtx->eState) 
 | 
            || (AUVNR_STATE_LOCKED == pAuvnrCtx->eState)) { 
 | 
        return (AUVNR_RET_BUSY); 
 | 
    } 
 | 
  
 | 
#if AUVNR_USE_JSON_FILE_V1 
 | 
    uvnr_calibdbV2_free_v1(&pAuvnrCtx->uvnr_v1); 
 | 
#endif 
 | 
  
 | 
    memset(pAuvnrCtx, 0x00, sizeof(Auvnr_Context_V1_t)); 
 | 
    free(pAuvnrCtx); 
 | 
  
 | 
    LOGI_ANR("%s(%d): exit!\n", __FUNCTION__, __LINE__); 
 | 
    return AUVNR_RET_SUCCESS; 
 | 
} 
 | 
  
 | 
//anr config 
 | 
Auvnr_result_t Auvnr_Prepare_V1(Auvnr_Context_V1_t *pAuvnrCtx, Auvnr_Config_V1_t* pAuvnrConfig) 
 | 
{ 
 | 
    LOGI_ANR("%s(%d): enter!\n", __FUNCTION__, __LINE__); 
 | 
  
 | 
    if(pAuvnrCtx == NULL) { 
 | 
        LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__); 
 | 
        return AUVNR_RET_INVALID_PARM; 
 | 
    } 
 | 
  
 | 
    if(pAuvnrConfig == NULL) { 
 | 
        LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__); 
 | 
        return AUVNR_RET_INVALID_PARM; 
 | 
    } 
 | 
  
 | 
    if(!!(pAuvnrCtx->prepare_type & RK_AIQ_ALGO_CONFTYPE_UPDATECALIB)) { 
 | 
        Auvnr_IQParaUpdate_V1(pAuvnrCtx); 
 | 
    } 
 | 
  
 | 
    pAuvnrCtx->rawWidth = pAuvnrConfig->rawWidth; 
 | 
    pAuvnrCtx->rawHeight = pAuvnrConfig->rawHeight; 
 | 
    Auvnr_Start_V1(pAuvnrCtx); 
 | 
  
 | 
    LOGI_ANR("%s(%d): exit!\n", __FUNCTION__, __LINE__); 
 | 
    return AUVNR_RET_SUCCESS; 
 | 
} 
 | 
  
 | 
//anr reconfig 
 | 
Auvnr_result_t Auvnr_ReConfig_V1(Auvnr_Context_V1_t *pAuvnrCtx, Auvnr_Config_V1_t* pAuvnrConfig) 
 | 
{ 
 | 
    LOGI_ANR("%s(%d): enter!\n", __FUNCTION__, __LINE__); 
 | 
    //need todo what? 
 | 
  
 | 
    LOGI_ANR("%s(%d): exit!\n", __FUNCTION__, __LINE__); 
 | 
    return AUVNR_RET_SUCCESS; 
 | 
} 
 | 
  
 | 
//anr reconfig 
 | 
Auvnr_result_t Auvnr_IQParaUpdate_V1(Auvnr_Context_V1_t *pAuvnrCtx) 
 | 
{ 
 | 
    LOGI_ANR("%s(%d): enter!\n", __FUNCTION__, __LINE__); 
 | 
    //need todo what? 
 | 
  
 | 
    if(pAuvnrCtx->isIQParaUpdate) { 
 | 
        LOGD_ANR("IQ data reconfig\n"); 
 | 
        Auvnr_ConfigSettingParam_V1(pAuvnrCtx, pAuvnrCtx->eParamMode, pAuvnrCtx->stExpInfo.snr_mode); 
 | 
        pAuvnrCtx->isIQParaUpdate = false; 
 | 
    } 
 | 
  
 | 
    LOGI_ANR("%s(%d): exit!\n", __FUNCTION__, __LINE__); 
 | 
    return AUVNR_RET_SUCCESS; 
 | 
} 
 | 
  
 | 
  
 | 
//anr preprocess 
 | 
Auvnr_result_t Auvnr_PreProcess_V1(Auvnr_Context_V1_t *pAuvnrCtx) 
 | 
{ 
 | 
    LOGI_ANR("%s(%d): enter!\n", __FUNCTION__, __LINE__); 
 | 
    //need todo what? 
 | 
  
 | 
    Auvnr_IQParaUpdate_V1(pAuvnrCtx); 
 | 
  
 | 
    LOGI_ANR("%s(%d): exit!\n", __FUNCTION__, __LINE__); 
 | 
    return AUVNR_RET_SUCCESS; 
 | 
} 
 | 
  
 | 
Auvnr_result_t Auvnr_GainRatioProcess_V1(Auvnr_GainState_t *pGainState, Auvnr_ExpInfo_t *pExpInfo) 
 | 
{ 
 | 
    LOGI_ANR("%s(%d): enter!\n", __FUNCTION__, __LINE__); 
 | 
  
 | 
    if(pGainState == NULL) { 
 | 
        LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__); 
 | 
        return AUVNR_RET_INVALID_PARM; 
 | 
    } 
 | 
  
 | 
    if(pExpInfo == NULL) { 
 | 
        LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__); 
 | 
        return AUVNR_RET_INVALID_PARM; 
 | 
    } 
 | 
  
 | 
    float gain_cur = pExpInfo->arAGain[pExpInfo->hdr_mode] * pExpInfo->arDGain[pExpInfo->hdr_mode]; 
 | 
    float th[2]; 
 | 
    float gain_th0[2]; 
 | 
    float gain_th1[2]; 
 | 
    for(int i = 0; i < 2; i++) { 
 | 
        gain_th0[i]     = pGainState->gain_th0[i]; 
 | 
        gain_th1[i]     = pGainState->gain_th1[i]; 
 | 
        th[i]           = pow(2.0, (log2(gain_th0[i]) + log2(gain_th1[i])) / 2); 
 | 
    } 
 | 
  
 | 
    pGainState->gain_cur = gain_cur; 
 | 
  
 | 
    int gain_stat_full = -1; 
 | 
    int gain_stat_full_last = pGainState->gain_stat_full_last; 
 | 
    int gain_stat_last = pGainState->gainState_last; 
 | 
    int gain_stat_cur  = -1; 
 | 
    int gain_stat = -1; 
 | 
  
 | 
    if(gain_cur <= gain_th0[0]) 
 | 
    { 
 | 
        gain_stat_full = 0; 
 | 
        gain_stat_cur = 0; 
 | 
    } 
 | 
    else if(gain_cur <= gain_th1[0] && gain_cur >= gain_th0[0]) 
 | 
    { 
 | 
        gain_stat_full = 1; 
 | 
    } 
 | 
    else if(gain_cur <= gain_th0[1] && gain_cur >= gain_th1[0]) 
 | 
    { 
 | 
        gain_stat_full = 2; 
 | 
        gain_stat_cur = 1; 
 | 
    } 
 | 
    else if(gain_cur <= gain_th1[1] && gain_cur >= gain_th0[1]) 
 | 
    { 
 | 
        gain_stat_full = 3; 
 | 
    } 
 | 
    else if(gain_cur >= gain_th1[1]) 
 | 
    { 
 | 
        gain_stat_full = 4; 
 | 
        gain_stat_cur = 2; 
 | 
    } 
 | 
    if(gain_stat_last == -1 || (abs(gain_stat_full - gain_stat_full_last) >= 2 && gain_stat_cur == -1)) { 
 | 
        if(gain_cur <= th[0]) 
 | 
            gain_stat_cur = 0; 
 | 
        else if(gain_cur <= th[1]) 
 | 
            gain_stat_cur = 1; 
 | 
        else 
 | 
            gain_stat_cur = 2; 
 | 
    } 
 | 
    if (gain_stat_cur != -1) { 
 | 
        gain_stat_last      = gain_stat_cur; 
 | 
        gain_stat_full_last = gain_stat_full; 
 | 
        gain_stat       = gain_stat_cur; 
 | 
    } else { 
 | 
        gain_stat       = gain_stat_last; 
 | 
    } 
 | 
    if (gain_stat == 0) 
 | 
        pGainState->ratio = 16; 
 | 
    else if (gain_stat == 1) 
 | 
        pGainState->ratio = 1; 
 | 
    else 
 | 
        pGainState->ratio = 1.0 / 16.0; 
 | 
  
 | 
    pGainState->gain_stat_full_last     = gain_stat_full_last; 
 | 
    pGainState->gainState       = gain_stat; 
 | 
    pGainState->gainState_last  = gain_stat_last; 
 | 
  
 | 
    LOGD_ANR("%s:%d gain_cur:%f gain th %f %fd %f %f ratio:%f gain_state:%d %d full    %d %d\n", 
 | 
             __FUNCTION__, __LINE__, 
 | 
             gain_cur, 
 | 
             gain_th0[0], gain_th0[1], 
 | 
             gain_th1[0], gain_th1[1], 
 | 
             pGainState->ratio, 
 | 
             pGainState->gainState_last, 
 | 
             pGainState->gainState, 
 | 
             pGainState->gain_stat_full_last, 
 | 
             gain_stat_full); 
 | 
  
 | 
  
 | 
    LOGI_ANR("%s(%d): exit!\n", __FUNCTION__, __LINE__); 
 | 
  
 | 
    return AUVNR_RET_SUCCESS; 
 | 
} 
 | 
  
 | 
  
 | 
//anr process 
 | 
Auvnr_result_t Auvnr_Process_V1(Auvnr_Context_V1_t *pAuvnrCtx, Auvnr_ExpInfo_t *pExpInfo) 
 | 
{ 
 | 
    LOGI_ANR("%s(%d): enter!\n", __FUNCTION__, __LINE__); 
 | 
    Auvnr_ParamMode_t mode = AUVNR_PARAM_MODE_INVALID; 
 | 
  
 | 
    if(pAuvnrCtx == NULL) { 
 | 
        LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__); 
 | 
        return AUVNR_RET_INVALID_PARM; 
 | 
    } 
 | 
  
 | 
    if(pExpInfo == NULL) { 
 | 
        LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__); 
 | 
        return AUVNR_RET_INVALID_PARM; 
 | 
    } 
 | 
  
 | 
    if(pAuvnrCtx->eState != AUVNR_STATE_RUNNING) { 
 | 
        return AUVNR_RET_SUCCESS; 
 | 
    } 
 | 
  
 | 
  
 | 
    Auvnr_ParamModeProcess_V1(pAuvnrCtx, pExpInfo, &mode); 
 | 
    Auvnr_GainRatioProcess_V1(&pAuvnrCtx->stGainState, pExpInfo); 
 | 
    pExpInfo->mfnr_mode_3to1 = pAuvnrCtx->mfnr_mode_3to1; 
 | 
    if(pExpInfo->mfnr_mode_3to1 ) { 
 | 
        pExpInfo->snr_mode = pExpInfo->pre_snr_mode; 
 | 
    } else { 
 | 
        pExpInfo->snr_mode = pExpInfo->cur_snr_mode; 
 | 
    } 
 | 
  
 | 
    if(pAuvnrCtx->eMode == AUVNR_OP_MODE_AUTO) { 
 | 
  
 | 
        LOGD_ANR("%s(%d): \n", __FUNCTION__, __LINE__); 
 | 
  
 | 
#if AUVNR_USE_XML_FILE_V1 
 | 
        if(pExpInfo->snr_mode != pAuvnrCtx->stExpInfo.snr_mode || pAuvnrCtx->eParamMode != mode) { 
 | 
            LOGD_ANR("param mode:%d snr_mode:%d\n", mode, pExpInfo->snr_mode); 
 | 
            pAuvnrCtx->eParamMode = mode; 
 | 
            Auvnr_ConfigSettingParam_V1(pAuvnrCtx, pAuvnrCtx->eParamMode, pExpInfo->snr_mode); 
 | 
        } 
 | 
#endif 
 | 
  
 | 
        //select param 
 | 
        select_uvnr_params_by_ISO_v1(&pAuvnrCtx->stAuto.stParams, &pAuvnrCtx->stAuto.stSelect, pExpInfo); 
 | 
  
 | 
    } else if(pAuvnrCtx->eMode == AUVNR_OP_MODE_MANUAL) { 
 | 
        //TODO 
 | 
    } 
 | 
  
 | 
    memcpy(&pAuvnrCtx->stExpInfo, pExpInfo, sizeof(Auvnr_ExpInfo_t)); 
 | 
  
 | 
    LOGI_ANR("%s(%d): exit!\n", __FUNCTION__, __LINE__); 
 | 
    return AUVNR_RET_SUCCESS; 
 | 
  
 | 
} 
 | 
  
 | 
  
 | 
//anr get result 
 | 
Auvnr_result_t Auvnr_GetProcResult_V1(Auvnr_Context_V1_t *pAuvnrCtx, Auvnr_ProcResult_V1_t* pAuvnrResult) 
 | 
{ 
 | 
    LOGI_ANR("%s(%d): enter!\n", __FUNCTION__, __LINE__); 
 | 
  
 | 
    if(pAuvnrCtx == NULL) { 
 | 
        LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__); 
 | 
        return AUVNR_RET_INVALID_PARM; 
 | 
    } 
 | 
  
 | 
    if(pAuvnrResult == NULL) { 
 | 
        LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__); 
 | 
        return AUVNR_RET_INVALID_PARM; 
 | 
    } 
 | 
  
 | 
    if(pAuvnrCtx->eMode == AUVNR_OP_MODE_AUTO) { 
 | 
        pAuvnrResult->stSelect = pAuvnrCtx->stAuto.stSelect; 
 | 
        pAuvnrResult->uvnrEn = pAuvnrCtx->stAuto.uvnrEn; 
 | 
    } else if(pAuvnrCtx->eMode == AUVNR_OP_MODE_MANUAL) { 
 | 
        //TODO 
 | 
        pAuvnrResult->stSelect = pAuvnrCtx->stManual.stSelect; 
 | 
        pAuvnrResult->uvnrEn = pAuvnrCtx->stManual.uvnrEn; 
 | 
        pAuvnrCtx->fChrom_SF_Strength = 1.0; 
 | 
    } 
 | 
  
 | 
    //transfer to reg value 
 | 
    uvnr_fix_transfer_v1(&pAuvnrResult->stSelect, &pAuvnrResult->stFix,  &pAuvnrCtx->stExpInfo, pAuvnrCtx->stGainState.ratio, pAuvnrCtx->fChrom_SF_Strength); 
 | 
    pAuvnrResult->stFix.uvnr_en = pAuvnrResult->uvnrEn; 
 | 
  
 | 
    if(pAuvnrCtx->isGrayMode) { 
 | 
        //uvnr disable 
 | 
        pAuvnrResult->stFix.uvnr_step1_en = 0; 
 | 
        pAuvnrResult->stFix.uvnr_step2_en = 0; 
 | 
    } 
 | 
  
 | 
    if(pAuvnrCtx->mfnr_local_gain_en) { 
 | 
        pAuvnrResult->stFix.nr_gain_en = 0; 
 | 
    } else { 
 | 
        pAuvnrResult->stFix.nr_gain_en = 1; 
 | 
    } 
 | 
  
 | 
    LOGD_ANR("%s:%d xml:local:%d mode:%d  reg: local gain:%d  mfnr gain:%d mode:%d\n", 
 | 
             __FUNCTION__, __LINE__); 
 | 
  
 | 
    LOGI_ANR("%s(%d): exit!\n", __FUNCTION__, __LINE__); 
 | 
    return AUVNR_RET_SUCCESS; 
 | 
} 
 | 
  
 | 
Auvnr_result_t Auvnr_ConfigSettingParam_V1(Auvnr_Context_V1_t *pAuvnrCtx, Auvnr_ParamMode_t eParamMode, int snr_mode) 
 | 
{ 
 | 
    char snr_name[CALIBDB_NR_SHARP_NAME_LENGTH]; 
 | 
    char param_mode_name[CALIBDB_MAX_MODE_NAME_LENGTH]; 
 | 
    memset(param_mode_name, 0x00, sizeof(param_mode_name)); 
 | 
    memset(snr_name, 0x00, sizeof(snr_name)); 
 | 
  
 | 
    if(pAuvnrCtx == NULL) { 
 | 
        LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__); 
 | 
        return AUVNR_RET_INVALID_PARM; 
 | 
    } 
 | 
  
 | 
    //select param mode first 
 | 
    if(eParamMode == AUVNR_PARAM_MODE_NORMAL) { 
 | 
        sprintf(param_mode_name, "%s", "normal"); 
 | 
    } else if(eParamMode == AUVNR_PARAM_MODE_HDR) { 
 | 
        sprintf(param_mode_name, "%s", "hdr"); 
 | 
    } else if(eParamMode == AUVNR_PARAM_MODE_GRAY) { 
 | 
        sprintf(param_mode_name, "%s", "gray"); 
 | 
    } else { 
 | 
        LOGE_ANR("%s(%d): not support param mode!\n", __FUNCTION__, __LINE__); 
 | 
        sprintf(param_mode_name, "%s", "normal"); 
 | 
    } 
 | 
  
 | 
  
 | 
    //then select snr mode next 
 | 
    if(snr_mode == 1) { 
 | 
        sprintf(snr_name, "%s", "HSNR"); 
 | 
    } else if(snr_mode == 0) { 
 | 
        sprintf(snr_name, "%s", "LSNR"); 
 | 
    } else { 
 | 
        LOGE_ANR("%s(%d): not support snr mode!\n", __FUNCTION__, __LINE__); 
 | 
        sprintf(snr_name, "%s", "LSNR"); 
 | 
    } 
 | 
  
 | 
#if (AUVNR_USE_JSON_FILE_V1) 
 | 
    pAuvnrCtx->stAuto.uvnrEn = pAuvnrCtx->uvnr_v1.TuningPara.enable; 
 | 
    uvnr_config_setting_param_json_v1(&pAuvnrCtx->stAuto.stParams, &pAuvnrCtx->uvnr_v1, param_mode_name, snr_name); 
 | 
#else 
 | 
    pAuvnrCtx->stAuto.uvnrEn = pAuvnrCtx->stUvnrCalib.enable; 
 | 
    uvnr_config_setting_param_v1(&pAuvnrCtx->stAuto.stParams, &pAuvnrCtx->stUvnrCalib, param_mode_name, snr_name); 
 | 
#endif 
 | 
  
 | 
    return AUVNR_RET_SUCCESS; 
 | 
} 
 | 
  
 | 
Auvnr_result_t Auvnr_ParamModeProcess_V1(Auvnr_Context_V1_t *pAuvnrCtx, Auvnr_ExpInfo_t *pExpInfo, Auvnr_ParamMode_t *mode) { 
 | 
    Auvnr_result_t res  = AUVNR_RET_SUCCESS; 
 | 
    *mode = pAuvnrCtx->eParamMode; 
 | 
  
 | 
    if(pAuvnrCtx == NULL) { 
 | 
        LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__); 
 | 
        return AUVNR_RET_INVALID_PARM; 
 | 
    } 
 | 
  
 | 
    if(pAuvnrCtx->isGrayMode) { 
 | 
        *mode = AUVNR_PARAM_MODE_GRAY; 
 | 
    } else if(pExpInfo->hdr_mode == 0) { 
 | 
        *mode = AUVNR_PARAM_MODE_NORMAL; 
 | 
    } else if(pExpInfo->hdr_mode >= 1) { 
 | 
        *mode = AUVNR_PARAM_MODE_HDR; 
 | 
    } else { 
 | 
        *mode = AUVNR_PARAM_MODE_NORMAL; 
 | 
    } 
 | 
  
 | 
    return res; 
 | 
} 
 | 
  
 | 
  
 | 
RKAIQ_END_DECLARE 
 |