| 
  
 | 
#include "rk_aiq_abayernr_algo_bayernr_v2.h" 
 | 
  
 | 
RKAIQ_BEGIN_DECLARE 
 | 
  
 | 
Abayernr_result_t bayernr_get_mode_by_name_V2(struct list_head *pCalibdbList, char *name, CalibDb_Bayernr_V2_t** ppProfile) 
 | 
{ 
 | 
    int i = 0; 
 | 
    Abayernr_result_t res = ABAYERNR_RET_SUCCESS; 
 | 
  
 | 
    if(pCalibdbList == NULL) { 
 | 
        LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__); 
 | 
        return ABAYERNR_RET_NULL_POINTER; 
 | 
    } 
 | 
  
 | 
    if(name == NULL) { 
 | 
        LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__); 
 | 
        return ABAYERNR_RET_NULL_POINTER; 
 | 
    } 
 | 
  
 | 
    if(ppProfile == NULL) { 
 | 
        LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__); 
 | 
        return ABAYERNR_RET_NULL_POINTER; 
 | 
    } 
 | 
  
 | 
#if 1 
 | 
    *ppProfile = NULL; 
 | 
    struct list_head* p; 
 | 
    p = pCalibdbList->next; 
 | 
    while (p != pCalibdbList) 
 | 
    { 
 | 
        CalibDb_Bayernr_V2_t* pProfile = container_of(p, CalibDb_Bayernr_V2_t, listItem); 
 | 
        LOGE_ANR("%s:%d %s  %p \n", 
 | 
                 __FUNCTION__, __LINE__, pProfile->modeName, p); 
 | 
        if (!strncmp(pProfile->modeName, name, sizeof(pProfile->modeName))) { 
 | 
            *ppProfile = pProfile; 
 | 
            return res; 
 | 
        } 
 | 
        p = p->next; 
 | 
    } 
 | 
  
 | 
    CalibDb_Bayernr_V2_t* pProfile = container_of(pCalibdbList->next, CalibDb_Bayernr_V2_t, listItem); 
 | 
    *ppProfile = pProfile; 
 | 
#else 
 | 
  
 | 
  
 | 
#endif 
 | 
  
 | 
    return res; 
 | 
  
 | 
} 
 | 
  
 | 
Abayernr_result_t bayernr2D_get_setting_by_name_V2(struct list_head *pSettingList, char *name, Calibdb_Bayernr_2Dparams_V2_t** ppSetting) 
 | 
{ 
 | 
    int i = 0; 
 | 
    Abayernr_result_t res = ABAYERNR_RET_SUCCESS; 
 | 
  
 | 
    if(pSettingList == NULL) { 
 | 
        LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__); 
 | 
        return ABAYERNR_RET_NULL_POINTER; 
 | 
    } 
 | 
  
 | 
    if(name == NULL) { 
 | 
        LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__); 
 | 
        return ABAYERNR_RET_NULL_POINTER; 
 | 
    } 
 | 
  
 | 
    if(ppSetting == NULL) { 
 | 
        LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__); 
 | 
        return ABAYERNR_RET_NULL_POINTER; 
 | 
    } 
 | 
  
 | 
    *ppSetting = NULL; 
 | 
  
 | 
    struct list_head* p; 
 | 
    p = pSettingList->next; 
 | 
    while (p != pSettingList) 
 | 
    { 
 | 
        Calibdb_Bayernr_2Dparams_V2_t* pSetting = container_of(p, Calibdb_Bayernr_2Dparams_V2_t, listItem); 
 | 
        LOGD_ANR("%s:%d:  %s  %p ", 
 | 
                 __FUNCTION__, __LINE__, pSetting->snr_mode, p); 
 | 
        if (!strncmp(pSetting->snr_mode, name, sizeof(pSetting->snr_mode))) { 
 | 
            *ppSetting = pSetting; 
 | 
            return res; 
 | 
        } 
 | 
        p = p->next; 
 | 
    } 
 | 
  
 | 
    Calibdb_Bayernr_2Dparams_V2_t* pSetting = container_of(pSettingList->next, Calibdb_Bayernr_2Dparams_V2_t, listItem); 
 | 
    *ppSetting = pSetting; 
 | 
    return res; 
 | 
  
 | 
} 
 | 
  
 | 
Abayernr_result_t bayernr3D_get_setting_by_name_V2(struct list_head *pSettingList, char *name, CalibDb_Bayernr_3DParams_V2_t** ppSetting) 
 | 
{ 
 | 
    int i = 0; 
 | 
    Abayernr_result_t res = ABAYERNR_RET_SUCCESS; 
 | 
  
 | 
    if(pSettingList == NULL) { 
 | 
        LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__); 
 | 
        return ABAYERNR_RET_NULL_POINTER; 
 | 
    } 
 | 
  
 | 
    if(name == NULL) { 
 | 
        LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__); 
 | 
        return ABAYERNR_RET_NULL_POINTER; 
 | 
    } 
 | 
  
 | 
    if(ppSetting == NULL) { 
 | 
        LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__); 
 | 
        return ABAYERNR_RET_NULL_POINTER; 
 | 
    } 
 | 
  
 | 
    *ppSetting = NULL; 
 | 
  
 | 
    struct list_head* p; 
 | 
    p = pSettingList->next; 
 | 
    while (p != pSettingList) 
 | 
    { 
 | 
        CalibDb_Bayernr_3DParams_V2_t* pSetting = container_of(p, CalibDb_Bayernr_3DParams_V2_t, listItem); 
 | 
        LOGD_ANR("%s:%d %s  %p ", 
 | 
                 __FUNCTION__, __LINE__, pSetting->snr_mode, p); 
 | 
        if (!strncmp(pSetting->snr_mode, name, sizeof(pSetting->snr_mode))) { 
 | 
            *ppSetting = pSetting; 
 | 
            return res; 
 | 
        } 
 | 
        p = p->next; 
 | 
    } 
 | 
  
 | 
    CalibDb_Bayernr_3DParams_V2_t* pSetting = container_of(pSettingList->next, CalibDb_Bayernr_3DParams_V2_t, listItem); 
 | 
    *ppSetting = pSetting; 
 | 
  
 | 
    return res; 
 | 
  
 | 
} 
 | 
  
 | 
  
 | 
  
 | 
Abayernr_result_t bayernr2D_config_setting_param_V2(RK_Bayernr_2D_Params_V2_t *pParams, struct list_head *pCalibdbList, char* param_mode, char * snr_name) 
 | 
{ 
 | 
    Abayernr_result_t res = ABAYERNR_RET_SUCCESS; 
 | 
    CalibDb_Bayernr_V2_t *pProfile; 
 | 
    Calibdb_Bayernr_2Dparams_V2_t* p2DParams; 
 | 
  
 | 
    LOGI_ANR("%s(%d): enter\n", __FUNCTION__, __LINE__); 
 | 
    if(pParams == NULL) { 
 | 
        LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__); 
 | 
        return ABAYERNR_RET_NULL_POINTER; 
 | 
    } 
 | 
  
 | 
    if(pCalibdbList == NULL) { 
 | 
        LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__); 
 | 
        return ABAYERNR_RET_NULL_POINTER; 
 | 
    } 
 | 
  
 | 
    if(param_mode == NULL) { 
 | 
        LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__); 
 | 
        return ABAYERNR_RET_NULL_POINTER; 
 | 
    } 
 | 
  
 | 
    if(snr_name == NULL) { 
 | 
        LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__); 
 | 
        return ABAYERNR_RET_NULL_POINTER; 
 | 
    } 
 | 
  
 | 
    res = bayernr_get_mode_by_name_V2(pCalibdbList, param_mode, &pProfile); 
 | 
    if(res != ABAYERNR_RET_SUCCESS) { 
 | 
        LOGW_ANR("%s(%d): error!!!  can't find mode name in iq files, use 0 instead\n", __FUNCTION__, __LINE__); 
 | 
    } 
 | 
  
 | 
    res = bayernr2D_get_setting_by_name_V2(&pProfile->st2DParams.listHead, snr_name, &p2DParams); 
 | 
    if(res != ABAYERNR_RET_SUCCESS) { 
 | 
        LOGW_ANR("%s(%d): error!!!  can't find setting in iq files, use 0 instead\n", __FUNCTION__, __LINE__); 
 | 
    } 
 | 
  
 | 
    res = bayernr2D_init_params_V2(pParams, p2DParams); 
 | 
    pParams->bayernrv2_2dnr_enable = pProfile->st2DParams.bayernrv2_2dnr_enable; 
 | 
  
 | 
    LOGI_ANR("%s(%d): exit\n", __FUNCTION__, __LINE__); 
 | 
    return res; 
 | 
  
 | 
} 
 | 
  
 | 
