|
#include "rk_aiq_asharp_algo.h"
|
#include "rk_aiq_algo_asharp_itf.h"
|
|
RKAIQ_BEGIN_DECLARE
|
|
AsharpResult_t AsharpStart(AsharpContext_t *pAsharpCtx)
|
{
|
LOGI_ANR( "%s:enter!\n", __FUNCTION__);
|
|
// initial checks
|
if (pAsharpCtx == NULL) {
|
return (ASHARP_RET_NULL_POINTER);
|
}
|
|
if ((ASHARP_STATE_RUNNING == pAsharpCtx->eState)
|
|| (ASHARP_STATE_LOCKED == pAsharpCtx->eState)) {
|
return (ASHARP_RET_FAILURE);
|
}
|
|
pAsharpCtx->eState = ASHARP_STATE_RUNNING;
|
|
LOGI_ANR( "%s:exit!\n", __FUNCTION__);
|
return (ASHARP_RET_SUCCESS);
|
}
|
|
|
AsharpResult_t AsharpStop(AsharpContext_t *pAsharpCtx)
|
{
|
LOGI_ANR( "%s:enter!\n", __FUNCTION__);
|
|
// initial checks
|
if (pAsharpCtx == NULL) {
|
return (ASHARP_RET_NULL_POINTER);
|
}
|
|
if (ASHARP_STATE_LOCKED == pAsharpCtx->eState) {
|
return (ASHARP_RET_FAILURE);
|
}
|
|
pAsharpCtx->eState = ASHARP_STATE_STOPPED;
|
|
LOGI_ANR( "%s:exit!\n", __FUNCTION__);
|
return (ASHARP_RET_SUCCESS);
|
}
|
|
//anr reconfig
|
AsharpResult_t AsharpIQParaUpdate(AsharpContext_t *pAsharpCtx)
|
{
|
LOGI_ASHARP("%s(%d): enter!\n", __FUNCTION__, __LINE__);
|
//need todo what?
|
|
if(pAsharpCtx->isIQParaUpdate){
|
LOGD_ASHARP(" update iq para\n");
|
#if(ASHARP_USE_JSON_PARA)
|
ASharpConfigSettingParam_json(pAsharpCtx, pAsharpCtx->eParamMode, pAsharpCtx->stExpInfo.snr_mode);
|
#else
|
ASharpConfigSettingParam(pAsharpCtx, pAsharpCtx->eParamMode, pAsharpCtx->stExpInfo.snr_mode);
|
#endif
|
pAsharpCtx->isIQParaUpdate = false;
|
}
|
|
LOGI_ASHARP("%s(%d): exit!\n", __FUNCTION__, __LINE__);
|
return ASHARP_RET_SUCCESS;
|
}
|
|
|
AsharpResult_t AsharpInit(AsharpContext_t **ppAsharpCtx, CamCalibDbContext_t *pCalibDb)
|
{
|
AsharpContext_t * pAsharpCtx;
|
|
LOGI_ASHARP("%s(%d): enter!\n", __FUNCTION__, __LINE__);
|
|
pAsharpCtx = (AsharpContext_t *)malloc(sizeof(AsharpContext_t));
|
if(pAsharpCtx == NULL) {
|
LOGE_ASHARP("%s(%d): malloc fail\n", __FUNCTION__, __LINE__);
|
return ASHARP_RET_NULL_POINTER;
|
}
|
|
memset(pAsharpCtx, 0x00, sizeof(AsharpContext_t));
|
pAsharpCtx->eState = ASHARP_STATE_INITIALIZED;
|
*ppAsharpCtx = pAsharpCtx;
|
pAsharpCtx->fStrength = 1.0;
|
|
//init params config
|
pAsharpCtx->eMode = ASHARP_OP_MODE_AUTO;
|
|
#if ASHARP_USE_XML_FILE
|
//get v1 params from xml file
|
pAsharpCtx->stSharpCalib =
|
*(CalibDb_Sharp_2_t*)(CALIBDB_GET_MODULE_PTR((void*)pCalibDb, sharp));
|
pAsharpCtx->stEdgeFltCalib =
|
*(CalibDb_EdgeFilter_2_t*)(CALIBDB_GET_MODULE_PTR((void*)pCalibDb, edgeFilter));
|
pAsharpCtx->mfnr_mode_3to1 =
|
((CalibDb_MFNR_2_t*)(CALIBDB_GET_MODULE_PTR((void*)pCalibDb, mfnr)))->mode_3to1;;
|
#endif
|
|
#ifdef RK_SIMULATOR_HW
|
//get v2 params from html file
|
FILE *fp2 = fopen("rkaiq_asharp_html_params.bin", "rb");
|
if(fp2 != NULL) {
|
memset(&pAsharpCtx->stAuto.stSharpParam, 0, sizeof(RKAsharp_Sharp_Params_t));
|
fread(&pAsharpCtx->stAuto.stSharpParam, 1, sizeof(RKAsharp_Sharp_Params_t), fp2);
|
memset(&pAsharpCtx->stAuto.stEdgefilterParams, 0, sizeof(RKAsharp_EdgeFilter_Params_t));
|
fread(&pAsharpCtx->stAuto.stEdgefilterParams, 1, sizeof(RKAsharp_EdgeFilter_Params_t), fp2);
|
fclose(fp2);
|
LOGD_ASHARP("oyyf: %s:(%d) read sharp html param file sucess! \n", __FUNCTION__, __LINE__);
|
} else {
|
LOGE_ASHARP("oyyf: %s:(%d) read sharp html param file failed! \n", __FUNCTION__, __LINE__);
|
return ASHARP_RET_FAILURE;
|
}
|
#endif
|
|
|
#if ASHARP_USE_XML_FILE
|
pAsharpCtx->stExpInfo.snr_mode = 0;
|
pAsharpCtx->eParamMode = ASHARP_PARAM_MODE_NORMAL;
|
ASharpConfigSettingParam(pAsharpCtx, pAsharpCtx->eParamMode, pAsharpCtx->stExpInfo.snr_mode);
|
#endif
|
|
LOGD_ASHARP("%s(%d): sharp %f %f %f %f %f %f", __FUNCTION__, __LINE__,
|
pAsharpCtx->stAuto.stSharpParam.rk_sharpen_params_V1.hratio[0],
|
pAsharpCtx->stAuto.stSharpParam.rk_sharpen_params_V1.lratio[0],
|
pAsharpCtx->stAuto.stSharpParam.rk_sharpen_params_V1.H_ratio[0],
|
pAsharpCtx->stAuto.stSharpParam.rk_sharpen_params_V1.M_ratio[0],
|
pAsharpCtx->stAuto.stSharpParam.rk_sharpen_params_V1.hbf_gain[0],
|
pAsharpCtx->stAuto.stSharpParam.rk_sharpen_params_V1.hbf_ratio[0]);
|
|
LOGI_ASHARP("%s(%d): exit!\n", __FUNCTION__, __LINE__);
|
return ASHARP_RET_SUCCESS;
|
}
|
|
|
|
AsharpResult_t AsharpInit_json(AsharpContext_t **ppAsharpCtx, CamCalibDbV2Context_t *pCalibDbV2)
|
{
|
AsharpContext_t * pAsharpCtx;
|
|
LOGI_ASHARP("%s(%d): enter!\n", __FUNCTION__, __LINE__);
|
|
pAsharpCtx = (AsharpContext_t *)malloc(sizeof(AsharpContext_t));
|
if(pAsharpCtx == NULL) {
|
LOGE_ASHARP("%s(%d): malloc fail\n", __FUNCTION__, __LINE__);
|
return ASHARP_RET_NULL_POINTER;
|
}
|
|
memset(pAsharpCtx, 0x00, sizeof(AsharpContext_t));
|
pAsharpCtx->eState = ASHARP_STATE_INITIALIZED;
|
*ppAsharpCtx = pAsharpCtx;
|
pAsharpCtx->fStrength = 1.0;
|
|
//init params config
|
pAsharpCtx->eMode = ASHARP_OP_MODE_AUTO;
|
|
#if ASHARP_USE_JSON_PARA
|
//get v1 params from xml file
|
|
CalibDbV2_SharpV1_t* calibv2_sharp_v1 =
|
(CalibDbV2_SharpV1_t*)(CALIBDBV2_GET_MODULE_PTR(pCalibDbV2, sharp_v1));
|
sharp_calibdbV2_assign(&pAsharpCtx->sharp_v1, calibv2_sharp_v1);
|
|
CalibDbV2_Edgefilter_t* calibv2_edgefilter_v1 =
|
(CalibDbV2_Edgefilter_t*)(CALIBDBV2_GET_MODULE_PTR(pCalibDbV2, edgefilter_v1));
|
edgefilter_calibdbV2_assign(&pAsharpCtx->edgefilter_v1, calibv2_edgefilter_v1);
|
|
CalibDbV2_MFNR_t* calibv2_mfnr_v1 =
|
(CalibDbV2_MFNR_t*)(CALIBDBV2_GET_MODULE_PTR(pCalibDbV2, mfnr_v1));
|
pAsharpCtx->mfnr_mode_3to1 = calibv2_mfnr_v1->TuningPara.mode_3to1;
|
#endif
|
|
#ifdef RK_SIMULATOR_HW
|
//get v2 params from html file
|
FILE *fp2 = fopen("rkaiq_asharp_html_params.bin", "rb");
|
if(fp2 != NULL) {
|
memset(&pAsharpCtx->stAuto.stSharpParam, 0, sizeof(RKAsharp_Sharp_Params_t));
|
fread(&pAsharpCtx->stAuto.stSharpParam, 1, sizeof(RKAsharp_Sharp_Params_t), fp2);
|
memset(&pAsharpCtx->stAuto.stEdgefilterParams, 0, sizeof(RKAsharp_EdgeFilter_Params_t));
|
fread(&pAsharpCtx->stAuto.stEdgefilterParams, 1, sizeof(RKAsharp_EdgeFilter_Params_t), fp2);
|
fclose(fp2);
|
LOGD_ASHARP("oyyf: %s:(%d) read sharp html param file sucess! \n", __FUNCTION__, __LINE__);
|
} else {
|
LOGE_ASHARP("oyyf: %s:(%d) read sharp html param file failed! \n", __FUNCTION__, __LINE__);
|
return ASHARP_RET_FAILURE;
|
}
|
#endif
|
|
|
#if ASHARP_USE_JSON_PARA
|
pAsharpCtx->stExpInfo.snr_mode = 0;
|
pAsharpCtx->eParamMode = ASHARP_PARAM_MODE_NORMAL;
|
ASharpConfigSettingParam_json(pAsharpCtx, pAsharpCtx->eParamMode, pAsharpCtx->stExpInfo.snr_mode);
|
#endif
|
|
LOGD_ASHARP("%s(%d): sharp %f %f %f %f %f %f", __FUNCTION__, __LINE__,
|
pAsharpCtx->stAuto.stSharpParam.rk_sharpen_params_V1.hratio[0],
|
pAsharpCtx->stAuto.stSharpParam.rk_sharpen_params_V1.lratio[0],
|
pAsharpCtx->stAuto.stSharpParam.rk_sharpen_params_V1.H_ratio[0],
|
pAsharpCtx->stAuto.stSharpParam.rk_sharpen_params_V1.M_ratio[0],
|
pAsharpCtx->stAuto.stSharpParam.rk_sharpen_params_V1.hbf_gain[0],
|
pAsharpCtx->stAuto.stSharpParam.rk_sharpen_params_V1.hbf_ratio[0]);
|
|
LOGI_ASHARP("%s(%d): exit!\n", __FUNCTION__, __LINE__);
|
return ASHARP_RET_SUCCESS;
|
}
|
|
|
//anr release
|
AsharpResult_t AsharpRelease(AsharpContext_t *pAsharpCtx)
|
{
|
LOGI_ASHARP("%s(%d): enter!\n", __FUNCTION__, __LINE__);
|
AsharpResult_t result = ASHARP_RET_SUCCESS;
|
|
if(pAsharpCtx == NULL) {
|
LOGE_ASHARP("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
|
return ASHARP_RET_NULL_POINTER;
|
}
|
|
result = AsharpStop(pAsharpCtx);
|
if (result != ASHARP_RET_SUCCESS) {
|
LOGE_ASHARP( "%s: AsharpStop() failed!\n", __FUNCTION__);
|
return (result);
|
}
|
|
// check state
|
if ((ASHARP_STATE_RUNNING == pAsharpCtx->eState)
|
|| (ASHARP_STATE_LOCKED == pAsharpCtx->eState)) {
|
return (ASHARP_RET_BUSY);
|
}
|
|
sharp_calibdbV2_free(&pAsharpCtx->sharp_v1);
|
edgefilter_calibdbV2_free(&pAsharpCtx->edgefilter_v1);
|
|
memset(pAsharpCtx, 0x00, sizeof(AsharpContext_t));
|
free(pAsharpCtx);
|
|
LOGI_ASHARP("%s(%d): exit!\n", __FUNCTION__, __LINE__);
|
return ASHARP_RET_SUCCESS;
|
}
|
|
//anr config
|
AsharpResult_t AsharpPrepare(AsharpContext_t *pAsharpCtx, AsharpConfig_t* pAsharpConfig)
|
{
|
LOGI_ASHARP("%s(%d): enter!\n", __FUNCTION__, __LINE__);
|
|
if(pAsharpCtx == NULL) {
|
LOGE_ASHARP("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
|
return ASHARP_RET_INVALID_PARM;
|
}
|
|
if(pAsharpConfig == NULL) {
|
LOGE_ASHARP("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
|
return ASHARP_RET_INVALID_PARM;
|
}
|
|
//pAsharpCtx->eMode = pAsharpConfig->eMode;
|
//pAsharpCtx->eState = pAsharpConfig->eState;
|
if(!!(pAsharpCtx->prepare_type & RK_AIQ_ALGO_CONFTYPE_UPDATECALIB)){
|
AsharpIQParaUpdate(pAsharpCtx);
|
}
|
|
AsharpStart(pAsharpCtx);
|
|
LOGI_ASHARP("%s(%d): exit!\n", __FUNCTION__, __LINE__);
|
return ASHARP_RET_SUCCESS;
|
}
|
|
//anr reconfig
|
AsharpResult_t AsharpReConfig(AsharpContext_t *pAsharpCtx, AsharpConfig_t* pAsharpConfig)
|
{
|
LOGI_ASHARP("%s(%d): enter!\n", __FUNCTION__, __LINE__);
|
//need todo what?
|
|
LOGI_ASHARP("%s(%d): exit!\n", __FUNCTION__, __LINE__);
|
return ASHARP_RET_SUCCESS;
|
}
|
|
|
//anr preprocess
|
AsharpResult_t AsharpPreProcess(AsharpContext_t *pAsharpCtx)
|
{
|
LOGI_ASHARP("%s(%d): enter!\n", __FUNCTION__, __LINE__);
|
//need todo what?
|
|
AsharpIQParaUpdate(pAsharpCtx);
|
|
LOGI_ASHARP("%s(%d): exit!\n", __FUNCTION__, __LINE__);
|
return ASHARP_RET_SUCCESS;
|
}
|
|
//anr process
|
AsharpResult_t AsharpProcess(AsharpContext_t *pAsharpCtx, AsharpExpInfo_t *pExpInfo)
|
{
|
LOGI_ASHARP("%s(%d): enter!\n", __FUNCTION__, __LINE__);
|
AsharpParamMode_t mode = ASHARP_PARAM_MODE_INVALID;
|
|
if(pAsharpCtx == NULL) {
|
LOGE_ASHARP("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
|
return ASHARP_RET_INVALID_PARM;
|
}
|
|
if(pExpInfo == NULL) {
|
LOGE_ASHARP("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
|
return ASHARP_RET_INVALID_PARM;
|
}
|
|
if(pAsharpCtx->eState != ASHARP_STATE_RUNNING){
|
return ASHARP_RET_SUCCESS;
|
}
|
|
AsharpParamModeProcess(pAsharpCtx, pExpInfo, &mode);
|
pExpInfo->mfnr_mode_3to1 = pAsharpCtx->mfnr_mode_3to1;
|
if(pExpInfo->mfnr_mode_3to1){
|
pExpInfo->snr_mode = pExpInfo->pre_snr_mode;
|
}else{
|
pExpInfo->snr_mode = pExpInfo->cur_snr_mode;
|
}
|
|
#if ASHARP_USE_XML_FILE
|
if(pExpInfo->snr_mode != pAsharpCtx->stExpInfo.snr_mode || pAsharpCtx->eParamMode != mode){
|
LOGD_ASHARP(" sharp mode:%d snr_mode:%d\n", mode, pExpInfo->snr_mode);
|
pAsharpCtx->eParamMode = mode;
|
#if(ASHARP_USE_JSON_PARA)
|
ASharpConfigSettingParam_json(pAsharpCtx, pAsharpCtx->eParamMode, pExpInfo->snr_mode);
|
#else
|
ASharpConfigSettingParam(pAsharpCtx, pAsharpCtx->eParamMode, pExpInfo->snr_mode);
|
#endif
|
}
|
#endif
|
memcpy(&pAsharpCtx->stExpInfo, pExpInfo, sizeof(AsharpExpInfo_t));
|
|
if(pAsharpCtx->eMode == ASHARP_OP_MODE_AUTO) {
|
//select param
|
select_sharpen_params_by_ISO(&pAsharpCtx->stAuto.stSharpParam, &pAsharpCtx->stAuto.stSharpParamSelect, pExpInfo);
|
select_edgefilter_params_by_ISO(&pAsharpCtx->stAuto.stEdgefilterParams, &pAsharpCtx->stAuto.stEdgefilterParamSelect, pExpInfo);
|
} else if(pAsharpCtx->eMode == ASHARP_OP_MODE_MANUAL) {
|
//TODO
|
}
|
|
LOGI_ASHARP("%s(%d): exit!\n", __FUNCTION__, __LINE__);
|
return ASHARP_RET_SUCCESS;
|
|
}
|
|
//anr get result
|
AsharpResult_t AsharpGetProcResult(AsharpContext_t *pAsharpCtx, AsharpProcResult_t* pAsharpResult)
|
{
|
LOGI_ASHARP("%s(%d): enter!\n", __FUNCTION__, __LINE__);
|
|
if(pAsharpCtx == NULL) {
|
LOGE_ASHARP("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
|
return ASHARP_RET_INVALID_PARM;
|
}
|
|
if(pAsharpResult == NULL) {
|
LOGE_ASHARP("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
|
return ASHARP_RET_INVALID_PARM;
|
}
|
|
if(pAsharpCtx->eMode == ASHARP_OP_MODE_AUTO) {
|
pAsharpResult->sharpEn = pAsharpCtx->stAuto.sharpEn;
|
pAsharpResult->edgeFltEn = pAsharpCtx->stAuto.edgeFltEn;
|
pAsharpResult->stSharpParamSelect = pAsharpCtx->stAuto.stSharpParamSelect;
|
pAsharpResult->stEdgefilterParamSelect = pAsharpCtx->stAuto.stEdgefilterParamSelect;
|
|
} else if(pAsharpCtx->eMode == ASHARP_OP_MODE_MANUAL) {
|
//TODO
|
pAsharpResult->sharpEn = pAsharpCtx->stManual.sharpEn;
|
pAsharpResult->stSharpParamSelect = pAsharpCtx->stManual.stSharpParamSelect;
|
pAsharpResult->edgeFltEn = pAsharpCtx->stManual.edgeFltEn;
|
pAsharpResult->stEdgefilterParamSelect = pAsharpCtx->stManual.stEdgefilterParamSelect;
|
pAsharpCtx->fStrength = 1.0;
|
}
|
|
rk_Sharp_fix_transfer(&pAsharpResult->stSharpParamSelect, &pAsharpResult->stSharpFix, pAsharpCtx->fStrength);
|
edgefilter_fix_transfer(&pAsharpResult->stEdgefilterParamSelect, &pAsharpResult->stEdgefltFix, pAsharpCtx->fStrength);
|
pAsharpResult->stSharpFix.stSharpFixV1.sharp_en = pAsharpResult->sharpEn ;
|
pAsharpResult->stEdgefltFix.edgeflt_en = pAsharpResult->edgeFltEn;
|
#if ASHARP_FIX_VALUE_PRINTF
|
Asharp_fix_Printf(&pAsharpResult->stSharpFix.stSharpFixV1, &pAsharpResult->stEdgefltFix);
|
#endif
|
|
LOGI_ASHARP("%s(%d): exit!\n", __FUNCTION__, __LINE__);
|
return ASHARP_RET_SUCCESS;
|
}
|
|
AsharpResult_t Asharp_fix_Printf(RKAsharp_Sharp_HW_Fix_t * pSharpCfg, RKAsharp_Edgefilter_Fix_t *pEdgefltCfg)
|
{
|
LOGD_ASHARP("%s:(%d) enter \n", __FUNCTION__, __LINE__);
|
int i = 0;
|
AsharpResult_t res = ASHARP_RET_SUCCESS;
|
|
if(pSharpCfg == NULL) {
|
LOGE_ASHARP("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
|
return ASHARP_RET_INVALID_PARM;
|
}
|
|
if(pEdgefltCfg == NULL) {
|
LOGE_ASHARP("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
|
return ASHARP_RET_INVALID_PARM;
|
}
|
|
//0x0080
|
LOGD_ASHARP("(0x0080) alpha_adp_en:%d yin_flt_en:%d edge_avg_en:%d\n",
|
pEdgefltCfg->alpha_adp_en,
|
pSharpCfg->yin_flt_en,
|
pSharpCfg->edge_avg_en);
|
|
|
//0x0084
|
LOGD_ASHARP("(0x0084) hbf_ratio:%d ehf_th:%d pbf_ratio:%d\n",
|
pSharpCfg->hbf_ratio,
|
pSharpCfg->ehf_th,
|
pSharpCfg->pbf_ratio);
|
|
//0x0088
|
LOGD_ASHARP("(0x0088) edge_thed:%d dir_min:%d smoth_th4:%d\n",
|
pEdgefltCfg->edge_thed,
|
pEdgefltCfg->dir_min,
|
pEdgefltCfg->smoth_th4);
|
|
//0x008c
|
LOGD_ASHARP("(0x008c) l_alpha:%d g_alpha:%d \n",
|
pEdgefltCfg->l_alpha,
|
pEdgefltCfg->g_alpha);
|
|
|
//0x0090
|
for(i = 0; i < 3; i++) {
|
LOGD_ASHARP("(0x0090) pbf_k[%d]:%d \n",
|
i, pSharpCfg->pbf_k[i]);
|
}
|
|
|
|
//0x0094 - 0x0098
|
for(i = 0; i < 6; i++) {
|
LOGD_ASHARP("(0x0094 - 0x0098) mrf_k[%d]:%d \n",
|
i, pSharpCfg->mrf_k[i]);
|
}
|
|
|
//0x009c -0x00a4
|
for(i = 0; i < 12; i++) {
|
LOGD_ASHARP("(0x009c -0x00a4) mbf_k[%d]:%d \n",
|
i, pSharpCfg->mbf_k[i]);
|
}
|
|
|
//0x00a8 -0x00ac
|
for(i = 0; i < 6; i++) {
|
LOGD_ASHARP("(0x00a8 -0x00ac) hrf_k[%d]:%d \n",
|
i, pSharpCfg->hrf_k[i]);
|
}
|
|
|
//0x00b0
|
for(i = 0; i < 3; i++) {
|
LOGD_ASHARP("(0x00b0) hbf_k[%d]:%d \n",
|
i, pSharpCfg->hbf_k[i]);
|
}
|
|
|
//0x00b4
|
for(i = 0; i < 3; i++) {
|
LOGD_ASHARP("(0x00b4) eg_coef[%d]:%d \n",
|
i, pEdgefltCfg->eg_coef[i]);
|
}
|
|
//0x00b8
|
for(i = 0; i < 3; i++) {
|
LOGD_ASHARP("(0x00b8) eg_smoth[%d]:%d \n",
|
i, pEdgefltCfg->eg_smoth[i]);
|
}
|
|
|
//0x00bc - 0x00c0
|
for(i = 0; i < 6; i++) {
|
LOGD_ASHARP("(0x00bc - 0x00c0) eg_gaus[%d]:%d \n",
|
i, pEdgefltCfg->eg_gaus[i]);
|
}
|
|
|
//0x00c4 - 0x00c8
|
for(i = 0; i < 6; i++) {
|
LOGD_ASHARP("(0x00c4 - 0x00c8) dog_k[%d]:%d \n",
|
i, pEdgefltCfg->dog_k[i]);
|
}
|
|
|
//0x00cc - 0x00d0
|
for(i = 0; i < 6; i++) {
|
LOGD_ASHARP("(0x00cc - 0x00d0) lum_point[%d]:%d \n",
|
i, pSharpCfg->lum_point[i]);
|
}
|
|
//0x00d4
|
LOGD_ASHARP("(0x00d4) pbf_shf_bits:%d mbf_shf_bits:%d hbf_shf_bits:%d\n",
|
pSharpCfg->pbf_shf_bits,
|
pSharpCfg->mbf_shf_bits,
|
pSharpCfg->hbf_shf_bits);
|
|
|
//0x00d8 - 0x00dc
|
for(i = 0; i < 8; i++) {
|
LOGD_ASHARP("(0x00d8 - 0x00dc) pbf_sigma[%d]:%d \n",
|
i, pSharpCfg->pbf_sigma[i]);
|
}
|
|
//0x00e0 - 0x00e4
|
for(i = 0; i < 8; i++) {
|
LOGD_ASHARP("(0x00e0 - 0x00e4) lum_clp_m[%d]:%d \n",
|
i, pSharpCfg->lum_clp_m[i]);
|
}
|
|
//0x00e8 - 0x00ec
|
for(i = 0; i < 8; i++) {
|
LOGD_ASHARP("(0x00e8 - 0x00ec) lum_min_m[%d]:%d \n",
|
i, pSharpCfg->lum_min_m[i]);
|
}
|
|
//0x00f0 - 0x00f4
|
for(i = 0; i < 8; i++) {
|
LOGD_ASHARP("(0x00f0 - 0x00f4) mbf_sigma[%d]:%d \n",
|
i, pSharpCfg->mbf_sigma[i]);
|
}
|
|
//0x00f8 - 0x00fc
|
for(i = 0; i < 8; i++) {
|
LOGD_ASHARP("(0x00f8 - 0x00fc) lum_clp_h[%d]:%d \n",
|
i, pSharpCfg->lum_clp_h[i]);
|
}
|
|
//0x0100 - 0x0104
|
for(i = 0; i < 8; i++) {
|
LOGD_ASHARP("(0x0100 - 0x0104) hbf_sigma[%d]:%d \n",
|
i, pSharpCfg->hbf_sigma[i]);
|
}
|
|
//0x0108 - 0x010c
|
for(i = 0; i < 8; i++) {
|
LOGD_ASHARP("(0x0108 - 0x010c) edge_lum_thed[%d]:%d \n",
|
i, pEdgefltCfg->edge_lum_thed[i]);
|
}
|
|
//0x0110 - 0x0114
|
for(i = 0; i < 8; i++) {
|
LOGD_ASHARP("(0x0110 - 0x0114) clamp_pos[%d]:%d \n",
|
i, pEdgefltCfg->clamp_pos[i]);
|
}
|
|
//0x0118 - 0x011c
|
for(i = 0; i < 8; i++) {
|
LOGD_ASHARP("(0x0118 - 0x011c) clamp_neg[%d]:%d \n",
|
i, pEdgefltCfg->clamp_neg[i]);
|
}
|
|
//0x0120 - 0x0124
|
for(i = 0; i < 8; i++) {
|
LOGD_ASHARP("(0x0120 - 0x0124) detail_alpha[%d]:%d \n",
|
i, pEdgefltCfg->detail_alpha[i]);
|
}
|
|
//0x0128
|
LOGD_ASHARP("(0x0128) rfl_ratio:%d rfh_ratio:%d\n",
|
pSharpCfg->rfl_ratio, pSharpCfg->rfh_ratio);
|
|
// mf/hf ratio
|
|
//0x012C
|
LOGD_ASHARP("(0x012C) m_ratio:%d h_ratio:%d\n",
|
pSharpCfg->m_ratio, pSharpCfg->h_ratio);
|
|
LOGD_ASHARP("%s:(%d) exit \n", __FUNCTION__, __LINE__);
|
|
return res;
|
}
|
|
AsharpResult_t ASharpConfigSettingParam(AsharpContext_t *pAsharpCtx, AsharpParamMode_t param_mode, int snr_mode)
|
{
|
char mode_name[CALIBDB_MAX_MODE_NAME_LENGTH];
|
char snr_name[CALIBDB_NR_SHARP_NAME_LENGTH];
|
memset(mode_name, 0x00, sizeof(mode_name));
|
memset(snr_name, 0x00, sizeof(snr_name));
|
|
if(pAsharpCtx == NULL) {
|
LOGE_ASHARP("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
|
return ASHARP_RET_NULL_POINTER;
|
}
|
|
|
if(param_mode == ASHARP_PARAM_MODE_NORMAL){
|
sprintf(mode_name, "%s", "normal");
|
}else if(param_mode == ASHARP_PARAM_MODE_HDR){
|
sprintf(mode_name, "%s", "hdr");
|
}else if(param_mode == ASHARP_PARAM_MODE_GRAY){
|
sprintf(mode_name, "%s", "gray");
|
}else{
|
LOGE_ASHARP("%s(%d): not support mode cell name!\n", __FUNCTION__, __LINE__);
|
sprintf(mode_name, "%s", "normal");
|
}
|
|
if(snr_mode == 1){
|
sprintf(snr_name, "%s", "HSNR");
|
}else if(snr_mode == 0){
|
sprintf(snr_name, "%s", "LSNR");
|
}else{
|
LOGE_ASHARP("%s(%d): not support snr mode!\n", __FUNCTION__, __LINE__);
|
sprintf(snr_name, "%s", "LSNR");
|
}
|
|
pAsharpCtx->stAuto.sharpEn = pAsharpCtx->stSharpCalib.enable;
|
sharp_config_setting_param_v1(&pAsharpCtx->stAuto.stSharpParam.rk_sharpen_params_V1, &pAsharpCtx->stSharpCalib, mode_name, snr_name);
|
pAsharpCtx->stAuto.edgeFltEn = pAsharpCtx->stEdgeFltCalib.enable;
|
edgefilter_config_setting_param(&pAsharpCtx->stAuto.stEdgefilterParams, &pAsharpCtx->stEdgeFltCalib, mode_name, snr_name);
|
|
return ASHARP_RET_SUCCESS;
|
}
|
|
AsharpResult_t AsharpParamModeProcess(AsharpContext_t *pAsharpCtx, AsharpExpInfo_t *pExpInfo, AsharpParamMode_t *mode)
|
{
|
AsharpResult_t res = ASHARP_RET_SUCCESS;
|
*mode = pAsharpCtx->eParamMode;
|
|
if(pAsharpCtx == NULL) {
|
LOGE_ASHARP("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
|
return ASHARP_RET_NULL_POINTER;
|
}
|
|
if(pAsharpCtx->isGrayMode){
|
*mode = ASHARP_PARAM_MODE_GRAY;
|
}else if(pExpInfo->hdr_mode == 0){
|
*mode = ASHARP_PARAM_MODE_NORMAL;
|
}else if(pExpInfo->hdr_mode >= 1){
|
*mode = ASHARP_PARAM_MODE_HDR;
|
}else{
|
*mode = ASHARP_PARAM_MODE_NORMAL;
|
}
|
|
return res;
|
}
|
|
|
AsharpResult_t ASharpConfigSettingParam_json(AsharpContext_t *pAsharpCtx, AsharpParamMode_t param_mode, int snr_mode)
|
{
|
char mode_name[CALIBDB_MAX_MODE_NAME_LENGTH];
|
char snr_name[CALIBDB_NR_SHARP_NAME_LENGTH];
|
memset(mode_name, 0x00, sizeof(mode_name));
|
memset(snr_name, 0x00, sizeof(snr_name));
|
|
if(pAsharpCtx == NULL) {
|
LOGE_ASHARP("%s(%d): null pointer\n", __FUNCTION__, __LINE__);
|
return ASHARP_RET_NULL_POINTER;
|
}
|
|
|
if(param_mode == ASHARP_PARAM_MODE_NORMAL){
|
sprintf(mode_name, "%s", "normal");
|
}else if(param_mode == ASHARP_PARAM_MODE_HDR){
|
sprintf(mode_name, "%s", "hdr");
|
}else if(param_mode == ASHARP_PARAM_MODE_GRAY){
|
sprintf(mode_name, "%s", "gray");
|
}else{
|
LOGE_ASHARP("%s(%d): not support mode cell name!\n", __FUNCTION__, __LINE__);
|
sprintf(mode_name, "%s", "normal");
|
}
|
|
if(snr_mode == 1){
|
sprintf(snr_name, "%s", "HSNR");
|
}else if(snr_mode == 0){
|
sprintf(snr_name, "%s", "LSNR");
|
}else{
|
LOGE_ASHARP("%s(%d): not support snr mode!\n", __FUNCTION__, __LINE__);
|
sprintf(snr_name, "%s", "LSNR");
|
}
|
|
pAsharpCtx->stAuto.sharpEn = pAsharpCtx->sharp_v1.TuningPara.enable;
|
sharp_config_setting_param_v1_json(&pAsharpCtx->stAuto.stSharpParam.rk_sharpen_params_V1, &pAsharpCtx->sharp_v1, mode_name, snr_name);
|
pAsharpCtx->stAuto.edgeFltEn = pAsharpCtx->edgefilter_v1.TuningPara.enable;
|
edgefilter_config_setting_param_json(&pAsharpCtx->stAuto.stEdgefilterParams, &pAsharpCtx->edgefilter_v1, mode_name, snr_name);
|
|
return ASHARP_RET_SUCCESS;
|
}
|
|
RKAIQ_END_DECLARE
|