#include "rk_aiq_uapi_anr_int.h"
|
#include "anr/rk_aiq_types_anr_algo_prvt.h"
|
#include "anr/rk_aiq_anr_algo.h"
|
#include "bayernr_xml2json_v1.h"
|
#include "mfnr_xml2json_v1.h"
|
#include "uvnr_xml2json_v1.h"
|
#include "ynr_xml2json_v1.h"
|
|
|
|
#define NR_STRENGTH_MAX_PERCENT (50.0)
|
#define NR_LUMA_TF_STRENGTH_MAX_PERCENT NR_STRENGTH_MAX_PERCENT
|
#define NR_LUMA_SF_STRENGTH_MAX_PERCENT (100.0)
|
#define NR_CHROMA_TF_STRENGTH_MAX_PERCENT NR_STRENGTH_MAX_PERCENT
|
#define NR_CHROMA_SF_STRENGTH_MAX_PERCENT NR_STRENGTH_MAX_PERCENT
|
#define NR_RAWNR_SF_STRENGTH_MAX_PERCENT (80.0)
|
|
XCamReturn
|
rk_aiq_uapi_anr_SetAttrib(RkAiqAlgoContext *ctx,
|
rk_aiq_nr_attrib_t *attr,
|
bool need_sync)
|
{
|
|
ANRContext_t* pAnrCtx = (ANRContext_t*)ctx;
|
|
pAnrCtx->eMode = attr->eMode;
|
pAnrCtx->stAuto = attr->stAuto;
|
pAnrCtx->stManual = attr->stManual;
|
|
return XCAM_RETURN_NO_ERROR;
|
}
|
|
XCamReturn
|
rk_aiq_uapi_anr_GetAttrib(const RkAiqAlgoContext *ctx,
|
rk_aiq_nr_attrib_t *attr)
|
{
|
|
ANRContext_t* pAnrCtx = (ANRContext_t*)ctx;
|
|
attr->eMode = pAnrCtx->eMode;
|
memcpy(&attr->stAuto, &pAnrCtx->stAuto, sizeof(ANR_Auto_Attr_t));
|
memcpy(&attr->stManual, &pAnrCtx->stManual, sizeof(ANR_Manual_Attr_t));
|
|
return XCAM_RETURN_NO_ERROR;
|
}
|
|
XCamReturn
|
rk_aiq_uapi_anr_SetIQPara(RkAiqAlgoContext *ctx,
|
rk_aiq_nr_IQPara_t *pPara,
|
bool need_sync)
|
{
|
|
ANRContext_t* pAnrCtx = (ANRContext_t*)ctx;
|
|
if(pPara->module_bits & (1 << ANR_MODULE_BAYERNR)) {
|
//pAnrCtx->stBayernrCalib = pPara->stBayernrPara;
|
CalibDb_BayerNr_2_t stBayernr;
|
stBayernr.mode_num = sizeof(pPara->stBayernrPara.mode_cell) / sizeof(CalibDb_BayerNr_ModeCell_t);
|
stBayernr.mode_cell = (CalibDb_BayerNr_ModeCell_t *)malloc(stBayernr.mode_num * sizeof(CalibDb_BayerNr_ModeCell_t));
|
stBayernr.enable = pPara->stBayernrPara.enable;
|
strcpy(stBayernr.version, pPara->stBayernrPara.version);
|
for(int i = 0; i < stBayernr.mode_num; i++) {
|
stBayernr.mode_cell[i] = pPara->stBayernrPara.mode_cell[i];
|
}
|
|
#if(ANR_USE_JSON_PARA)
|
bayernrV1_calibdb_to_calibdbV2(&stBayernr, &pAnrCtx->bayernr_v1, 0);
|
#else
|
pAnrCtx->stBayernrCalib.enable = stBayernr.enable;
|
strcpy(pAnrCtx->stBayernrCalib.version, stBayernr.version);
|
for(int i = 0; i < stBayernr.mode_num && i < pAnrCtx->stBayernrCalib.mode_num; i++) {
|
pAnrCtx->stBayernrCalib.mode_cell[i] = stBayernr.mode_cell[i];
|
}
|
pAnrCtx->isIQParaUpdate = true;
|
#endif
|
|
free(stBayernr.mode_cell);
|
}
|
|
if(pPara->module_bits & (1 << ANR_MODULE_MFNR)) {
|
//pAnrCtx->stMfnrCalib = pPara->stMfnrPara;
|
CalibDb_MFNR_2_t stMfnr;
|
stMfnr.mode_num = sizeof(pPara->stMfnrPara.mode_cell) / sizeof(CalibDb_MFNR_ModeCell_t);
|
stMfnr.mode_cell = (CalibDb_MFNR_ModeCell_t *)malloc(stMfnr.mode_num * sizeof(CalibDb_MFNR_ModeCell_t));
|
|
stMfnr.enable = pPara->stMfnrPara.enable;
|
strcpy(stMfnr.version, pPara->stMfnrPara.version);
|
stMfnr.local_gain_en = pPara->stMfnrPara.local_gain_en;
|
stMfnr.motion_detect_en = pPara->stMfnrPara.motion_detect_en;
|
stMfnr.mode_3to1 = pPara->stMfnrPara.mode_3to1;
|
stMfnr.max_level = pPara->stMfnrPara.max_level;
|
stMfnr.max_level_uv = pPara->stMfnrPara.max_level_uv;
|
stMfnr.back_ref_num = pPara->stMfnrPara.back_ref_num;
|
for(int i = 0; i < 4; i++) {
|
stMfnr.uv_ratio[i] = pPara->stMfnrPara.uv_ratio[i];
|
}
|
for(int i = 0; i < stMfnr.mode_num; i++) {
|
stMfnr.mode_cell[i] = pPara->stMfnrPara.mode_cell[i];
|
}
|
|
#if(ANR_USE_JSON_PARA)
|
mfnrV1_calibdb_to_calibdbV2(&stMfnr, &pAnrCtx->mfnr_v1, 0);
|
#else
|
pAnrCtx->stMfnrCalib.enable = stMfnr.enable;
|
strcpy(pAnrCtx->stMfnrCalib.version, stMfnr.version);
|
pAnrCtx->stMfnrCalib.local_gain_en = stMfnr.local_gain_en;
|
pAnrCtx->stMfnrCalib.motion_detect_en = stMfnr.motion_detect_en;
|
pAnrCtx->stMfnrCalib.mode_3to1 = stMfnr.mode_3to1;
|
pAnrCtx->stMfnrCalib.max_level = stMfnr.max_level;
|
pAnrCtx->stMfnrCalib.max_level_uv = stMfnr.max_level_uv;
|
pAnrCtx->stMfnrCalib.back_ref_num = stMfnr.back_ref_num;
|
for(int i = 0; i < 4; i++) {
|
pAnrCtx->stMfnrCalib.uv_ratio[i] = stMfnr.uv_ratio[i];
|
}
|
for(int i = 0; i < stMfnr.mode_num && i < pAnrCtx->stMfnrCalib.mode_num; i++) {
|
pAnrCtx->stMfnrCalib.mode_cell[i] = stMfnr.mode_cell[i];
|
}
|
#endif
|
pAnrCtx->isIQParaUpdate = true;
|
|
free(stMfnr.mode_cell);
|
}
|
|
if(pPara->module_bits & (1 << ANR_MODULE_UVNR)) {
|
//pAnrCtx->stUvnrCalib = pPara->stUvnrPara;
|
CalibDb_UVNR_2_t stUvnr;
|
stUvnr.mode_num = sizeof(pPara->stUvnrPara.mode_cell) / sizeof(CalibDb_UVNR_ModeCell_t);
|
stUvnr.mode_cell = (CalibDb_UVNR_ModeCell_t *)malloc(stUvnr.mode_num * sizeof(CalibDb_UVNR_ModeCell_t));
|
stUvnr.enable = pPara->stUvnrPara.enable;
|
strcpy(stUvnr.version, pPara->stUvnrPara.version);
|
for(int i = 0; i < stUvnr.mode_num; i++) {
|
stUvnr.mode_cell[i] = pPara->stUvnrPara.mode_cell[i];
|
}
|
|
#if(ANR_USE_JSON_PARA)
|
uvnrV1_calibdb_to_calibdbV2(&stUvnr, &pAnrCtx->uvnr_v1, 0);
|
#else
|
pAnrCtx->stUvnrCalib.enable = stUvnr.enable;
|
strcpy(pAnrCtx->stUvnrCalib.version, stUvnr.version);
|
for(int i = 0; i < stUvnr.mode_num && i < pAnrCtx->stUvnrCalib.mode_num; i++) {
|
pAnrCtx->stUvnrCalib.mode_cell[i] = stUvnr.mode_cell[i];
|
}
|
#endif
|
pAnrCtx->isIQParaUpdate = true;
|
|
free(stUvnr.mode_cell);
|
}
|
|
if(pPara->module_bits & (1 << ANR_MODULE_YNR)) {
|
//pAnrCtx->stYnrCalib = pPara->stYnrPara;
|
CalibDb_YNR_2_t stYnr;
|
stYnr.mode_num = sizeof(pPara->stYnrPara.mode_cell) / sizeof(CalibDb_YNR_ModeCell_t);
|
stYnr.mode_cell = (CalibDb_YNR_ModeCell_t *)malloc(stYnr.mode_num * sizeof(CalibDb_YNR_ModeCell_t));
|
stYnr.enable = pPara->stYnrPara.enable;
|
strcpy(stYnr.version, pPara->stYnrPara.version);
|
for(int i = 0; i < stYnr.mode_num; i++) {
|
stYnr.mode_cell[i] = pPara->stYnrPara.mode_cell[i];
|
}
|
|
|
#if(ANR_USE_JSON_PARA)
|
ynrV1_calibdb_to_calibdbV2(&stYnr, &pAnrCtx->ynr_v1, 0);
|
#else
|
pAnrCtx->stYnrCalib.enable = stYnr.enable;
|
strcpy(pAnrCtx->stYnrCalib.version, stYnr.version);
|
for(int i = 0; i < stYnr.mode_num && i < pAnrCtx->stYnrCalib.mode_num; i++) {
|
pAnrCtx->stYnrCalib.mode_cell[i] = stYnr.mode_cell[i];
|
}
|
#endif
|
pAnrCtx->isIQParaUpdate = true;
|
|
free(stYnr.mode_cell);
|
}
|
|
return XCAM_RETURN_NO_ERROR;
|
}
|
|
|
XCamReturn
|
rk_aiq_uapi_anr_GetIQPara(RkAiqAlgoContext *ctx,
|
rk_aiq_nr_IQPara_t *pPara)
|
{
|
|
ANRContext_t* pAnrCtx = (ANRContext_t*)ctx;
|
|
//pPara->stBayernrPara = pAnrCtx->stBayernrCalib;
|
CalibDb_BayerNr_2_t stBayernr;
|
stBayernr.mode_num = sizeof(pPara->stBayernrPara.mode_cell) / sizeof(CalibDb_BayerNr_ModeCell_t);
|
stBayernr.mode_cell = (CalibDb_BayerNr_ModeCell_t *)malloc(stBayernr.mode_num * sizeof(CalibDb_BayerNr_ModeCell_t));
|
|
#if(ANR_USE_JSON_PARA)
|
bayernrV1_calibdbV2_to_calibdb(&pAnrCtx->bayernr_v1, &stBayernr, 0);
|
#else
|
stBayernr.enable = pAnrCtx->stBayernrCalib.enable;
|
strcpy(stBayernr.version, pAnrCtx->stBayernrCalib.version);
|
for(int i = 0; i < pAnrCtx->stBayernrCalib.mode_num && i < stBayernr.mode_num; i++) {
|
stBayernr.mode_cell[i] = pAnrCtx->stBayernrCalib.mode_cell[i];
|
}
|
#endif
|
|
memset(&pPara->stBayernrPara, 0x00, sizeof(CalibDb_BayerNr_t));
|
pPara->stBayernrPara.enable = stBayernr.enable;
|
strcpy(pPara->stBayernrPara.version, stBayernr.version);
|
for(int i = 0; i < stBayernr.mode_num; i++) {
|
pPara->stBayernrPara.mode_cell[i] = stBayernr.mode_cell[i];
|
}
|
free(stBayernr.mode_cell);
|
|
|
//pPara->stMfnrPara = pAnrCtx->stMfnrCalib;
|
CalibDb_MFNR_2_t stMfnr;
|
stMfnr.mode_num = sizeof(pPara->stMfnrPara.mode_cell) / sizeof(CalibDb_MFNR_ModeCell_t);
|
stMfnr.mode_cell = (CalibDb_MFNR_ModeCell_t *)malloc(stMfnr.mode_num * sizeof(CalibDb_MFNR_ModeCell_t));
|
#if(ANR_USE_JSON_PARA)
|
mfnrV1_calibdbV2_to_calibdb(&pAnrCtx->mfnr_v1, &stMfnr, 0);
|
#else
|
stMfnr.enable = pAnrCtx->stMfnrCalib.enable;
|
strcpy(stMfnr.version, pAnrCtx->stMfnrCalib.version);
|
stMfnr.local_gain_en = pAnrCtx->stMfnrCalib.local_gain_en;
|
stMfnr.motion_detect_en = pAnrCtx->stMfnrCalib.motion_detect_en;
|
stMfnr.mode_3to1 = pAnrCtx->stMfnrCalib.mode_3to1;
|
stMfnr.max_level = pAnrCtx->stMfnrCalib.max_level;
|
stMfnr.max_level_uv = pAnrCtx->stMfnrCalib.max_level_uv;
|
stMfnr.back_ref_num = pAnrCtx->stMfnrCalib.back_ref_num;
|
for(int i = 0; i < 4; i++) {
|
stMfnr.uv_ratio[i] = pAnrCtx->stMfnrCalib.uv_ratio[i];
|
}
|
for(int i = 0; i < stMfnr.mode_num && i < pAnrCtx->stMfnrCalib.mode_num; i++) {
|
stMfnr.mode_cell[i] = pAnrCtx->stMfnrCalib.mode_cell[i];
|
}
|
#endif
|
|
memset(&pPara->stMfnrPara, 0x00, sizeof(CalibDb_MFNR_t));
|
pPara->stMfnrPara.enable = stMfnr.enable;
|
strcpy(pPara->stMfnrPara.version, stMfnr.version);
|
pPara->stMfnrPara.local_gain_en = stMfnr.local_gain_en;
|
pPara->stMfnrPara.motion_detect_en = stMfnr.motion_detect_en;
|
pPara->stMfnrPara.mode_3to1 = stMfnr.mode_3to1;
|
pPara->stMfnrPara.max_level = stMfnr.max_level;
|
pPara->stMfnrPara.max_level_uv = stMfnr.max_level_uv;
|
pPara->stMfnrPara.back_ref_num = stMfnr.back_ref_num;
|
for(int i = 0; i < 4; i++) {
|
pPara->stMfnrPara.uv_ratio[i] = stMfnr.uv_ratio[i];
|
}
|
for(int i = 0; i < stMfnr.mode_num; i++) {
|
pPara->stMfnrPara.mode_cell[i] = stMfnr.mode_cell[i];
|
}
|
free(stMfnr.mode_cell);
|
|
|
//pPara->stUvnrPara = pAnrCtx->stUvnrCalib;
|
CalibDb_UVNR_2_t stUvnr;
|
stUvnr.mode_num = sizeof(pPara->stUvnrPara.mode_cell) / sizeof(CalibDb_UVNR_ModeCell_t);
|
stUvnr.mode_cell = (CalibDb_UVNR_ModeCell_t *)malloc(stUvnr.mode_num * sizeof(CalibDb_UVNR_ModeCell_t));
|
#if(ANR_USE_JSON_PARA)
|
uvnrV1_calibdbV2_to_calibdb(&pAnrCtx->uvnr_v1, &stUvnr, 0);
|
#else
|
stUvnr.enable = pAnrCtx->stUvnrCalib.enable;
|
strcpy(stUvnr.version, pAnrCtx->stUvnrCalib.version);
|
for(int i = 0; i < stUvnr.mode_num && i < pAnrCtx->stUvnrCalib.mode_num; i++) {
|
stUvnr.mode_cell[i] = pAnrCtx->stUvnrCalib.mode_cell[i];
|
}
|
#endif
|
memset(&pPara->stUvnrPara, 0x00, sizeof(CalibDb_UVNR_t));
|
pPara->stUvnrPara.enable = stUvnr.enable;
|
memcpy(pPara->stUvnrPara.version, stUvnr.version, sizeof(pPara->stUvnrPara.version));
|
for(int i = 0; i < stUvnr.mode_num; i++) {
|
pPara->stUvnrPara.mode_cell[i] = stUvnr.mode_cell[i];
|
}
|
free(stUvnr.mode_cell);
|
|
|
//pPara->stYnrPara = pAnrCtx->stYnrCalib;
|
CalibDb_YNR_2_t stYnr;
|
stYnr.mode_num = sizeof(pPara->stYnrPara.mode_cell) / sizeof(CalibDb_YNR_ModeCell_t);
|
stYnr.mode_cell = (CalibDb_YNR_ModeCell_t *)malloc(stYnr.mode_num * sizeof(CalibDb_YNR_ModeCell_t));
|
#if(ANR_USE_JSON_PARA)
|
ynrV1_calibdbV2_to_calibdb(&pAnrCtx->ynr_v1, &stYnr, 0);
|
#else
|
stYnr.enable = pAnrCtx->stYnrCalib.enable;
|
strcpy(stYnr.version, pAnrCtx->stYnrCalib.version);
|
for(int i = 0; i < stYnr.mode_num && i < pAnrCtx->stYnrCalib.mode_num; i++) {
|
stYnr.mode_cell[i] = pAnrCtx->stYnrCalib.mode_cell[i];
|
}
|
#endif
|
memset(&pPara->stYnrPara, 0x00, sizeof(CalibDb_YNR_t));
|
pPara->stYnrPara.enable = stYnr.enable;
|
memcpy(pPara->stYnrPara.version, stYnr.version, sizeof(pPara->stYnrPara.version));
|
for(int i = 0; i < stYnr.mode_num; i++) {
|
pPara->stYnrPara.mode_cell[i] = stYnr.mode_cell[i];
|
}
|
free(stYnr.mode_cell);
|
|
return XCAM_RETURN_NO_ERROR;
|
}
|
|
|
XCamReturn
|
rk_aiq_uapi_anr_SetLumaSFStrength(const RkAiqAlgoContext *ctx,
|
float fPercent)
|
{
|
ANRContext_t* pAnrCtx = (ANRContext_t*)ctx;
|
|
float fStrength = 1.0f;
|
float fMax = NR_LUMA_SF_STRENGTH_MAX_PERCENT;
|
|
|
if(fPercent <= 0.5) {
|
fStrength = fPercent / 0.5;
|
} else {
|
fStrength = (fPercent - 0.5) * (fMax - 1) * 2 + 1;
|
}
|
|
if(fStrength > 1) {
|
pAnrCtx->fRawnr_SF_Strength = fStrength;
|
pAnrCtx->fLuma_SF_Strength = 1;
|
} else {
|
pAnrCtx->fRawnr_SF_Strength = fStrength;
|
pAnrCtx->fLuma_SF_Strength = fStrength;
|
}
|
|
return XCAM_RETURN_NO_ERROR;
|
}
|
|
|
XCamReturn
|
rk_aiq_uapi_anr_SetLumaTFStrength(const RkAiqAlgoContext *ctx,
|
float fPercent)
|
{
|
ANRContext_t* pAnrCtx = (ANRContext_t*)ctx;
|
|
float fStrength = 1.0;
|
float fMax = NR_LUMA_TF_STRENGTH_MAX_PERCENT;
|
|
if(fPercent <= 0.5) {
|
fStrength = fPercent / 0.5;
|
} else {
|
fStrength = (fPercent - 0.5) * (fMax - 1) * 2 + 1;
|
}
|
|
pAnrCtx->fLuma_TF_Strength = fStrength;
|
|
return XCAM_RETURN_NO_ERROR;
|
}
|
|
|
XCamReturn
|
rk_aiq_uapi_anr_GetLumaSFStrength(const RkAiqAlgoContext *ctx,
|
float *pPercent)
|
{
|
ANRContext_t* pAnrCtx = (ANRContext_t*)ctx;
|
|
float fStrength = 1.0f;
|
float fMax = NR_LUMA_SF_STRENGTH_MAX_PERCENT;
|
|
|
fStrength = pAnrCtx->fRawnr_SF_Strength;
|
|
if(fStrength <= 1) {
|
*pPercent = fStrength * 0.5;
|
} else {
|
*pPercent = (fStrength - 1) / ((fMax - 1) * 2) + 0.5;
|
}
|
|
return XCAM_RETURN_NO_ERROR;
|
}
|
|
|
XCamReturn
|
rk_aiq_uapi_anr_GetLumaTFStrength(const RkAiqAlgoContext *ctx,
|
float *pPercent)
|
{
|
ANRContext_t* pAnrCtx = (ANRContext_t*)ctx;
|
|
float fStrength = 1.0;
|
float fMax = NR_LUMA_TF_STRENGTH_MAX_PERCENT;
|
|
fStrength = pAnrCtx->fLuma_TF_Strength;
|
|
if(fStrength <= 1) {
|
*pPercent = fStrength * 0.5;
|
} else {
|
*pPercent = (fStrength - 1) / ((fMax - 1) * 2) + 0.5;
|
}
|
|
return XCAM_RETURN_NO_ERROR;
|
}
|
|
|
XCamReturn
|
rk_aiq_uapi_anr_SetChromaSFStrength(const RkAiqAlgoContext *ctx,
|
float fPercent)
|
{
|
ANRContext_t* pAnrCtx = (ANRContext_t*)ctx;
|
|
float fStrength = 1.0f;
|
float fMax = NR_CHROMA_SF_STRENGTH_MAX_PERCENT;
|
|
if(fPercent <= 0.5) {
|
fStrength = fPercent / 0.5;
|
} else {
|
fStrength = (fPercent - 0.5) * (fMax - 1) * 2 + 1;
|
}
|
|
pAnrCtx->fChroma_SF_Strength = fStrength;
|
|
return XCAM_RETURN_NO_ERROR;
|
}
|
|
|
XCamReturn
|
rk_aiq_uapi_anr_SetChromaTFStrength(const RkAiqAlgoContext *ctx,
|
float fPercent)
|
{
|
ANRContext_t* pAnrCtx = (ANRContext_t*)ctx;
|
|
float fStrength = 1.0;
|
float fMax = NR_CHROMA_TF_STRENGTH_MAX_PERCENT;
|
|
if(fPercent <= 0.5) {
|
fStrength = fPercent / 0.5;
|
} else {
|
fStrength = (fPercent - 0.5) * (fMax - 1) * 2 + 1;
|
}
|
|
pAnrCtx->fChroma_TF_Strength = fStrength;
|
|
return XCAM_RETURN_NO_ERROR;
|
}
|
|
|
XCamReturn
|
rk_aiq_uapi_anr_GetChromaSFStrength(const RkAiqAlgoContext *ctx,
|
float *pPercent)
|
{
|
ANRContext_t* pAnrCtx = (ANRContext_t*)ctx;
|
|
float fStrength = 1.0f;
|
float fMax = NR_CHROMA_SF_STRENGTH_MAX_PERCENT;
|
|
fStrength = pAnrCtx->fChroma_SF_Strength;
|
|
|
if(fStrength <= 1) {
|
*pPercent = fStrength * 0.5;
|
} else {
|
*pPercent = (fStrength - 1) / ((fMax - 1) * 2) + 0.5;
|
}
|
|
|
return XCAM_RETURN_NO_ERROR;
|
}
|
|
|
XCamReturn
|
rk_aiq_uapi_anr_GetChromaTFStrength(const RkAiqAlgoContext *ctx,
|
float *pPercent)
|
{
|
ANRContext_t* pAnrCtx = (ANRContext_t*)ctx;
|
|
float fStrength = 1.0;
|
float fMax = NR_CHROMA_TF_STRENGTH_MAX_PERCENT;
|
|
fStrength = pAnrCtx->fChroma_TF_Strength;
|
|
if(fStrength <= 1) {
|
*pPercent = fStrength * 0.5;
|
} else {
|
*pPercent = (fStrength - 1) / ((fMax - 1) * 2) + 0.5;
|
}
|
|
return XCAM_RETURN_NO_ERROR;
|
}
|
|
|
XCamReturn
|
rk_aiq_uapi_anr_SetRawnrSFStrength(const RkAiqAlgoContext *ctx,
|
float fPercent)
|
{
|
ANRContext_t* pAnrCtx = (ANRContext_t*)ctx;
|
|
float fStrength = 1.0;
|
float fMax = NR_RAWNR_SF_STRENGTH_MAX_PERCENT;
|
|
if(fPercent <= 0.5) {
|
fStrength = fPercent / 0.5;
|
} else {
|
fStrength = (fPercent - 0.5) * (fMax - 1) * 2 + 1;
|
}
|
|
pAnrCtx->fRawnr_SF_Strength = fStrength;
|
|
return XCAM_RETURN_NO_ERROR;
|
}
|
|
|
XCamReturn
|
rk_aiq_uapi_anr_GetRawnrSFStrength(const RkAiqAlgoContext *ctx,
|
float *pPercent)
|
{
|
ANRContext_t* pAnrCtx = (ANRContext_t*)ctx;
|
|
float fStrength = 1.0f;
|
float fMax = NR_RAWNR_SF_STRENGTH_MAX_PERCENT;
|
|
fStrength = pAnrCtx->fRawnr_SF_Strength;
|
|
|
if(fStrength <= 1) {
|
*pPercent = fStrength * 0.5;
|
} else {
|
*pPercent = (fStrength - 1) / ((fMax - 1) * 2) + 0.5;
|
}
|
|
|
return XCAM_RETURN_NO_ERROR;
|
}
|
|
|
XCamReturn
|
rk_aiq_uapi_anr_SetJsonPara(RkAiqAlgoContext *ctx,
|
rk_aiq_nr_JsonPara_t *pPara,
|
bool need_sync)
|
{
|
|
ANRContext_t* pAnrCtx = (ANRContext_t*)ctx;
|
|
if(pPara->module_bits & (1 << ANR_MODULE_BAYERNR)) {
|
//pAnrCtx->stBayernrCalib = pPara->stBayernrPara;
|
bayernr_calibdbV2_assign(&pAnrCtx->bayernr_v1, &pPara->bayernr_v1);
|
pAnrCtx->isIQParaUpdate = true;
|
}
|
|
if(pPara->module_bits & (1 << ANR_MODULE_MFNR)) {
|
//pAnrCtx->stMfnrCalib = pPara->stMfnrPara;
|
mfnr_calibdbV2_assign(&pAnrCtx->mfnr_v1, &pPara->mfnr_v1);
|
pAnrCtx->isIQParaUpdate = true;
|
}
|
|
if(pPara->module_bits & (1 << ANR_MODULE_UVNR)) {
|
//pAnrCtx->stUvnrCalib = pPara->stUvnrPara;
|
uvnr_calibdbV2_assign(&pAnrCtx->uvnr_v1, &pPara->uvnr_v1);
|
pAnrCtx->isIQParaUpdate = true;
|
}
|
|
if(pPara->module_bits & (1 << ANR_MODULE_YNR)) {
|
//pAnrCtx->stYnrCalib = pPara->stYnrPara;
|
ynr_calibdbV2_assign(&pAnrCtx->ynr_v1, &pPara->ynr_v1);
|
pAnrCtx->isIQParaUpdate = true;
|
}
|
|
return XCAM_RETURN_NO_ERROR;
|
}
|
|
|
|
XCamReturn
|
rk_aiq_uapi_anr_GetJsonPara(RkAiqAlgoContext *ctx,
|
rk_aiq_nr_JsonPara_t *pPara)
|
{
|
|
ANRContext_t* pAnrCtx = (ANRContext_t*)ctx;
|
|
//pPara->stBayernrPara = pAnrCtx->stBayernrCalib;
|
bayernr_calibdbV2_assign(&pPara->bayernr_v1, &pAnrCtx->bayernr_v1);
|
mfnr_calibdbV2_assign(&pPara->mfnr_v1, &pAnrCtx->mfnr_v1);
|
uvnr_calibdbV2_assign(&pPara->uvnr_v1, &pAnrCtx->uvnr_v1);
|
ynr_calibdbV2_assign(&pPara->ynr_v1, &pAnrCtx->ynr_v1);
|
|
return XCAM_RETURN_NO_ERROR;
|
}
|