Abayernr_result_t bayernr3D_config_setting_param_V2(RK_Bayernr_3D_Params_V2_t *pParams, struct list_head *pCalibdbList, char* param_mode, char * snr_name) 
 | 
{ 
 | 
    Abayernr_result_t res = ABAYERNR_RET_SUCCESS; 
 | 
    CalibDb_Bayernr_V2_t *pProfile; 
 | 
    CalibDb_Bayernr_3DParams_V2_t* p3DParams; 
 | 
  
 | 
    if(pParams == NULL) { 
 | 
        LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__); 
 | 
        return ABAYERNR_RET_NULL_POINTER; 
 | 
    } 
 | 
  
 | 
    if(pCalibdbList == NULL) { 
 | 
        LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__); 
 | 
        return ABAYERNR_RET_NULL_POINTER; 
 | 
    } 
 | 
  
 | 
    if(param_mode == NULL) { 
 | 
        LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__); 
 | 
        return ABAYERNR_RET_NULL_POINTER; 
 | 
    } 
 | 
  
 | 
    if(snr_name == NULL) { 
 | 
        LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__); 
 | 
        return ABAYERNR_RET_NULL_POINTER; 
 | 
    } 
 | 
  
 | 
    res = bayernr_get_mode_by_name_V2(pCalibdbList, param_mode, &pProfile); 
 | 
    if(res != ABAYERNR_RET_SUCCESS) { 
 | 
        LOGW_ANR("%s(%d): error!!!  can't find mode name in iq files, use 0 instead\n", __FUNCTION__, __LINE__); 
 | 
    } 
 | 
  
 | 
    res = bayernr3D_get_setting_by_name_V2(&pProfile->st3DParams.listHead, snr_name, &p3DParams); 
 | 
    if(res != ABAYERNR_RET_SUCCESS) { 
 | 
        LOGW_ANR("%s(%d): error!!!  can't find setting in iq files, use 0 instead\n", __FUNCTION__, __LINE__); 
 | 
  
 | 
    } 
 | 
  
 | 
    res = bayernr3D_init_params_V2(pParams, p3DParams); 
 | 
    pParams->bayernrv2_tnr_enable = pProfile->st3DParams.bayernrv2_tnr_enable; 
 | 
    return res; 
 | 
  
 | 
} 
 | 
  
 | 
  
 | 
Abayernr_result_t bayernr2D_init_params_V2(RK_Bayernr_2D_Params_V2_t *pParams, Calibdb_Bayernr_2Dparams_V2_t* pCalibdbParams) 
 | 
{ 
 | 
    Abayernr_result_t res = ABAYERNR_RET_SUCCESS; 
 | 
    int i = 0; 
 | 
    int j = 0; 
 | 
  
 | 
    LOGI_ANR("%s:(%d) oyyf bayerner xml config start\n", __FUNCTION__, __LINE__); 
 | 
    if(pParams == NULL) { 
 | 
        LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__); 
 | 
        return ABAYERNR_RET_NULL_POINTER; 
 | 
    } 
 | 
  
 | 
    if(pCalibdbParams == NULL) { 
 | 
        LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__); 
 | 
        return ABAYERNR_RET_NULL_POINTER; 
 | 
    } 
 | 
  
 | 
    for(int i = 0; i < RK_BAYERNR_V2_MAX_ISO_NUM; i++) { 
 | 
        pParams->iso[i] = pCalibdbParams->iso[i]; 
 | 
        pParams->bayernrv2_filter_strength_r[i] = pCalibdbParams->bayernrv2_filter_strength_r[i]; 
 | 
        pParams->bayernrv2_filter_edgesofts_r[i] = pCalibdbParams->bayernrv2_filter_edgesofts_r[i]; 
 | 
        pParams->bayernrv2_filter_out_wgt_r[i] = pCalibdbParams->bayernrv2_filter_out_wgt_r[i]; 
 | 
        pParams->bayernrv2_filter_soft_threshold_ratio_r[i] = pCalibdbParams->bayernrv2_filter_soft_threshold_ratio_r[i]; 
 | 
        pParams->bayernrv2_gauss_guide_r[i] = pCalibdbParams->bayernrv2_gauss_guide_r[i]; 
 | 
  
 | 
        for(int k = 0; k < 8; k++) { 
 | 
            pParams->bayernrv2_edge_filter_wgt_r[i][k] = pCalibdbParams->bayernrv2_edge_filter_wgt_r[i][k]; 
 | 
        } 
 | 
        for(int k = 0; k < 16; k++) { 
 | 
            pParams->bayernrv2_filter_sigma_r[i][k] = pCalibdbParams->bayernrv2_filter_sigma_r[i][k]; 
 | 
        } 
 | 
    } 
 | 
  
 | 
    for(int i = 0; i < 8; i++) { 
 | 
        pParams->bayernrv2_edge_filter_lumapoint_r[i] = pCalibdbParams->bayernrv2_edge_filter_lumapoint_r[i]; 
 | 
    } 
 | 
  
 | 
    for(int i = 0; i < 16; i++) { 
 | 
        pParams->bayernrv2_filter_lumapoint_r[i] = pCalibdbParams->bayernrv2_filter_lumapoint_r[i]; 
 | 
    } 
 | 
  
 | 
    LOGI_ANR("%s:(%d) oyyf bayerner xml config end!   \n", __FUNCTION__, __LINE__); 
 | 
  
 | 
    return res; 
 | 
} 
 | 
  
 | 
Abayernr_result_t bayernr3D_init_params_V2(RK_Bayernr_3D_Params_V2_t *pParams, CalibDb_Bayernr_3DParams_V2_t* pCalibdbParams) 
 | 
{ 
 | 
    Abayernr_result_t res = ABAYERNR_RET_SUCCESS; 
 | 
    int i = 0; 
 | 
    int j = 0; 
 | 
  
 | 
    LOGI_ANR("%s:(%d) oyyf bayerner xml config start\n", __FUNCTION__, __LINE__); 
 | 
    if(pParams == NULL) { 
 | 
        LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__); 
 | 
        return ABAYERNR_RET_NULL_POINTER; 
 | 
    } 
 | 
  
 | 
    if(pCalibdbParams == NULL) { 
 | 
        LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__); 
 | 
        return ABAYERNR_RET_NULL_POINTER; 
 | 
    } 
 | 
  
 | 
    for(int i = 0; i < RK_BAYERNR_V2_MAX_ISO_NUM; i++) { 
 | 
        pParams->iso[i] = pCalibdbParams->iso[i]; 
 | 
        pParams->bayernrv2_tnr_filter_strength_r[i] = pCalibdbParams->bayernrv2_tnr_filter_strength_r[i]; 
 | 
        pParams->bayernrv2_tnr_lo_clipwgt_r[i] = pCalibdbParams->bayernrv2_tnr_lo_clipwgt_r[i]; 
 | 
        pParams->bayernrv2_tnr_hi_clipwgt_r[i] = pCalibdbParams->bayernrv2_tnr_hi_clipwgt_r[i]; 
 | 
        pParams->bayernrv2_tnr_softwgt_r[i] = pCalibdbParams->bayernrv2_tnr_softwgt_r[i]; 
 | 
  
 | 
        for(int k = 0; k < 16; k++) { 
 | 
            pParams->bayernrv2_sigma_r[i][k] = pCalibdbParams->bayernrv2_sigma_r[i][k]; 
 | 
        } 
 | 
  
 | 
    } 
 | 
  
 | 
    for(int i = 0; i < 16; i++) { 
 | 
        pParams->bayernrv2_lumapoint_r[i] = pCalibdbParams->bayernrv2_lumapoint_r[i]; 
 | 
    } 
 | 
  
 | 
    LOGI_ANR("%s:(%d) oyyf bayerner xml config end!   \n", __FUNCTION__, __LINE__); 
 | 
  
 | 
    return res; 
 | 
} 
 | 
  
 | 
  
 | 
