#include "arawnr2/rk_aiq_uapi_abayernr_int_v2.h"
|
#include "arawnr2/rk_aiq_types_abayernr_algo_prvt_v2.h"
|
#include "RkAiqCalibApi.h"
|
#include "bayernr_xml2json_v2.h"
|
|
|
|
#if 1
|
|
#define RAWNR_LUMA_TF_STRENGTH_MAX_PERCENT (100.0)
|
#define RAWNR_LUMA_SF_STRENGTH_MAX_PERCENT (100.0)
|
|
|
XCamReturn
|
rk_aiq_uapi_arawnrV2_SetAttrib(RkAiqAlgoContext *ctx,
|
rk_aiq_bayernr_attrib_v2_t *attr,
|
bool need_sync)
|
{
|
|
Abayernr_Context_V2_t* pCtx = (Abayernr_Context_V2_t*)ctx;
|
|
pCtx->eMode = attr->eMode;
|
pCtx->stAuto = attr->stAuto;
|
pCtx->stManual = attr->stManual;
|
pCtx->isReCalculate |= 1;
|
|
return XCAM_RETURN_NO_ERROR;
|
}
|
|
XCamReturn
|
rk_aiq_uapi_arawnrV2_GetAttrib(const RkAiqAlgoContext *ctx,
|
rk_aiq_bayernr_attrib_v2_t *attr)
|
{
|
|
Abayernr_Context_V2_t* pCtx = (Abayernr_Context_V2_t*)ctx;
|
|
attr->eMode = pCtx->eMode;
|
memcpy(&attr->stAuto, &pCtx->stAuto, sizeof(attr->stAuto));
|
memcpy(&attr->stManual, &pCtx->stManual, sizeof(attr->stManual));
|
|
return XCAM_RETURN_NO_ERROR;
|
}
|
|
#if 0
|
XCamReturn
|
rk_aiq_uapi_arawnrV2_SetIQPara(RkAiqAlgoContext *ctx,
|
rk_aiq_bayernr_IQPara_V2_t *pPara,
|
bool need_sync)
|
{
|
|
Abayernr_Context_V2_t* pCtx = (Abayernr_Context_V2_t*)ctx;
|
|
|
#if ABAYERNR_USE_JSON_FILE_V2
|
bayernrV2_calibdb_to_calibdbV2(&pPara->listHead_mode, &pCtx->bayernr_v2, 0);
|
#else
|
pCtx->list_bayernr_v2 = &pPara->listHead_mode;
|
#endif
|
|
pCtx->isIQParaUpdate = true;
|
return XCAM_RETURN_NO_ERROR;
|
}
|
|
|
XCamReturn
|
rk_aiq_uapi_arawnrV2_GetIQPara(RkAiqAlgoContext *ctx,
|
rk_aiq_bayernr_IQPara_V2_t *pPara)
|
{
|
|
Abayernr_Context_V2_t* pCtx = (Abayernr_Context_V2_t*)ctx;
|
|
if(pCtx == NULL && pPara == NULL) {
|
return XCAM_RETURN_NO_ERROR;
|
}
|
|
#if ABAYERNR_USE_JSON_FILE_V2
|
INIT_LIST_HEAD(&pPara->listHead_mode);
|
CalibDb_Bayernr_V2_t *pBayernrProfile = (CalibDb_Bayernr_V2_t *)malloc(sizeof(CalibDb_Bayernr_V2_t));
|
if(NULL == pBayernrProfile) {
|
LOGE("%s(%d): malloc fail(exit)\n", __FUNCTION__, __LINE__);
|
return XCAM_RETURN_NO_ERROR;
|
}
|
memset(pBayernrProfile, 0x00, sizeof(CalibDb_Bayernr_V2_t));
|
INIT_LIST_HEAD(&pBayernrProfile->st2DParams.listHead);
|
INIT_LIST_HEAD(&pBayernrProfile->st3DParams.listHead);
|
list_add_tail((struct list_head*)pBayernrProfile, pPara->listHead_mode);
|
|
for(int i = 0; i < pCtx->bayernr_v2.Bayernr2D.Setting_len; i++) {
|
Calibdb_Bayernr_2Dparams_V2_t *p2DParam = (Calibdb_Bayernr_2Dparams_V2_t *)malloc(sizeof(Calibdb_Bayernr_2Dparams_V2_t));
|
if(NULL == p2DParam) {
|
LOGE("%s(%d): malloc fail(exit)\n", __FUNCTION__, __LINE__);
|
return XCAM_RETURN_NO_ERROR;
|
}
|
memset(p2DParam, 0x00, sizeof(Calibdb_Bayernr_2Dparams_V2_t));
|
list_prepare_item(&p2DParam->listItem);
|
list_add_tail(&p2DParam->listItem, &pBayernrProfile->st2DParams.listHead);
|
}
|
|
for(int i = 0; i < pCtx->bayernr_v2.Bayernr3D.Setting_len; i++) {
|
CalibDb_Bayernr_3DParams_V2_t *p3DParam = (CalibDb_Bayernr_3DParams_V2_t *)malloc(sizeof(CalibDb_Bayernr_3DParams_V2_t));
|
if(NULL == p3DParam) {
|
LOGE("%s(%d): malloc fail(exit)\n", __FUNCTION__, __LINE__);
|
return XCAM_RETURN_NO_ERROR;
|
}
|
memset(p3DParam, 0x00, sizeof(CalibDb_Bayernr_3DParams_V2_t));
|
list_prepare_item(&p3DParam->listItem);
|
list_add_tail(&p3DParam->listItem, &pBayernrProfile->st3DParams.listHead);
|
}
|
|
bayernrV2_calibdbV2_to_calibdb(&pCtx->bayernr_v2, &pPara->listHead_mode, 0);
|
#else
|
pPara->listHead_mode = *pCtx->list_bayernr_v2;
|
#endif
|
|
return XCAM_RETURN_NO_ERROR;
|
}
|
#endif
|
|
XCamReturn
|
rk_aiq_uapi_rawnrV2_SetSFStrength(const RkAiqAlgoContext *ctx,
|
float fPercent)
|
{
|
Abayernr_Context_V2_t* pCtx = (Abayernr_Context_V2_t*)ctx;
|
|
float fStrength = 1.0f;
|
float fMax = RAWNR_LUMA_SF_STRENGTH_MAX_PERCENT;
|
|
|
if(fPercent <= 0.5) {
|
fStrength = fPercent / 0.5;
|
} else {
|
fStrength = (fPercent - 0.5) * (fMax - 1) * 2 + 1;
|
}
|
|
pCtx->fRawnr_SF_Strength = fStrength;
|
pCtx->isReCalculate |= 1;
|
|
return XCAM_RETURN_NO_ERROR;
|
}
|
|
|
XCamReturn
|
rk_aiq_uapi_rawnrV2_SetTFStrength(const RkAiqAlgoContext *ctx,
|
float fPercent)
|
{
|
Abayernr_Context_V2_t* pCtx = (Abayernr_Context_V2_t*)ctx;
|
|
float fStrength = 1.0;
|
float fMax = RAWNR_LUMA_TF_STRENGTH_MAX_PERCENT;
|
|
if(fPercent <= 0.5) {
|
fStrength = fPercent / 0.5;
|
} else {
|
fStrength = (fPercent - 0.5) * (fMax - 1) * 2 + 1;
|
}
|
|
pCtx->fRawnr_TF_Strength = fStrength;
|
pCtx->isReCalculate |= 1;
|
|
return XCAM_RETURN_NO_ERROR;
|
}
|
|
|
XCamReturn
|
rk_aiq_uapi_rawnrV2_GetSFStrength(const RkAiqAlgoContext *ctx,
|
float *pPercent)
|
{
|
Abayernr_Context_V2_t* pCtx = (Abayernr_Context_V2_t*)ctx;
|
|
float fStrength = 1.0f;
|
float fMax = RAWNR_LUMA_SF_STRENGTH_MAX_PERCENT;
|
|
|
fStrength = pCtx->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_rawnrV2_GetTFStrength(const RkAiqAlgoContext *ctx,
|
float *pPercent)
|
{
|
Abayernr_Context_V2_t* pCtx = (Abayernr_Context_V2_t*)ctx;
|
|
float fStrength = 1.0;
|
float fMax = RAWNR_LUMA_TF_STRENGTH_MAX_PERCENT;
|
|
fStrength = pCtx->fRawnr_TF_Strength;
|
|
if(fStrength <= 1) {
|
*pPercent = fStrength * 0.5;
|
} else {
|
*pPercent = (fStrength - 1) / ((fMax - 1) * 2) + 0.5;
|
}
|
|
return XCAM_RETURN_NO_ERROR;
|
}
|
|
|
#endif
|