|
#include "rk_aiq_abayertnr_algo_v2.h"
|
#include "rk_aiq_abayertnr_algo_itf_v2.h"
|
|
RKAIQ_BEGIN_DECLARE
|
|
Abayertnr_result_V2_t Abayertnr_Start_V2(Abayertnr_Context_V2_t *pAbayertnrCtx)
|
{
|
LOGI_ANR( "%s:enter!\n", __FUNCTION__);
|
|
// initial checks
|
if (pAbayertnrCtx == NULL) {
|
return (ABAYERTNRV2_RET_NULL_POINTER);
|
}
|
|
if ((ABAYERTNRV2_STATE_RUNNING == pAbayertnrCtx->eState)
|
|| (ABAYERTNRV2_STATE_LOCKED == pAbayertnrCtx->eState)) {
|
return (ABAYERTNRV2_RET_FAILURE);
|
}
|
|
pAbayertnrCtx->eState = ABAYERTNRV2_STATE_RUNNING;
|
|
LOGI_ANR( "%s:exit!\n", __FUNCTION__);
|
return (ABAYERTNRV2_RET_SUCCESS);
|
}
|
|
|
Abayertnr_result_V2_t Abayertnr_Stop_V2(Abayertnr_Context_V2_t *pAbayertnrCtx)
|
{
|
LOGI_ANR( "%s:enter!\n", __FUNCTION__);
|
|
// initial checks
|
if (pAbayertnrCtx == NULL) {
|
return (ABAYERTNRV2_RET_NULL_POINTER);
|
}
|
|
if (ABAYERTNRV2_STATE_LOCKED == pAbayertnrCtx->eState) {
|
return (ABAYERTNRV2_RET_FAILURE);
|
}
|
|
pAbayertnrCtx->eState = ABAYERTNRV2_STATE_STOPPED;
|
|
LOGI_ANR( "%s:exit!\n", __FUNCTION__);
|
return (ABAYERTNRV2_RET_SUCCESS);
|
}
|
|
|
//anr inint
|
Abayertnr_result_V2_t Abayertnr_Init_V2(Abayertnr_Context_V2_t **ppAbayertnrCtx, void *pCalibDb)
|
{
|
Abayertnr_Context_V2_t * pAbayertnrCtx;
|
|
LOGI_ANR("%s(%d): enter!\n", __FUNCTION__, __LINE__);
|
|
pAbayertnrCtx = (Abayertnr_Context_V2_t *)malloc(sizeof(Abayertnr_Context_V2_t));
|
if(pAbayertnrCtx == NULL) {
|
LOGE_ANR("%s(%d): malloc fail\n", __FUNCTION__, __LINE__);
|
return ABAYERTNRV2_RET_NULL_POINTER;
|
}
|
|
memset(pAbayertnrCtx, 0x00, sizeof(Abayertnr_Context_V2_t));
|
|
//gain state init
|
pAbayertnrCtx->stStrength.strength_enable = false;
|
pAbayertnrCtx->stStrength.percent = 1.0;
|
|
pAbayertnrCtx->eState = ABAYERTNRV2_STATE_INITIALIZED;
|
*ppAbayertnrCtx = pAbayertnrCtx;
|
|
pAbayertnrCtx->eMode = ABAYERTNRV2_OP_MODE_AUTO;
|
pAbayertnrCtx->isIQParaUpdate = false;
|
pAbayertnrCtx->isGrayMode = false;
|
pAbayertnrCtx->isReCalculate = 1;
|
|
//read v1 params from xml
|
#if (ABAYERTNR_USE_JSON_FILE_V2)
|
CalibDbV2_BayerTnr_V2_t * pcalibdbV2_bayertnr_v2 =
|
(CalibDbV2_BayerTnr_V2_t *)(CALIBDBV2_GET_MODULE_PTR((CamCalibDbV2Context_t*)pCalibDb, bayertnr_v2));
|
pAbayertnrCtx->bayertnr_v2 = *pcalibdbV2_bayertnr_v2;
|
#endif
|
|
|
#if RK_SIMULATOR_HW
|
//just for v2 params from html
|
|
#endif
|
|
#if 1
|
pAbayertnrCtx->stExpInfo.snr_mode = 1;
|
pAbayertnrCtx->eParamMode = ABAYERTNRV2_PARAM_MODE_NORMAL;
|
Abayertnr_ConfigSettingParam_V2(pAbayertnrCtx, pAbayertnrCtx->eParamMode, pAbayertnrCtx->stExpInfo.snr_mode);
|
#endif
|
|
LOGD_ANR("%s(%d):", __FUNCTION__, __LINE__);
|
|
|
LOGI_ANR("%s(%d): exit!\n", __FUNCTION__, __LINE__);
|
return ABAYERTNRV2_RET_SUCCESS;
|
}
|
|
//anr release
|
Abayertnr_result_V2_t Abayertnr_Release_V2(Abayertnr_Context_V2_t *pAbayertnrCtx)
|
{
|
Abayertnr_result_V2_t result = ABAYERTNRV2_RET_SUCCESS;
|
LOGI_ANR("%s(%d): enter!\n", __FUNCTION__, __LINE__);
|
if(pAbayertnrCtx == NULL) {
|
LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
|
return ABAYERTNRV2_RET_NULL_POINTER;
|
}
|
|
result = Abayertnr_Stop_V2(pAbayertnrCtx);
|
if (result != ABAYERTNRV2_RET_SUCCESS) {
|
LOGE_ANR( "%s: ANRStop() failed!\n", __FUNCTION__);
|
return (result);
|
}
|
|
// check state
|
if ((ABAYERTNRV2_STATE_RUNNING == pAbayertnrCtx->eState)
|
|| (ABAYERTNRV2_STATE_LOCKED == pAbayertnrCtx->eState)) {
|
return (ABAYERTNRV2_RET_BUSY);
|
}
|
|
memset(pAbayertnrCtx, 0x00, sizeof(Abayertnr_Context_V2_t));
|
free(pAbayertnrCtx);
|
|
LOGI_ANR("%s(%d): exit!\n", __FUNCTION__, __LINE__);
|
return ABAYERTNRV2_RET_SUCCESS;
|
}
|
|
//anr config
|
Abayertnr_result_V2_t Abayertnr_Prepare_V2(Abayertnr_Context_V2_t *pAbayertnrCtx, Abayertnr_Config_V2_t* pAbayertnrConfig)
|
{
|
LOGI_ANR("%s(%d): enter!\n", __FUNCTION__, __LINE__);
|
|
if(pAbayertnrCtx == NULL || pAbayertnrConfig == NULL) {
|
LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
|
return ABAYERTNRV2_RET_INVALID_PARM;
|
}
|
|
if(!!(pAbayertnrCtx->prepare_type & RK_AIQ_ALGO_CONFTYPE_UPDATECALIB)) {
|
Abayertnr_IQParaUpdate_V2(pAbayertnrCtx);
|
}
|
|
Abayertnr_Start_V2(pAbayertnrCtx);
|
|
LOGI_ANR("%s(%d): exit!\n", __FUNCTION__, __LINE__);
|
return ABAYERTNRV2_RET_SUCCESS;
|
}
|
|
//anr reconfig
|
Abayertnr_result_V2_t Abayertnr_ReConfig_V2(Abayertnr_Context_V2_t *pAbayertnrCtx, Abayertnr_Config_V2_t* pAbayertnrConfig)
|
{
|
LOGI_ANR("%s(%d): enter!\n", __FUNCTION__, __LINE__);
|
//need todo what?
|
|
LOGI_ANR("%s(%d): exit!\n", __FUNCTION__, __LINE__);
|
return ABAYERTNRV2_RET_SUCCESS;
|
}
|
|
//anr reconfig
|
Abayertnr_result_V2_t Abayertnr_IQParaUpdate_V2(Abayertnr_Context_V2_t *pAbayertnrCtx)
|
{
|
LOGI_ANR("%s(%d): enter!\n", __FUNCTION__, __LINE__);
|
//need todo what?
|
|
if(pAbayertnrCtx->isIQParaUpdate) {
|
LOGD_ANR("IQ data reconfig\n");
|
Abayertnr_ConfigSettingParam_V2(pAbayertnrCtx, pAbayertnrCtx->eParamMode, pAbayertnrCtx->stExpInfo.snr_mode);
|
pAbayertnrCtx->isIQParaUpdate = false;
|
}
|
|
LOGI_ANR("%s(%d): exit!\n", __FUNCTION__, __LINE__);
|
return ABAYERTNRV2_RET_SUCCESS;
|
}
|
|
|
//anr preprocess
|
Abayertnr_result_V2_t Abayertnr_PreProcess_V2(Abayertnr_Context_V2_t *pAbayertnrCtx)
|
{
|
LOGI_ANR("%s(%d): enter!\n", __FUNCTION__, __LINE__);
|
//need todo what?
|
|
Abayertnr_IQParaUpdate_V2(pAbayertnrCtx);
|
|
LOGI_ANR("%s(%d): exit!\n", __FUNCTION__, __LINE__);
|
return ABAYERTNRV2_RET_SUCCESS;
|
}
|
|
//anr process
|
Abayertnr_result_V2_t Abayertnr_Process_V2(Abayertnr_Context_V2_t *pAbayertnrCtx, Abayertnr_ExpInfo_V2_t *pExpInfo)
|
{
|
LOGI_ANR("%s(%d): enter!\n", __FUNCTION__, __LINE__);
|
Abayertnr_ParamMode_V2_t mode = ABAYERTNRV2_PARAM_MODE_INVALID;
|
|
if(pAbayertnrCtx == NULL || pExpInfo == NULL) {
|
LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
|
return ABAYERTNRV2_RET_INVALID_PARM;
|
}
|
|
if(pAbayertnrCtx->eState != ABAYERTNRV2_STATE_RUNNING) {
|
return ABAYERTNRV2_RET_SUCCESS;
|
}
|
|
Abayertnr_ParamModeProcess_V2(pAbayertnrCtx, pExpInfo, &mode);
|
|
if(pAbayertnrCtx->eMode == ABAYERTNRV2_OP_MODE_AUTO) {
|
|
LOGD_ANR("%s(%d): \n", __FUNCTION__, __LINE__);
|
|
#if ABAYERTNR_USE_XML_FILE_V2
|
if(pExpInfo->snr_mode != pAbayertnrCtx->stExpInfo.snr_mode || pAbayertnrCtx->eParamMode != mode) {
|
LOGD_ANR("param mode:%d snr_mode:%d\n", mode, pExpInfo->snr_mode);
|
pAbayertnrCtx->eParamMode = mode;
|
Abayertnr_ConfigSettingParam_V2(pAbayertnrCtx, pAbayertnrCtx->eParamMode, pExpInfo->snr_mode);
|
}
|
#endif
|
|
//select param
|
bayertnr_select_params_by_ISO_V2(&pAbayertnrCtx->stAuto.st3DParams, &pAbayertnrCtx->stAuto.st3DSelect, pExpInfo);
|
|
} else if(pAbayertnrCtx->eMode == ABAYERTNRV2_OP_MODE_MANUAL) {
|
//TODO
|
}
|
|
memcpy(&pAbayertnrCtx->stExpInfo, pExpInfo, sizeof(Abayertnr_ExpInfo_V2_t));
|
|
LOGI_ANR("%s(%d): exit!\n", __FUNCTION__, __LINE__);
|
return ABAYERTNRV2_RET_SUCCESS;
|
|
}
|
|
|
|
//anr get result
|
Abayertnr_result_V2_t Abayertnr_GetProcResult_V2(Abayertnr_Context_V2_t *pAbayertnrCtx, Abayertnr_ProcResult_V2_t* pAbayertnrResult)
|
{
|
LOGI_ANR("%s(%d): enter!\n", __FUNCTION__, __LINE__);
|
|
if(pAbayertnrCtx == NULL || pAbayertnrResult == NULL) {
|
LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
|
return ABAYERTNRV2_RET_INVALID_PARM;
|
}
|
|
if(pAbayertnrCtx->eMode == ABAYERTNRV2_OP_MODE_AUTO) {
|
pAbayertnrResult->st3DSelect = pAbayertnrCtx->stAuto.st3DSelect;
|
|
} else if(pAbayertnrCtx->eMode == ABAYERTNRV2_OP_MODE_MANUAL) {
|
//TODO
|
pAbayertnrResult->st3DSelect = pAbayertnrCtx->stManual.st3DSelect;
|
}
|
|
//transfer to reg value
|
bayertnr_fix_transfer_V2(&pAbayertnrResult->st3DSelect, &pAbayertnrResult->st3DFix, &pAbayertnrCtx->stStrength, &pAbayertnrCtx->stExpInfo);
|
|
if(pAbayertnrCtx->eMode == ABAYERTNRV2_OP_MODE_REG_MANUAL) {
|
pAbayertnrResult->st3DFix = pAbayertnrCtx->stManual.st3DFix;
|
pAbayertnrCtx->stStrength.strength_enable = false;
|
pAbayertnrCtx->stStrength.percent = 1.0;
|
}
|
|
pAbayertnrCtx->stProcResult = *pAbayertnrResult;
|
|
LOGD_ANR("%s:%d abayertnr eMode:%d bypass:%d iso:%d fstrength:%f\n",
|
__FUNCTION__, __LINE__,
|
pAbayertnrCtx->eMode,
|
pAbayertnrResult->st3DFix.bay3d_bypass_en,
|
pAbayertnrCtx->stExpInfo.arIso[pAbayertnrCtx->stExpInfo.hdr_mode],
|
pAbayertnrCtx->stStrength.percent);
|
|
LOGI_ANR("%s(%d): exit!\n", __FUNCTION__, __LINE__);
|
return ABAYERTNRV2_RET_SUCCESS;
|
}
|
|
Abayertnr_result_V2_t Abayertnr_ConfigSettingParam_V2(Abayertnr_Context_V2_t *pAbayertnrCtx, Abayertnr_ParamMode_V2_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));
|
|
LOGI_ANR("%s(%d): enter!\n", __FUNCTION__, __LINE__);
|
if(pAbayertnrCtx == NULL) {
|
LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
|
return ABAYERTNRV2_RET_INVALID_PARM;
|
}
|
|
//select param mode first
|
if(eParamMode == ABAYERTNRV2_PARAM_MODE_NORMAL) {
|
sprintf(param_mode_name, "%s", "normal");
|
} else if(eParamMode == ABAYERTNRV2_PARAM_MODE_HDR) {
|
sprintf(param_mode_name, "%s", "hdr");
|
} else if(eParamMode == ABAYERTNRV2_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:%d!\n", __FUNCTION__, __LINE__, snr_mode);
|
sprintf(snr_name, "%s", "LSNR");
|
}
|
|
#if (ABAYERTNR_USE_JSON_FILE_V2)
|
bayertnr_config_setting_param_json_V2(&pAbayertnrCtx->stAuto.st3DParams, &pAbayertnrCtx->bayertnr_v2, param_mode_name, snr_name);
|
#endif
|
LOGI_ANR("%s(%d): exit!\n", __FUNCTION__, __LINE__);
|
return ABAYERTNRV2_RET_SUCCESS;
|
}
|
|
Abayertnr_result_V2_t Abayertnr_ParamModeProcess_V2(Abayertnr_Context_V2_t *pAbayertnrCtx, Abayertnr_ExpInfo_V2_t *pExpInfo, Abayertnr_ParamMode_V2_t *mode) {
|
Abayertnr_result_V2_t res = ABAYERTNRV2_RET_SUCCESS;
|
*mode = pAbayertnrCtx->eParamMode;
|
|
if(pAbayertnrCtx == NULL) {
|
LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
|
return ABAYERTNRV2_RET_INVALID_PARM;
|
}
|
|
if(pAbayertnrCtx->isGrayMode) {
|
*mode = ABAYERTNRV2_PARAM_MODE_GRAY;
|
} else if(pExpInfo->hdr_mode == 0) {
|
*mode = ABAYERTNRV2_PARAM_MODE_NORMAL;
|
} else if(pExpInfo->hdr_mode >= 1) {
|
*mode = ABAYERTNRV2_PARAM_MODE_HDR;
|
} else {
|
*mode = ABAYERTNRV2_PARAM_MODE_NORMAL;
|
}
|
|
return res;
|
}
|
|
|
RKAIQ_END_DECLARE
|