Abayernr_result_t bayernr2D_select_params_by_ISO_V2(RK_Bayernr_2D_Params_V2_t *pParams, RK_Bayernr_2D_Params_V2_Select_t *pSelect, Abayernr_ExpInfo_t *pExpInfo) 
 | 
{ 
 | 
    Abayernr_result_t res = ABAYERNR_RET_SUCCESS; 
 | 
    int iso = 50; 
 | 
  
 | 
    if(pParams == NULL) { 
 | 
        LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__); 
 | 
        return ABAYERNR_RET_NULL_POINTER; 
 | 
    } 
 | 
  
 | 
    if(pSelect == NULL) { 
 | 
        LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__); 
 | 
        return ABAYERNR_RET_NULL_POINTER; 
 | 
    } 
 | 
  
 | 
    if(pExpInfo == NULL) { 
 | 
        LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__); 
 | 
        return ABAYERNR_RET_NULL_POINTER; 
 | 
    } 
 | 
  
 | 
    iso = pExpInfo->arIso[pExpInfo->hdr_mode]; 
 | 
  
 | 
    LOGD_ANR("%s:%d iso:%d \n", __FUNCTION__, __LINE__, iso); 
 | 
  
 | 
    int isoGainStd[RK_BAYERNR_V2_MAX_ISO_NUM]; 
 | 
    int isoGain = MAX(int(iso / 50), 1); 
 | 
    int isoGainLow = 0; 
 | 
    int isoGainHig = 0; 
 | 
    int isoGainCorrect = 1; 
 | 
    int isoLevelLow = 0; 
 | 
    int isoLevelHig = 0; 
 | 
    int isoLevelCorrect = 0; 
 | 
    int i, j; 
 | 
    float tmpf; 
 | 
  
 | 
#ifndef RK_SIMULATOR_HW 
 | 
    for(int i = 0; i < RK_BAYERNR_V2_MAX_ISO_NUM; i++) { 
 | 
        isoGainStd[i] = pParams->iso[i] / 50; 
 | 
    } 
 | 
#else 
 | 
    for(int i = 0; i < RK_BAYERNR_V2_MAX_ISO_NUM; i++) { 
 | 
        isoGainStd[i] = 1 * (1 << i); 
 | 
    } 
 | 
#endif 
 | 
  
 | 
    for (i = 0; i < RK_BAYERNR_V2_MAX_ISO_NUM - 1; i++) 
 | 
    { 
 | 
        if (isoGain >= isoGainStd[i] && isoGain <= isoGainStd[i + 1]) 
 | 
        { 
 | 
            isoGainLow = isoGainStd[i]; 
 | 
            isoGainHig = isoGainStd[i + 1]; 
 | 
            isoLevelLow = i; 
 | 
            isoLevelHig = i + 1; 
 | 
            isoGainCorrect = ((isoGain - isoGainStd[i]) <= (isoGainStd[i + 1] - isoGain)) ? isoGainStd[i] : isoGainStd[i + 1]; 
 | 
            isoLevelCorrect = ((isoGain - isoGainStd[i]) <= (isoGainStd[i + 1] - isoGain)) ? i : (i + 1); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    LOGD_ANR("%s:%d iso:%d high:%d low:%d\n", 
 | 
             __FUNCTION__, __LINE__, 
 | 
             isoGain, isoGainHig, isoGainLow); 
 | 
  
 | 
    pSelect->bayernrv2_2dnr_enable = pParams->bayernrv2_2dnr_enable; 
 | 
  
 | 
    for (i = 0; i < 8; i++) 
 | 
    { 
 | 
        pSelect->bayernrv2_edge_filter_lumapoint[i] = pParams->bayernrv2_edge_filter_lumapoint_r[i]; 
 | 
        pSelect->bayernrv2_edge_filter_wgt[i] = float(isoGainHig - isoGain) / float(isoGainHig - isoGainLow) * pParams->bayernrv2_edge_filter_wgt_r[isoLevelLow][i] 
 | 
                                                + float(isoGain - isoGainLow) / float(isoGainHig - isoGainLow) * pParams->bayernrv2_edge_filter_wgt_r[isoLevelHig][i]; 
 | 
    } 
 | 
  
 | 
    pSelect->bayernrv2_filter_strength = float(isoGainHig - isoGain) / float(isoGainHig - isoGainLow) * pParams->bayernrv2_filter_strength_r[isoLevelLow] 
 | 
                                         + float(isoGain - isoGainLow) / float(isoGainHig - isoGainLow) * pParams->bayernrv2_filter_strength_r[isoLevelHig]; 
 | 
  
 | 
    tmpf = float(isoGainHig - isoGain) / float(isoGainHig - isoGainLow) * pParams->bayernrv2_gauss_guide_r[isoLevelLow] 
 | 
           + float(isoGain - isoGainLow) / float(isoGainHig - isoGainLow) * pParams->bayernrv2_gauss_guide_r[isoLevelHig]; 
 | 
    pSelect->bayernrv2_gauss_guide = tmpf != 0; 
 | 
  
 | 
    for (i = 0; i < 16; i++) 
 | 
    { 
 | 
        pSelect->bayernrv2_filter_lumapoint[i] = pParams->bayernrv2_filter_lumapoint_r[i]; 
 | 
        pSelect->bayernrv2_filter_sigma[i] = float(isoGainHig - isoGain) / float(isoGainHig - isoGainLow) * pParams->bayernrv2_filter_sigma_r[isoLevelLow][i] 
 | 
                                             + float(isoGain - isoGainLow) / float(isoGainHig - isoGainLow) * pParams->bayernrv2_filter_sigma_r[isoLevelHig][i]; 
 | 
    } 
 | 
  
 | 
    pSelect->bayernrv2_filter_edgesofts = float(isoGainHig - isoGain) / float(isoGainHig - isoGainLow) * pParams->bayernrv2_filter_edgesofts_r[isoLevelLow] 
 | 
                                          + float(isoGain - isoGainLow) / float(isoGainHig - isoGainLow) * pParams->bayernrv2_filter_edgesofts_r[isoLevelHig]; 
 | 
    pSelect->bayernrv2_filter_soft_threshold_ratio = float(isoGainHig - isoGain) / float(isoGainHig - isoGainLow) * pParams->bayernrv2_filter_soft_threshold_ratio_r[isoLevelLow] 
 | 
            + float(isoGain - isoGainLow) / float(isoGainHig - isoGainLow) * pParams->bayernrv2_filter_soft_threshold_ratio_r[isoLevelHig]; 
 | 
    pSelect->bayernrv2_filter_out_wgt = float(isoGainHig - isoGain) / float(isoGainHig - isoGainLow) * pParams->bayernrv2_filter_out_wgt_r[isoLevelLow] 
 | 
                                        + float(isoGain - isoGainLow) / float(isoGainHig - isoGainLow) * pParams->bayernrv2_filter_out_wgt_r[isoLevelHig]; 
 | 
  
 | 
  
 | 
    pSelect->bayernrv2_edge_filter_en = 0; 
 | 
  
 | 
    return res; 
 | 
} 
 | 
  
 | 
  
 | 
  
 | 
  
 | 
Abayernr_result_t bayernr3D_select_params_by_ISO_V2(RK_Bayernr_3D_Params_V2_t *pParams, RK_Bayernr_3D_Params_V2_Select_t *pSelect, Abayernr_ExpInfo_t *pExpInfo) 
 | 
{ 
 | 
    Abayernr_result_t res = ABAYERNR_RET_SUCCESS; 
 | 
    int iso = 50; 
 | 
  
 | 
    if(pParams == NULL) { 
 | 
        LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__); 
 | 
        return ABAYERNR_RET_NULL_POINTER; 
 | 
    } 
 | 
  
 | 
    if(pSelect == NULL) { 
 | 
        LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__); 
 | 
        return ABAYERNR_RET_NULL_POINTER; 
 | 
    } 
 | 
  
 | 
    if(pExpInfo == NULL) { 
 | 
        LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__); 
 | 
        return ABAYERNR_RET_NULL_POINTER; 
 | 
    } 
 | 
  
 | 
    iso = pExpInfo->arIso[pExpInfo->hdr_mode]; 
 | 
  
 | 
    LOGD_ANR("%s:%d iso:%d \n", __FUNCTION__, __LINE__, iso); 
 | 
  
 | 
    int isoGainStd[RK_BAYERNR_V2_MAX_ISO_NUM]; 
 | 
    int isoGain = MAX(int(iso / 50), 1); 
 | 
    int isoGainLow = 0; 
 | 
    int isoGainHig = 0; 
 | 
    int isoGainCorrect = 1; 
 | 
    int isoLevelLow = 0; 
 | 
    int isoLevelHig = 0; 
 | 
    int isoLevelCorrect = 0; 
 | 
    int i, j; 
 | 
    float tmpf; 
 | 
  
 | 
