|
#include "rk_aiq_aynr_algo_v3.h"
|
#include "rk_aiq_aynr_algo_itf_v3.h"
|
|
RKAIQ_BEGIN_DECLARE
|
|
Aynr_result_V3_t Aynr_Start_V3(Aynr_Context_V3_t *pAynrCtx)
|
{
|
LOGI_ANR( "%s:enter!\n", __FUNCTION__);
|
|
// initial checks
|
if (pAynrCtx == NULL) {
|
return (AYNRV3_RET_NULL_POINTER);
|
}
|
|
if ((AYNRV3_STATE_RUNNING == pAynrCtx->eState)
|
|| (AYNRV3_STATE_LOCKED == pAynrCtx->eState)) {
|
return (AYNRV3_RET_FAILURE);
|
}
|
|
pAynrCtx->eState = AYNRV3_STATE_RUNNING;
|
|
LOGI_ANR( "%s:exit!\n", __FUNCTION__);
|
return (AYNRV3_RET_SUCCESS);
|
}
|
|
|
Aynr_result_V3_t Aynr_Stop_V3(Aynr_Context_V3_t *pAynrCtx)
|
{
|
LOGI_ANR( "%s:enter!\n", __FUNCTION__);
|
|
// initial checks
|
if (pAynrCtx == NULL) {
|
return (AYNRV3_RET_NULL_POINTER);
|
}
|
|
if (AYNRV3_STATE_LOCKED == pAynrCtx->eState) {
|
return (AYNRV3_RET_FAILURE);
|
}
|
|
pAynrCtx->eState = AYNRV3_STATE_STOPPED;
|
|
LOGI_ANR( "%s:exit!\n", __FUNCTION__);
|
return (AYNRV3_RET_SUCCESS);
|
}
|
|
|
//anr inint
|
Aynr_result_V3_t Aynr_Init_V3(Aynr_Context_V3_t **ppAynrCtx, void *pCalibDb)
|
{
|
Aynr_Context_V3_t * pAynrCtx;
|
|
LOGI_ANR("%s(%d): enter!\n", __FUNCTION__, __LINE__);
|
|
pAynrCtx = (Aynr_Context_V3_t *)malloc(sizeof(Aynr_Context_V3_t));
|
if(pAynrCtx == NULL) {
|
LOGE_ANR("%s(%d): malloc fail\n", __FUNCTION__, __LINE__);
|
return AYNRV3_RET_NULL_POINTER;
|
}
|
|
memset(pAynrCtx, 0x00, sizeof(Aynr_Context_V3_t));
|
|
//gain state init
|
pAynrCtx->stStrength.strength_enable = false;
|
pAynrCtx->stStrength.percent = 1.0;
|
|
pAynrCtx->eState = AYNRV3_STATE_INITIALIZED;
|
*ppAynrCtx = pAynrCtx;
|
|
pAynrCtx->eMode = AYNRV3_OP_MODE_AUTO;
|
pAynrCtx->isIQParaUpdate = false;
|
pAynrCtx->isGrayMode = false;
|
pAynrCtx->isReCalculate = 1;
|
|
#if AYNR_USE_XML_FILE_V3
|
//read v1 params from xml
|
#if AYNR_USE_JSON_FILE_V3
|
pAynrCtx->ynr_v3 =
|
*(CalibDbV2_YnrV3_t *)(CALIBDBV2_GET_MODULE_PTR(pCalibDb, ynr_v3));
|
#endif
|
#endif
|
|
|
#if AYNR_USE_XML_FILE_V3
|
pAynrCtx->stExpInfo.snr_mode = 1;
|
pAynrCtx->eParamMode = AYNRV3_PARAM_MODE_NORMAL;
|
Aynr_ConfigSettingParam_V3(pAynrCtx, pAynrCtx->eParamMode, pAynrCtx->stExpInfo.snr_mode);
|
#endif
|
|
LOGD_ANR("%s(%d):", __FUNCTION__, __LINE__);
|
|
|
LOGI_ANR("%s(%d): exit!\n", __FUNCTION__, __LINE__);
|
return AYNRV3_RET_SUCCESS;
|
}
|
|
//anr release
|
Aynr_result_V3_t Aynr_Release_V3(Aynr_Context_V3_t *pAynrCtx)
|
{
|
Aynr_result_V3_t result = AYNRV3_RET_SUCCESS;
|
LOGI_ANR("%s(%d): enter!\n", __FUNCTION__, __LINE__);
|
if(pAynrCtx == NULL) {
|
LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
|
return AYNRV3_RET_NULL_POINTER;
|
}
|
|
result = Aynr_Stop_V3(pAynrCtx);
|
if (result != AYNRV3_RET_SUCCESS) {
|
LOGE_ANR( "%s: ANRStop() failed!\n", __FUNCTION__);
|
return (result);
|
}
|
|
// check state
|
if ((AYNRV3_STATE_RUNNING == pAynrCtx->eState)
|
|| (AYNRV3_STATE_LOCKED == pAynrCtx->eState)) {
|
return (AYNRV3_RET_BUSY);
|
}
|
|
memset(pAynrCtx, 0x00, sizeof(Aynr_Context_V3_t));
|
free(pAynrCtx);
|
|
LOGI_ANR("%s(%d): exit!\n", __FUNCTION__, __LINE__);
|
return AYNRV3_RET_SUCCESS;
|
}
|
|
//anr config
|
Aynr_result_V3_t Aynr_Prepare_V3(Aynr_Context_V3_t *pAynrCtx, Aynr_Config_V3_t* pAynrConfig)
|
{
|
LOGI_ANR("%s(%d): enter!\n", __FUNCTION__, __LINE__);
|
|
if(pAynrCtx == NULL) {
|
LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
|
return AYNRV3_RET_INVALID_PARM;
|
}
|
|
if(pAynrConfig == NULL) {
|
LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
|
return AYNRV3_RET_INVALID_PARM;
|
}
|
|
if(!!(pAynrCtx->prepare_type & RK_AIQ_ALGO_CONFTYPE_UPDATECALIB)) {
|
Aynr_IQParaUpdate_V3(pAynrCtx);
|
}
|
|
pAynrCtx->rawWidth = pAynrConfig->rawWidth;
|
pAynrCtx->rawHeight = pAynrConfig->rawHeight;
|
Aynr_Start_V3(pAynrCtx);
|
|
LOGI_ANR("%s(%d): exit!\n", __FUNCTION__, __LINE__);
|
return AYNRV3_RET_SUCCESS;
|
}
|
|
//anr reconfig
|
Aynr_result_V3_t Aynr_ReConfig_V3(Aynr_Context_V3_t *pAynrCtx, Aynr_Config_V3_t* pAynrConfig)
|
{
|
LOGI_ANR("%s(%d): enter!\n", __FUNCTION__, __LINE__);
|
//need todo what?
|
|
LOGI_ANR("%s(%d): exit!\n", __FUNCTION__, __LINE__);
|
return AYNRV3_RET_SUCCESS;
|
}
|
|
//anr reconfig
|
Aynr_result_V3_t Aynr_IQParaUpdate_V3(Aynr_Context_V3_t *pAynrCtx)
|
{
|
LOGI_ANR("%s(%d): enter!\n", __FUNCTION__, __LINE__);
|
//need todo what?
|
|
if(pAynrCtx->isIQParaUpdate) {
|
LOGD_ANR("IQ data reconfig\n");
|
Aynr_ConfigSettingParam_V3(pAynrCtx, pAynrCtx->eParamMode, pAynrCtx->stExpInfo.snr_mode);
|
pAynrCtx->isIQParaUpdate = false;
|
}
|
|
LOGI_ANR("%s(%d): exit!\n", __FUNCTION__, __LINE__);
|
return AYNRV3_RET_SUCCESS;
|
}
|
|
|
//anr preprocess
|
Aynr_result_V3_t Aynr_PreProcess_V3(Aynr_Context_V3_t *pAynrCtx)
|
{
|
LOGI_ANR("%s(%d): enter!\n", __FUNCTION__, __LINE__);
|
//need todo what?
|
|
Aynr_IQParaUpdate_V3(pAynrCtx);
|
|
LOGI_ANR("%s(%d): exit!\n", __FUNCTION__, __LINE__);
|
return AYNRV3_RET_SUCCESS;
|
}
|
|
//anr process
|
Aynr_result_V3_t Aynr_Process_V3(Aynr_Context_V3_t *pAynrCtx, Aynr_ExpInfo_V3_t *pExpInfo)
|
{
|
LOGI_ANR("%s(%d): enter!\n", __FUNCTION__, __LINE__);
|
Aynr_ParamMode_V3_t mode = AYNRV3_PARAM_MODE_INVALID;
|
|
if(pAynrCtx == NULL) {
|
LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
|
return AYNRV3_RET_INVALID_PARM;
|
}
|
|
if(pExpInfo == NULL) {
|
LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
|
return AYNRV3_RET_INVALID_PARM;
|
}
|
|
if(pAynrCtx->eState != AYNRV3_STATE_RUNNING) {
|
return AYNRV3_RET_SUCCESS;
|
}
|
|
|
Aynr_ParamModeProcess_V3(pAynrCtx, pExpInfo, &mode);
|
|
if(pAynrCtx->eMode == AYNRV3_OP_MODE_AUTO) {
|
|
LOGD_ANR("%s(%d): \n", __FUNCTION__, __LINE__);
|
|
#if AYNR_USE_XML_FILE_V3
|
if(pExpInfo->snr_mode != pAynrCtx->stExpInfo.snr_mode || pAynrCtx->eParamMode != mode) {
|
LOGD_ANR("param mode:%d snr_mode:%d\n", mode, pExpInfo->snr_mode);
|
pAynrCtx->eParamMode = mode;
|
Aynr_ConfigSettingParam_V3(pAynrCtx, pAynrCtx->eParamMode, pExpInfo->snr_mode);
|
}
|
#endif
|
|
//select param
|
ynr_select_params_by_ISO_V3(&pAynrCtx->stAuto.stParams, &pAynrCtx->stAuto.stSelect, pExpInfo);
|
|
} else if(pAynrCtx->eMode == AYNRV3_OP_MODE_MANUAL) {
|
//TODO
|
}
|
|
memcpy(&pAynrCtx->stExpInfo, pExpInfo, sizeof(Aynr_ExpInfo_V3_t));
|
pAynrCtx->stExpInfo.rawHeight = pAynrCtx->rawHeight;
|
pAynrCtx->stExpInfo.rawWidth = pAynrCtx->rawWidth;
|
|
LOGI_ANR("%s(%d): exit!\n", __FUNCTION__, __LINE__);
|
return AYNRV3_RET_SUCCESS;
|
|
}
|
|
|
|
//anr get result
|
Aynr_result_V3_t Aynr_GetProcResult_V3(Aynr_Context_V3_t *pAynrCtx, Aynr_ProcResult_V3_t* pAynrResult)
|
{
|
LOGI_ANR("%s(%d): enter!\n", __FUNCTION__, __LINE__);
|
|
if(pAynrCtx == NULL) {
|
LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
|
return AYNRV3_RET_INVALID_PARM;
|
}
|
|
if(pAynrResult == NULL) {
|
LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
|
return AYNRV3_RET_INVALID_PARM;
|
}
|
|
if(pAynrCtx->eMode == AYNRV3_OP_MODE_AUTO) {
|
pAynrResult->stSelect = pAynrCtx->stAuto.stSelect;
|
} else if(pAynrCtx->eMode == AYNRV3_OP_MODE_MANUAL) {
|
//TODO
|
pAynrResult->stSelect = pAynrCtx->stManual.stSelect;
|
}
|
|
//transfer to reg value
|
ynr_fix_transfer_V3(&pAynrResult->stSelect, &pAynrResult->stFix, &pAynrCtx->stStrength, &pAynrCtx->stExpInfo);
|
|
if(pAynrCtx->eMode == AYNRV3_OP_MODE_REG_MANUAL) {
|
pAynrResult->stFix = pAynrCtx->stManual.stFix;
|
pAynrCtx->stStrength.strength_enable = false;
|
pAynrCtx->stStrength.percent = 1.0;
|
}
|
|
pAynrCtx->stProcResult = *pAynrResult;
|
LOGI_ANR("%s(%d): exit!\n", __FUNCTION__, __LINE__);
|
return AYNRV3_RET_SUCCESS;
|
}
|
|
Aynr_result_V3_t Aynr_ConfigSettingParam_V3(Aynr_Context_V3_t *pAynrCtx, Aynr_ParamMode_V3_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(pAynrCtx == NULL) {
|
LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
|
return AYNRV3_RET_INVALID_PARM;
|
}
|
|
//select param mode first
|
if(eParamMode == AYNRV3_PARAM_MODE_NORMAL) {
|
sprintf(param_mode_name, "%s", "normal");
|
} else if(eParamMode == AYNRV3_PARAM_MODE_HDR) {
|
sprintf(param_mode_name, "%s", "hdr");
|
} else if(eParamMode == AYNRV3_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 AYNR_USE_JSON_FILE_V3
|
ynr_config_setting_param_json_V3(&pAynrCtx->stAuto.stParams, &pAynrCtx->ynr_v3, param_mode_name, snr_name);
|
#endif
|
|
return AYNRV3_RET_SUCCESS;
|
}
|
|
Aynr_result_V3_t Aynr_ParamModeProcess_V3(Aynr_Context_V3_t *pAynrCtx, Aynr_ExpInfo_V3_t *pExpInfo, Aynr_ParamMode_V3_t *mode) {
|
Aynr_result_V3_t res = AYNRV3_RET_SUCCESS;
|
*mode = pAynrCtx->eParamMode;
|
|
if(pAynrCtx == NULL) {
|
LOGE_ANR("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
|
return AYNRV3_RET_INVALID_PARM;
|
}
|
|
if(pAynrCtx->isGrayMode) {
|
*mode = AYNRV3_PARAM_MODE_GRAY;
|
} else if(pExpInfo->hdr_mode == 0) {
|
*mode = AYNRV3_PARAM_MODE_NORMAL;
|
} else if(pExpInfo->hdr_mode >= 1) {
|
*mode = AYNRV3_PARAM_MODE_HDR;
|
} else {
|
*mode = AYNRV3_PARAM_MODE_NORMAL;
|
}
|
|
return res;
|
}
|
|
|
RKAIQ_END_DECLARE
|