#ifndef RK_SIMULATOR_HW 
 | 
    for(int i = 0; i < RK_BAYERNR_V2_MAX_ISO_NUM; i++) { 
 | 
        isoGainStd[i] = pParams->iso[i] / 50; 
 | 
    } 
 | 
#else 
 | 
    for(int i = 0; i < RK_BAYERNR_V2_MAX_ISO_NUM; i++) { 
 | 
        isoGainStd[i] = 1 * (1 << i); 
 | 
    } 
 | 
#endif 
 | 
  
 | 
    for (i = 0; i < RK_BAYERNR_V2_MAX_ISO_NUM - 1; i++) { 
 | 
        if (isoGain >= isoGainStd[i] && isoGain <= isoGainStd[i + 1]) { 
 | 
            isoGainLow = isoGainStd[i]; 
 | 
            isoGainHig = isoGainStd[i + 1]; 
 | 
            isoLevelLow = i; 
 | 
            isoLevelHig = i + 1; 
 | 
            isoGainCorrect = ((isoGain - isoGainStd[i]) <= (isoGainStd[i + 1] - isoGain)) ? isoGainStd[i] : isoGainStd[i + 1]; 
 | 
            isoLevelCorrect = ((isoGain - isoGainStd[i]) <= (isoGainStd[i + 1] - isoGain)) ? i : (i + 1); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    LOGD_ANR("%s:%d iso:%d high:%d low:%d\n", 
 | 
             __FUNCTION__, __LINE__, 
 | 
             isoGain, isoGainHig, isoGainLow); 
 | 
  
 | 
    pSelect->bayernrv2_tnr_enable = pParams->bayernrv2_tnr_enable; 
 | 
  
 | 
    pSelect->bayernrv2_tnr_filter_strength = float(isoGainHig - isoGain) / float(isoGainHig - isoGainLow) * pParams->bayernrv2_tnr_filter_strength_r[isoLevelLow] 
 | 
            + float(isoGain - isoGainLow) / float(isoGainHig - isoGainLow) * pParams->bayernrv2_tnr_filter_strength_r[isoLevelHig]; 
 | 
    pSelect->bayernrv2_tnr_lo_clipwgt = float(isoGainHig - isoGain) / float(isoGainHig - isoGainLow) * pParams->bayernrv2_tnr_lo_clipwgt_r[isoLevelLow] 
 | 
                                        + float(isoGain - isoGainLow) / float(isoGainHig - isoGainLow) * pParams->bayernrv2_tnr_lo_clipwgt_r[isoLevelHig]; 
 | 
    pSelect->bayernrv2_tnr_hi_clipwgt = float(isoGainHig - isoGain) / float(isoGainHig - isoGainLow) * pParams->bayernrv2_tnr_hi_clipwgt_r[isoLevelLow] 
 | 
                                        + float(isoGain - isoGainLow) / float(isoGainHig - isoGainLow) * pParams->bayernrv2_tnr_hi_clipwgt_r[isoLevelHig]; 
 | 
    pSelect->bayernrv2_tnr_softwgt    = float(isoGainHig - isoGain) / float(isoGainHig - isoGainLow) * pParams->bayernrv2_tnr_softwgt_r[isoLevelLow] 
 | 
                                        + float(isoGain - isoGainLow) / float(isoGainHig - isoGainLow) * pParams->bayernrv2_tnr_softwgt_r[isoLevelHig]; 
 | 
  
 | 
    for (i = 0; i < 16; i++) { 
 | 
        pSelect->bayernrv2_tnr_lumapoint[i] = pParams->bayernrv2_lumapoint_r[i]; 
 | 
        pSelect->bayernrv2_tnr_sigma[i] = float(isoGainHig - isoGain) / float(isoGainHig - isoGainLow) * pParams->bayernrv2_sigma_r[isoLevelLow][i] 
 | 
                                          + float(isoGain - isoGainLow) / float(isoGainHig - isoGainLow) * pParams->bayernrv2_sigma_r[isoLevelHig][i]; 
 | 
    } 
 | 
  
 | 
    return res; 
 | 
} 
 | 
  
 | 
  
 | 
unsigned short bayernr_get_trans_V2(int tmpfix) 
 | 
{ 
 | 
    int logtablef[65] = {0, 1465, 2909, 4331, 5731, 7112, 8472, 9813, 11136, 12440, 
 | 
                         13726, 14995, 16248, 17484, 18704, 19908, 21097, 22272, 23432, 24578, 25710, 
 | 
                         26829, 27935, 29028, 30109, 31177, 32234, 33278, 34312, 35334, 36345, 37346, 
 | 
                         38336, 39315, 40285, 41245, 42195, 43136, 44068, 44990, 45904, 46808, 47704, 
 | 
                         48592, 49472, 50343, 51207, 52062, 52910, 53751, 54584, 55410, 56228, 57040, 
 | 
                         57844, 58642, 59433, 60218, 60996, 61768, 62534, 63293, 64047, 64794, 65536 
 | 
                        }; 
 | 
    int logprecision = 6; 
 | 
    int logfixbit = 16; 
 | 
    int logtblbit = 16; 
 | 
    int logscalebit = 12; 
 | 
    int logfixmul = (1 << logfixbit); 
 | 
    long long x8, one = 1; 
 | 
    long long gx, n = 0, ix1, ix2, dp; 
 | 
    long long lt1, lt2, dx, fx; 
 | 
    int i, j = 1; 
 | 
  
 | 
    x8 = tmpfix + (1 << 8); 
 | 
    // find highest bit 
 | 
    for (i = 0; i < 32; i++) 
 | 
    { 
 | 
        if (x8 & j) 
 | 
        { 
 | 
            n = i; 
 | 
        } 
 | 
        j = j << 1; 
 | 
    } 
 | 
  
 | 
    gx = x8 - (one << n); 
 | 
    gx = gx * (one << logprecision) * logfixmul; 
 | 
    gx = gx / (one << n); 
 | 
  
 | 
    ix1 = gx >> logfixbit; 
 | 
    dp = gx - ix1 * logfixmul; 
 | 
  
 | 
    ix2 = ix1 + 1; 
 | 
  
 | 
    lt1 = logtablef[ix1]; 
 | 
    lt2 = logtablef[ix2]; 
 | 
  
 | 
    dx = lt1 * (logfixmul - dp) + lt2 * dp; 
 | 
  
 | 
    fx = dx + (n - 8) * (one << (logfixbit + logtblbit)); 
 | 
    fx = fx + (one << (logfixbit + logtblbit - logscalebit - 1)); 
 | 
    fx = fx >> (logfixbit + logtblbit - logscalebit); 
 | 
  
 | 
    return fx; 
 | 
} 
 | 
  
 | 
Abayernr_result_t bayernr2D_fix_transfer_V2(RK_Bayernr_2D_Params_V2_Select_t* pSelect, RK_Bayernr_2D_Fix_V2_t *pFix, float fStrength, Abayernr_ExpInfo_t *pExpInfo) 
 | 
{ 
 | 
    //--------------------------- v2 params ----------------------------// 
 | 
    float frameiso[3]; 
 | 
    float frameEt[3]; 
 | 
    float fdGain[3]; 
 | 
    int dGain[3] = {0}; 
 | 
    int i = 0; 
 | 
    int ypos[8] = {4, 4, 4, 3, 3, 2, 2, 1}; 
 | 
    int xpos[8] = {4, 2, 0, 3, 1, 2, 0, 1}; 
 | 
    float tmp1, tmp2, edgesofts; 
 | 
    int bayernr_sw_bil_gauss_weight[16]; 
 | 
    int tmp; 
 | 
  
 | 
    if(pSelect == NULL) { 
 | 
        LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__); 
 | 
        return ABAYERNR_RET_NULL_POINTER; 
 | 
    } 
 | 
  
 | 
    if(pFix == NULL) { 
 | 
        LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__); 
 | 
        return ABAYERNR_RET_NULL_POINTER; 
 | 
    } 
 | 
  
 | 
    if(pExpInfo == NULL) { 
 | 
        LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__); 
 | 
        return ABAYERNR_RET_NULL_POINTER; 
 | 
    } 
 | 
  
 | 
    if(fStrength <= 0.0f) { 
 | 
        fStrength = 0.000001; 
 | 
    } 
 | 
  
 | 
    // hdr gain 
 | 
    int framenum = pExpInfo->hdr_mode + 1; 
 | 
  
 | 
    frameiso[0] = pExpInfo->arIso[0]; 
 | 
    frameiso[1] = pExpInfo->arIso[1]; 
 | 
    frameiso[2] = pExpInfo->arIso[2]; 
 | 
  
 | 
    frameEt[0] = pExpInfo->arTime[0]; 
 | 
    frameEt[1] = pExpInfo->arTime[1]; 
 | 
    frameEt[2] = pExpInfo->arTime[2]; 
 | 
  
 | 
  
 | 
    for (i = 0; i < framenum; i++) { 
 | 
        fdGain[i] = frameiso[i] * frameEt[i]; 
 | 
        LOGD_ANR("bayernrv2 idx[%d] iso:%f time:%f dgain:%f\n", 
 | 
                 i, frameiso[i], frameEt[i], fdGain[i]); 
 | 
    } 
 | 
  
 | 
    for (i = 0; i < framenum; i++) { 
 | 
        fdGain[i] = fdGain[framenum - 1] / fdGain[i]; 
 | 
        dGain[i] = int(fdGain[i] * (1 << FIXNLMCALC)); 
 | 
        LOGD_ANR("bayernrv2 idx[%d] fdgain:%f dgain:%d \n", 
 | 
                 i, fdGain[i], dGain[i]); 
 | 
    } 
 | 
  
 | 
    //ISP_BAYNR_3A00_CTRL 
 | 
    pFix->baynr_gauss_en = pSelect->bayernrv2_gauss_guide; 
 | 
    pFix->baynr_log_bypass = 0; 
 | 
    pFix->baynr_en = pSelect->bayernrv2_2dnr_enable; 
 | 
  
 | 
    //pFix->bayernr_gray_mode = 0; 
 | 
  
 | 
  
 | 
    // ISP_BAYNR_3A00_DGAIN0-2 
 | 
    for(i = 0; i < framenum; i++) { 
 | 
        tmp = dGain[i] / ( 1 << (FIXNLMCALC - FIXGAINBIT)); 
 | 
        pFix->baynr_dgain[i] = CLIP(tmp, 0, 0xffff); 
 | 
    } 
 | 
  
 | 
    // ISP_BAYNR_3A00_PIXDIFF 
 | 
    tmp = FIXDIFMAX - 1; 
 | 
    pFix->baynr_pix_diff = CLIP(tmp, 0, 0x3fff); 
 | 
  
 | 
    // ISP_BAYNR_3A00_THLD 
 | 
    tmp = LUTPRECISION_FIX; 
 | 
    pFix->baynr_diff_thld = CLIP(tmp, 0, 0x3ff); 
 | 
    tmp = (int)(pSelect->bayernrv2_filter_soft_threshold_ratio / fStrength * (1 << 10)); 
 | 
    pFix->baynr_softthld = CLIP(tmp, 0, 0x3ff); 
 | 
  
 | 
    // ISP_BAYNR_3A00_W1_STRENG 
 | 
    tmp = (int)(pSelect->bayernrv2_filter_strength * fStrength * (1 << FIXBILSTRG)); 
 | 
    pFix->bltflt_streng = CLIP(tmp, 0, 0xfff); 
 | 
    tmp = (int)(pSelect->bayernrv2_filter_out_wgt * fStrength * (1 << 10)); 
 | 
    pFix->baynr_reg_w1 = CLIP(tmp, 0, 0x3ff); 
 | 
  
 | 
    // ISP_BAYNR_3A00_SIGMAX0-15   ISP_BAYNR_3A00_SIGMAY0-15 
 | 
    for(i = 0; i < 16; i++) { 
 | 
        //pFix->sigma_x[i] = bayernr_get_trans_V2(pSelect->bayernrv2_filter_lumapoint[i]); 
 | 
        tmp = pSelect->bayernrv2_filter_lumapoint[i]; 
 | 
        pFix->sigma_x[i] = CLIP(tmp, 0, 0xffff); 
 | 
        tmp = pSelect->bayernrv2_filter_sigma[i]; 
 | 
        pFix->sigma_y[i] = CLIP(tmp, 0, 0xffff); 
 | 
    } 
 | 
  
 | 
    // ISP_BAYNR_3A00_WRIT_D 
 | 
#if 0 
 | 
    pFix->weit_d[0] = 0x178; 
 | 
    pFix->weit_d[1] = 0x249; 
 | 
    pFix->weit_d[2] = 0x31d; 
 | 
#else 
 | 
    edgesofts = pSelect->bayernrv2_filter_edgesofts; 
 | 
    for(i = 0; i < 8; i++) 
 | 
    { 
 | 
        tmp1 = (float)(ypos[i] * ypos[i] + xpos[i] * xpos[i]); 
 | 
        tmp1 = tmp1 / (2 * edgesofts * edgesofts); 
 | 
        tmp2 = expf(-tmp1); 
 | 
        bayernr_sw_bil_gauss_weight[i] = (int)(tmp1 * (EXP2RECISION_FIX / (1 << 7))); 
 | 
        bayernr_sw_bil_gauss_weight[i + 8] = (int)(tmp2 * (1 << FIXVSTINV)); 
 | 
    } 
 | 
  
 | 
    if(0) { 
 | 
        //gray mode 
 | 
        tmp = bayernr_sw_bil_gauss_weight[12]; 
 | 
        pFix->weit_d[0] = CLIP(tmp, 0, 0x3ff); 
 | 
        tmp = bayernr_sw_bil_gauss_weight[10]; 
 | 
        pFix->weit_d[1] = CLIP(tmp, 0, 0x3ff); 
 | 
        tmp = bayernr_sw_bil_gauss_weight[11]; 
 | 
        pFix->weit_d[2] = CLIP(tmp, 0, 0x3ff); 
 | 
  
 | 
    } else { 
 | 
        tmp = bayernr_sw_bil_gauss_weight[13]; 
 | 
        pFix->weit_d[0] = CLIP(tmp, 0, 0x3ff); 
 | 
        tmp = bayernr_sw_bil_gauss_weight[14]; 
 | 
        pFix->weit_d[1] = CLIP(tmp, 0, 0x3ff); 
 | 
        tmp = bayernr_sw_bil_gauss_weight[15]; 
 | 
        pFix->weit_d[2] = CLIP(tmp, 0, 0x3ff); 
 | 
    } 
 | 
  
 | 
#endif 
 | 
  
 | 
  
 | 
  
 | 
    bayernr2D_fix_printf_V2(pFix); 
 | 
  
 | 
    return ABAYERNR_RET_SUCCESS; 
 | 
  
 | 
} 
 | 
  
 | 
Abayernr_result_t bayernr3D_fix_transfer_V2(RK_Bayernr_3D_Params_V2_Select_t* pSelect, RK_Bayernr_3D_Fix_V2_t *pFix, float fStrength, Abayernr_ExpInfo_t *pExpInfo) 
 | 
{ 
 | 
    int i = 0; 
 | 
    int tmp; 
 | 
  
 | 
    if(fStrength <= 0.0f) { 
 | 
        fStrength = 0.000001; 
 | 
    } 
 | 
  
 | 
    // BAY3D_BAY3D_CTRL 
 | 
    pFix->bay3d_exp_sel = 1; 
 | 
    pFix->bay3d_bypass_en = 0; 
 | 
    pFix->bay3d_pk_en = 1;  // 1 use local pk, 0 use global pk 
 | 
    pFix->bay3d_en_i = pSelect->bayernrv2_tnr_enable; 
 | 
  
 | 
    // BAY3D_BAY3D_KALRATIO 
 | 
    tmp = (int)(pSelect->bayernrv2_tnr_softwgt / fStrength * (1 << FIXTNRSFT)); 
 | 
    pFix->bay3d_softwgt = CLIP(tmp, 0, 0x3ff); 
 | 
  
 | 
    tmp = (int)(1.5 * (1 << 10));  //(pSelect->bayertnr_sigratio*(1<<FIXBILSTRG)); 
 | 
    pFix->bay3d_sigratio = CLIP(tmp, 0, 0x3fff); 
 | 
  
 | 
    // BAY3D_BAY3D_GLBPK2 
 | 
    tmp = 1024; 
 | 
    pFix->bay3d_glbpk2 = CLIP(tmp, 0, 0xfffffff); 
 | 
  
 | 
    // BAY3D_BAY3D_KALSTR 
 | 
    tmp = (int)(pSelect->bayernrv2_tnr_filter_strength / fStrength * (1 << 10));//  (int)(0.06*(1<<10));    // less, filter strong  // classic is 0.1 
 | 
    pFix->bay3d_exp_str = CLIP(tmp, 0, 0x3ff); 
 | 
    tmp = (int)(1.0 * (1 << FIXTNRSTG)); 
 | 
    pFix->bay3d_str = CLIP(tmp, 0, 0x100); 
 | 
  
 | 
    // BAY3D_BAY3D_WGTLMT 
 | 
    tmp = (int)(((float)1 - pSelect->bayernrv2_tnr_hi_clipwgt) * fStrength * (1 << FIXTNRWGT));    // 0.0325 
 | 
    pFix->bay3d_wgtlmt_h = CLIP(tmp, 0, 0x3ff); 
 | 
    tmp = (int)(((float)1 - pSelect->bayernrv2_tnr_lo_clipwgt) * fStrength  * (1 << FIXTNRWGT));    // 0.0325 
 | 
    pFix->bay3d_wgtlmt_l = CLIP(tmp, 0, 0x3ff); 
 | 
  
 | 
    // BAY3D_BAY3D_SIG_X0 
 | 
    for(i = 0; i < 16; i++) 
 | 
    { 
 | 
        //pFix->bay3d_sig_x[i] = bayernr_get_trans_V2(pSelect->bayernrv2_tnr_lumapoint[i]); 
 | 
        tmp = pSelect->bayernrv2_tnr_lumapoint[i]; 
 | 
        pFix->bay3d_sig_x[i] = CLIP(tmp, 0, 0xffff); 
 | 
  
 | 
        tmp = pSelect->bayernrv2_tnr_sigma[i]; 
 | 
        pFix->bay3d_sig_y[i] = CLIP(tmp, 0, 0xffff); 
 | 
    } 
 | 
  
 | 
    bayernr3D_fix_printf_V2(pFix); 
 | 
  
 | 
    return ABAYERNR_RET_SUCCESS; 
 | 
} 
 | 
  
 | 
Abayernr_result_t bayernr2D_fix_printf_V2(RK_Bayernr_2D_Fix_V2_t * pFix) 
 | 
{ 
 | 
    //FILE *fp = fopen("bayernr_regsiter.dat", "wb+"); 
 | 
    Abayernr_result_t res = ABAYERNR_RET_SUCCESS; 
 | 
  
 | 
    if(pFix == NULL) { 
 | 
        LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__); 
 | 
        return ABAYERNR_RET_NULL_POINTER; 
 | 
    } 
 | 
  
 | 
    LOGD_ANR("%s:(%d) ############# bayernr2D enter######################## \n", __FUNCTION__, __LINE__); 
 | 
    //ISP_BAYNR_3A00_CTRL(0x0000) 
 | 
    LOGD_ANR("(0x0000) gauss_en:0x%x log_bypass:0x%x en:0x%x \n", 
 | 
             pFix->baynr_gauss_en, 
 | 
             pFix->baynr_log_bypass, 
 | 
             pFix->baynr_en); 
 | 
  
 | 
    // ISP_BAYNR_3A00_DGAIN0-2 (0x0004 - 0x0008) 
 | 
    for(int i = 0; i < 3; i++) { 
 | 
        LOGD_ANR("(0x0004 - 0x0008) dgain[%d]:0x%x \n", 
 | 
                 i, pFix->baynr_dgain[i]); 
 | 
    } 
 | 
  
 | 
    // ISP_BAYNR_3A00_PIXDIFF(0x000c) 
 | 
    LOGD_ANR("(0x000c) pix_diff:0x%x \n", 
 | 
             pFix->baynr_pix_diff); 
 | 
  
 | 
    // ISP_BAYNR_3A00_THLD(0x0010) 
 | 
    LOGD_ANR("(0x000d) diff_thld:0x%x softthld:0x%x \n", 
 | 
             pFix->baynr_diff_thld, 
 | 
             pFix->baynr_softthld); 
 | 
  
 | 
    // ISP_BAYNR_3A00_W1_STRENG(0x0014) 
 | 
    LOGD_ANR("(0x0014) bltflt_streng:0x%x reg_w1:0x%x \n", 
 | 
             pFix->bltflt_streng, 
 | 
             pFix->baynr_reg_w1); 
 | 
  
 | 
    // ISP_BAYNR_3A00_SIGMAX0-15(0x0018 - 0x0034) 
 | 
    for(int i = 0; i < 16; i++) { 
 | 
        LOGD_ANR("(0x0018 - 0x0034) sig_x[%d]:0x%x \n", 
 | 
                 i, pFix->sigma_x[i]); 
 | 
    } 
 | 
  
 | 
    // ISP_BAYNR_3A00_SIGMAY0-15(0x0038 - 0x0054) 
 | 
    for(int i = 0; i < 16; i++) { 
 | 
        LOGD_ANR("(0x0038 - 0x0054) sig_y[%d]:0x%x \n", 
 | 
                 i, pFix->sigma_y[i]); 
 | 
    } 
 | 
  
 | 
    // ISP_BAYNR_3A00_WRIT_D(0x0058) 
 | 
    LOGD_ANR("(0x0058) weit_d[0]:0x%x weit_d[1]:0x%x weit_d[2]:0x%x\n", 
 | 
             pFix->weit_d[0], 
 | 
             pFix->weit_d[1], 
 | 
             pFix->weit_d[2]); 
 | 
  
 | 
    LOGD_ANR("%s:(%d) ############# bayernr2D exit ######################## \n", __FUNCTION__, __LINE__); 
 | 
    return res; 
 | 
} 
 | 
  
 | 
  
 | 
Abayernr_result_t bayernr3D_fix_printf_V2(RK_Bayernr_3D_Fix_V2_t * pFix) 
 | 
{ 
 | 
    //FILE *fp = fopen("bayernr_regsiter.dat", "wb+"); 
 | 
    Abayernr_result_t res = ABAYERNR_RET_SUCCESS; 
 | 
  
 | 
    if(pFix == NULL) { 
 | 
        LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__); 
 | 
        return ABAYERNR_RET_NULL_POINTER; 
 | 
    } 
 | 
  
 | 
    LOGD_ANR("%s:(%d) ############# bayernr3D enter######################## \n", __FUNCTION__, __LINE__); 
 | 
  
 | 
    // BAY3D_BAY3D_CTRL (0x0080) 
 | 
    LOGD_ANR("(0x0080) exp_sel:0x%x bypass_en:0x%x pk_en:0x%x en_i:0x%x\n", 
 | 
             pFix->bay3d_exp_sel, 
 | 
             pFix->bay3d_bypass_en, 
 | 
             pFix->bay3d_pk_en, 
 | 
             pFix->bay3d_en_i); 
 | 
  
 | 
    // BAY3D_BAY3D_KALRATIO (0x0084) 
 | 
    LOGD_ANR("(0x0084) softwgt:0x%x sigratio:0x%x \n", 
 | 
             pFix->bay3d_softwgt, 
 | 
             pFix->bay3d_sigratio); 
 | 
  
 | 
    // BAY3D_BAY3D_GLBPK2 (0x0088) 
 | 
    LOGD_ANR("(0x0088) glbpk2:0x%x \n", 
 | 
             pFix->bay3d_glbpk2); 
 | 
  
 | 
    // BAY3D_BAY3D_KALSTR (0x008c) 
 | 
    LOGD_ANR("(0x008c) exp_str:0x%x str:0x%x \n", 
 | 
             pFix->bay3d_exp_str, 
 | 
             pFix->bay3d_str); 
 | 
  
 | 
    // BAY3D_BAY3D_WGTLMT (0x0090) 
 | 
    LOGD_ANR("(0x0090) wgtlmt_h:0x%x wgtlmt_l:0x%x \n", 
 | 
             pFix->bay3d_wgtlmt_h, 
 | 
             pFix->bay3d_wgtlmt_l); 
 | 
  
 | 
    // BAY3D_BAY3D_SIG_X0-16  (0x0094 - 0x00b0) 
 | 
    for(int i = 0; i < 16; i++) { 
 | 
        LOGD_ANR("(0x0094 - 0x00b0) sig_x[%d]:0x%x \n", 
 | 
                 i, pFix->bay3d_sig_x[i]); 
 | 
    } 
 | 
  
 | 
    // BAY3D_BAY3D_SIG_Y0-16 (0x00b4 - 0x00d0) 
 | 
    for(int i = 0; i < 16; i++) { 
 | 
        LOGD_ANR("(0x00b4 - 0x00d0) sig_y[%d]:0x%x \n", 
 | 
                 i, pFix->bay3d_sig_y[i]); 
 | 
    } 
 | 
  
 | 
  
 | 
    LOGD_ANR("%s:(%d) ############# bayernr3D exit ######################## \n", __FUNCTION__, __LINE__); 
 | 
    return res; 
 | 
} 
 | 
  
 | 
  
 | 
Abayernr_result_t bayernr2D_get_setting_by_name_json_V2(CalibDbV2_BayerNrV2_t* pCalibdb, char *name, int *calib_idx, int *tuning_idx) 
 | 
{ 
 | 
  
 | 
    int i = 0; 
 | 
    Abayernr_result_t res = ABAYERNR_RET_SUCCESS; 
 | 
  
 | 
    if(pCalibdb == NULL || name == NULL || calib_idx == NULL || tuning_idx == NULL) { 
 | 
        LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__); 
 | 
        return ABAYERNR_RET_NULL_POINTER; 
 | 
    } 
 | 
  
 | 
    for(i = 0; i < pCalibdb->Bayernr2D.Setting_len; i++) { 
 | 
        if(strncmp(name, pCalibdb->Bayernr2D.Setting[i].SNR_Mode, strlen(name)*sizeof(char)) == 0) { 
 | 
            break; 
 | 
        } 
 | 
    } 
 | 
  
 | 
    if(i < pCalibdb->Bayernr2D.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; 
 | 
  
 | 
  
 | 
} 
 | 
  
 | 
  
 | 
  
 | 
  
 | 
Abayernr_result_t bayernr2D_init_params_json_V2(RK_Bayernr_2D_Params_V2_t *pParams, CalibDbV2_BayerNrV2_t* pCalibdb, int calib_idx, int tuning_idx) 
 | 
{ 
 | 
    Abayernr_result_t res = ABAYERNR_RET_SUCCESS; 
 | 
    CalibDbV2_BayerNrV2_CalibPara_Setting_ISO_t *pCalibIso = NULL; 
 | 
    CalibDbV2_BayerNrV2_Bayernr2d_Setting_ISO_t *pTuningISO = NULL; 
 | 
    int i = 0; 
 | 
    int j = 0; 
 | 
  
 | 
    LOGI_ANR("%s:(%d) oyyf bayerner xml config start\n", __FUNCTION__, __LINE__); 
 | 
    if(pParams == NULL || pCalibdb == NULL || calib_idx < 0 || tuning_idx < 0) { 
 | 
        LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__); 
 | 
        return ABAYERNR_RET_NULL_POINTER; 
 | 
    } 
 | 
  
 | 
    for(int i = 0; i < pCalibdb->CalibPara.Setting[calib_idx].Calib_ISO_len && i < RK_BAYERNR_V2_MAX_ISO_NUM; i++) { 
 | 
        pCalibIso = &pCalibdb->CalibPara.Setting[calib_idx].Calib_ISO[i]; 
 | 
        pParams->iso[i] = pCalibIso->iso; 
 | 
        for(int k = 0; k < 16; k++) { 
 | 
            pParams->bayernrv2_filter_lumapoint_r[k] = pCalibIso->lumapoint[k]; 
 | 
            pParams->bayernrv2_filter_sigma_r[i][k] = pCalibIso->sigma[k]; 
 | 
        } 
 | 
    } 
 | 
  
 | 
    for(int i = 0; i < pCalibdb->Bayernr2D.Setting[tuning_idx].Tuning_ISO_len && i < RK_BAYERNR_V2_MAX_ISO_NUM; i++) { 
 | 
        pTuningISO = &pCalibdb->Bayernr2D.Setting[tuning_idx].Tuning_ISO[i]; 
 | 
        pParams->iso[i] = pTuningISO->iso; 
 | 
        pParams->bayernrv2_filter_strength_r[i] = pTuningISO->filter_strength; 
 | 
        pParams->bayernrv2_filter_edgesofts_r[i] = pTuningISO->edgesofts; 
 | 
        pParams->bayernrv2_filter_out_wgt_r[i] = pTuningISO->weight; 
 | 
        pParams->bayernrv2_filter_soft_threshold_ratio_r[i] = pTuningISO->ratio; 
 | 
        pParams->bayernrv2_gauss_guide_r[i] = pTuningISO->gauss_guide; 
 | 
    } 
 | 
  
 | 
    LOGI_ANR("%s:(%d) oyyf bayerner xml config end!   \n", __FUNCTION__, __LINE__); 
 | 
  
 | 
    return res; 
 | 
} 
 | 
  
 | 
Abayernr_result_t bayernr2D_config_setting_param_json_V2(RK_Bayernr_2D_Params_V2_t *pParams, CalibDbV2_BayerNrV2_t* pCalibdbV2, char* param_mode, char * snr_name) 
 | 
{ 
 | 
    Abayernr_result_t res = ABAYERNR_RET_SUCCESS; 
 | 
    int calib_idx = 0; 
 | 
    int tuning_idx = 0; 
 | 
  
 | 
  
 | 
    if(pParams == NULL || pCalibdbV2 == NULL 
 | 
            || param_mode == NULL || snr_name == NULL) { 
 | 
        LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__); 
 | 
        return ABAYERNR_RET_NULL_POINTER; 
 | 
    } 
 | 
  
 | 
    res = bayernr2D_get_setting_by_name_json_V2(pCalibdbV2, snr_name, &calib_idx, &tuning_idx); 
 | 
    if(res != ABAYERNR_RET_SUCCESS) { 
 | 
        LOGW_ANR("%s(%d): error!!!  can't find setting in iq files, use 0 instead\n", __FUNCTION__, __LINE__); 
 | 
    } 
 | 
  
 | 
    res = bayernr2D_init_params_json_V2(pParams, pCalibdbV2, calib_idx, tuning_idx); 
 | 
    pParams->bayernrv2_2dnr_enable = pCalibdbV2->Bayernr2D.enable; 
 | 
  
 | 
    return res; 
 | 
  
 | 
} 
 | 
  
 | 
  
 | 
  
 | 
Abayernr_result_t bayernr3D_get_setting_by_name_json_V2(CalibDbV2_BayerNrV2_t* pCalibdb, char *name, int *calib_idx, int *tuning_idx) 
 | 
{ 
 | 
    int i = 0; 
 | 
    Abayernr_result_t res = ABAYERNR_RET_SUCCESS; 
 | 
  
 | 
    if(pCalibdb == NULL || name == NULL || calib_idx == NULL || tuning_idx == NULL) { 
 | 
        LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__); 
 | 
        return ABAYERNR_RET_NULL_POINTER; 
 | 
    } 
 | 
  
 | 
    for(i = 0; i < pCalibdb->Bayernr3D.Setting_len; i++) { 
 | 
        if(strncmp(name, pCalibdb->Bayernr3D.Setting[i].SNR_Mode, strlen(name)*sizeof(char)) == 0) { 
 | 
            break; 
 | 
        } 
 | 
    } 
 | 
  
 | 
    if(i < pCalibdb->Bayernr3D.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; 
 | 
  
 | 
  
 | 
} 
 | 
  
 | 
  
 | 
Abayernr_result_t bayernr3D_init_params_json_V2(RK_Bayernr_3D_Params_V2_t *pParams, CalibDbV2_BayerNrV2_t* pCalibdb, int calib_idx, int tuning_idx) 
 | 
{ 
 | 
    Abayernr_result_t res = ABAYERNR_RET_SUCCESS; 
 | 
    CalibDbV2_BayerNrV2_CalibPara_Setting_ISO_t *pCalibIso = NULL; 
 | 
    CalibDbV2_BayerNrV2_Bayernr3d_Setting_ISO_t *pTuningIso = NULL; 
 | 
  
 | 
    LOGI_ANR("%s:(%d) oyyf bayerner xml config start\n", __FUNCTION__, __LINE__); 
 | 
    if(pParams == NULL || pCalibdb == NULL) { 
 | 
        LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__); 
 | 
        return ABAYERNR_RET_NULL_POINTER; 
 | 
    } 
 | 
  
 | 
    for(int i = 0; i < pCalibdb->CalibPara.Setting[calib_idx].Calib_ISO_len && i < RK_BAYERNR_V2_MAX_ISO_NUM; i++) { 
 | 
        pCalibIso = &pCalibdb->CalibPara.Setting[calib_idx].Calib_ISO[i]; 
 | 
        pParams->iso[i] = pCalibIso->iso; 
 | 
        for(int k = 0; k < 16; k++) { 
 | 
            pParams->bayernrv2_lumapoint_r[k] = pCalibIso->lumapoint[k]; 
 | 
            pParams->bayernrv2_sigma_r[i][k] = pCalibIso->sigma[k]; 
 | 
        } 
 | 
    } 
 | 
  
 | 
    for(int i = 0; i < pCalibdb->Bayernr3D.Setting[tuning_idx].Tuning_ISO_len && i < RK_BAYERNR_V2_MAX_ISO_NUM; i++) { 
 | 
        pTuningIso = &pCalibdb->Bayernr3D.Setting[tuning_idx].Tuning_ISO[i]; 
 | 
  
 | 
        pParams->iso[i] = pTuningIso->iso; 
 | 
        pParams->bayernrv2_tnr_filter_strength_r[i] = pTuningIso->filter_strength; 
 | 
        pParams->bayernrv2_tnr_lo_clipwgt_r[i] = pTuningIso->lo_clipwgt; 
 | 
        pParams->bayernrv2_tnr_hi_clipwgt_r[i] = pTuningIso->hi_clipwgt; 
 | 
        pParams->bayernrv2_tnr_softwgt_r[i] = pTuningIso->softwgt; 
 | 
  
 | 
    } 
 | 
  
 | 
    LOGI_ANR("%s:(%d) oyyf bayerner xml config end!   \n", __FUNCTION__, __LINE__); 
 | 
  
 | 
    return res; 
 | 
} 
 | 
  
 | 
  
 | 
Abayernr_result_t bayernr3D_config_setting_param_json_V2(RK_Bayernr_3D_Params_V2_t *pParams, CalibDbV2_BayerNrV2_t* pCalibdbV2, char* param_mode, char * snr_name) 
 | 
{ 
 | 
    Abayernr_result_t res = ABAYERNR_RET_SUCCESS; 
 | 
    int calib_idx = 0; 
 | 
    int tuning_idx = 0; 
 | 
  
 | 
    if(pParams == NULL || pCalibdbV2 == NULL 
 | 
            || param_mode == NULL || snr_name == NULL) { 
 | 
        LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__); 
 | 
        return ABAYERNR_RET_NULL_POINTER; 
 | 
    } 
 | 
  
 | 
    res = bayernr3D_get_setting_by_name_json_V2(pCalibdbV2, snr_name, &calib_idx, &tuning_idx); 
 | 
    if(res != ABAYERNR_RET_SUCCESS) { 
 | 
        LOGW_ANR("%s(%d): error!!!  can't find setting in iq files, use 0 instead\n", __FUNCTION__, __LINE__); 
 | 
  
 | 
    } 
 | 
  
 | 
    res = bayernr3D_init_params_json_V2(pParams, pCalibdbV2, calib_idx, tuning_idx); 
 | 
    pParams->bayernrv2_tnr_enable = pCalibdbV2->Bayernr3D.enable; 
 | 
    return res; 
 | 
  
 | 
} 
 | 
  
 | 
RKAIQ_END_DECLARE 
 |