/******************************************************************************
|
*
|
* Copyright 2019, Fuzhou Rockchip Electronics Co.Ltd. All rights reserved.
|
* No part of this work may be reproduced, modified, distributed, transmitted,
|
* transcribed, or translated into any language or computer format, in any form
|
* or by any means without written permission of:
|
* Fuzhou Rockchip Electronics Co.Ltd .
|
*
|
*
|
*****************************************************************************/
|
/**
|
* @file adrc.cpp
|
*
|
* @brief
|
* ADD_DESCRIPTION_HERE
|
*
|
*****************************************************************************/
|
#include "math.h"
|
//#include "rk_aiq_types_adrc_algo_int.h"
|
#include "xcam_log.h"
|
#include "rk_aiq_types_adrc_algo_prvt.h"
|
|
/******************************************************************************
|
* AdrcStart()
|
*****************************************************************************/
|
XCamReturn AdrcStart
|
(
|
AdrcContext_t* pAdrcCtx
|
) {
|
|
LOG1_ATMO( "%s:enter!\n", __FUNCTION__);
|
|
// initial checks
|
if (pAdrcCtx == NULL) {
|
return (XCAM_RETURN_ERROR_MEM);
|
}
|
|
if ((ADRC_STATE_RUNNING == pAdrcCtx->state)
|
|| (ADRC_STATE_LOCKED == pAdrcCtx->state)) {
|
return (XCAM_RETURN_ERROR_PARAM);
|
}
|
|
pAdrcCtx->state = ADRC_STATE_RUNNING;
|
|
LOG1_ATMO( "%s:exit!\n", __FUNCTION__);
|
return (XCAM_RETURN_NO_ERROR);
|
}
|
|
/******************************************************************************
|
* DrcGetCurrPara()
|
*****************************************************************************/
|
float DrcGetCurrPara
|
(
|
float inPara,
|
float* inMatrixX,
|
float* inMatrixY,
|
int Max_Knots
|
) {
|
LOG1_ATMO( "%s:enter!\n", __FUNCTION__);
|
float x1 = 0.0f;
|
float x2 = 0.0f;
|
float value1 = 0.0f;
|
float value2 = 0.0f;
|
float outPara = 0.0f;
|
|
if(inPara < inMatrixX[0])
|
outPara = inMatrixY[0];
|
else if (inPara >= inMatrixX[Max_Knots - 1])
|
outPara = inMatrixY[Max_Knots - 1];
|
else
|
for(int i = 0; i < Max_Knots - 1; i++)
|
{
|
if(inPara >= inMatrixX[i] && inPara < inMatrixX[i + 1])
|
{
|
x1 = inMatrixX[i];
|
x2 = inMatrixX[i + 1];
|
value1 = inMatrixY[i];
|
value2 = inMatrixY[i + 1];
|
outPara = value1 + (inPara - x1) * (value1 - value2) / (x1 - x2);
|
break;
|
}
|
else
|
continue;
|
}
|
|
return outPara;
|
LOG1_ATMO( "%s:exit!\n", __FUNCTION__);
|
}
|
|
/******************************************************************************
|
* DrcGetCurrPara()
|
*****************************************************************************/
|
int DrcGetCurrParaInt
|
(
|
float inPara,
|
float* inMatrixX,
|
int* inMatrixY,
|
int Max_Knots
|
) {
|
LOG1_ATMO( "%s:enter!\n", __FUNCTION__);
|
float x1 = 0.0f;
|
float x2 = 0.0f;
|
float value1 = 0.0f;
|
float value2 = 0.0f;
|
int outPara = 0;
|
|
if(inPara < inMatrixX[0])
|
outPara = inMatrixY[0];
|
else if (inPara >= inMatrixX[Max_Knots - 1])
|
outPara = inMatrixY[Max_Knots - 1];
|
else
|
for(int i = 0; i < Max_Knots - 1; i++)
|
{
|
if(inPara >= inMatrixX[i] && inPara < inMatrixX[i + 1])
|
{
|
x1 = inMatrixX[i];
|
x2 = inMatrixX[i + 1];
|
value1 = inMatrixY[i];
|
value2 = inMatrixY[i + 1];
|
outPara = (int)(value1 + (inPara - x1) * (value1 - value2) / (x1 - x2));
|
break;
|
}
|
else
|
continue;
|
}
|
|
return outPara;
|
LOG1_ATMO( "%s:exit!\n", __FUNCTION__);
|
}
|
|
/******************************************************************************
|
* AdrcStop()
|
*****************************************************************************/
|
XCamReturn AdrcStop
|
(
|
AdrcContext_t* pAdrcCtx
|
) {
|
|
LOG1_ATMO( "%s:enter!\n", __FUNCTION__);
|
|
// initial checks
|
if (pAdrcCtx == NULL) {
|
return (XCAM_RETURN_ERROR_MEM);
|
}
|
|
// before stopping, unlock the AHDR if locked
|
if (ADRC_STATE_LOCKED == pAdrcCtx->state) {
|
return (XCAM_RETURN_ERROR_PARAM);
|
}
|
|
pAdrcCtx->state = ADRC_STATE_STOPPED;
|
|
LOG1_ATMO( "%s:exit!\n", __FUNCTION__);
|
|
return (XCAM_RETURN_NO_ERROR);
|
}
|
/******************************************************************************
|
* DrcProcApiMalloc()
|
***************************************************************************/
|
void DrcProcApiMalloc
|
(
|
AdrcConfig_t* pConfig,
|
drcAttr_t* pDrcAttr,
|
DrcCalibDB_t* pCalibDb
|
) {
|
LOG1_ATMO( "%s:enter!\n", __FUNCTION__);
|
|
// initial checks
|
DCT_ASSERT(pConfig != NULL);
|
DCT_ASSERT(pCalibDb != NULL);
|
DCT_ASSERT(pDrcAttr != NULL);
|
|
int New_DrcGain_EnvLv_len = 1;
|
int New_HiLit_EnvLv_len = 1;
|
int New_Local_EnvLv_len = 1;
|
|
if(CHECK_ISP_HW_V21()) {
|
if(pDrcAttr->opMode == DRC_OPMODE_MANU) {
|
New_DrcGain_EnvLv_len = 1;
|
New_HiLit_EnvLv_len = 1;
|
New_Local_EnvLv_len = 1;
|
}
|
else if(pDrcAttr->opMode == DRC_OPMODE_DRC_GAIN) {
|
New_DrcGain_EnvLv_len = 1;
|
New_HiLit_EnvLv_len = pCalibDb->Drc_v21.DrcTuningPara.HiLight.EnvLv_len;
|
New_Local_EnvLv_len = pCalibDb->Drc_v21.DrcTuningPara.LocalTMOSetting.LocalTMOData.EnvLv_len;
|
}
|
else if(pDrcAttr->opMode == DRC_OPMODE_HILIT) {
|
New_DrcGain_EnvLv_len = pCalibDb->Drc_v21.DrcTuningPara.DrcGain.EnvLv_len;
|
New_HiLit_EnvLv_len = 1;
|
New_Local_EnvLv_len = pCalibDb->Drc_v21.DrcTuningPara.LocalTMOSetting.LocalTMOData.EnvLv_len;
|
}
|
else if(pDrcAttr->opMode == DRC_OPMODE_LOCAL_TMO) {
|
New_DrcGain_EnvLv_len = pCalibDb->Drc_v21.DrcTuningPara.DrcGain.EnvLv_len;
|
New_HiLit_EnvLv_len = pCalibDb->Drc_v21.DrcTuningPara.HiLight.EnvLv_len;
|
New_Local_EnvLv_len = 1;
|
}
|
|
LOG1_ATMO( "%s: Pre DrcGain len:%d, Cur DrcGain len:%d\n", __FUNCTION__, pConfig->Drc_v21.DrcGain.len, New_DrcGain_EnvLv_len);
|
LOG1_ATMO( "%s: Pre HiLit len:%d, Cur HiLit len:%d\n", __FUNCTION__, pConfig->Drc_v21.HiLit.len, New_HiLit_EnvLv_len);
|
LOG1_ATMO( "%s: Pre Local len:%d, Cur Local len:%d\n", __FUNCTION__, pConfig->Drc_v21.Local.len, New_Local_EnvLv_len);
|
|
//drc gain
|
if(pConfig->Drc_v21.DrcGain.len != New_DrcGain_EnvLv_len) {
|
free(pConfig->Drc_v21.DrcGain.EnvLv);
|
free(pConfig->Drc_v21.DrcGain.DrcGain);
|
free(pConfig->Drc_v21.DrcGain.Alpha);
|
free(pConfig->Drc_v21.DrcGain.Clip);
|
pConfig->Drc_v21.DrcGain.len = New_DrcGain_EnvLv_len;
|
pConfig->Drc_v21.DrcGain.EnvLv = (float*)malloc(sizeof(float) * (New_DrcGain_EnvLv_len));
|
pConfig->Drc_v21.DrcGain.DrcGain = (float*)malloc(sizeof(float) * (New_DrcGain_EnvLv_len));
|
pConfig->Drc_v21.DrcGain.Alpha = (float*)malloc(sizeof(float) * (New_DrcGain_EnvLv_len));
|
pConfig->Drc_v21.DrcGain.Clip = (float*)malloc(sizeof(float) * (New_DrcGain_EnvLv_len));
|
}
|
|
//hilit
|
if(pConfig->Drc_v21.HiLit.len != New_HiLit_EnvLv_len) {
|
free(pConfig->Drc_v21.HiLit.EnvLv);
|
free(pConfig->Drc_v21.HiLit.Strength);
|
pConfig->Drc_v21.HiLit.len = New_HiLit_EnvLv_len;
|
pConfig->Drc_v21.HiLit.EnvLv = (float*)malloc(sizeof(float) * (New_HiLit_EnvLv_len));
|
pConfig->Drc_v21.HiLit.Strength = (float*)malloc(sizeof(float) * (New_HiLit_EnvLv_len));
|
}
|
|
//local
|
if(pConfig->Drc_v21.Local.len != New_Local_EnvLv_len) {
|
free(pConfig->Drc_v21.Local.EnvLv);
|
free(pConfig->Drc_v21.Local.LocalWeit);
|
free(pConfig->Drc_v21.Local.GlobalContrast);
|
free(pConfig->Drc_v21.Local.LoLitContrast);
|
pConfig->Drc_v21.Local.len = New_Local_EnvLv_len;
|
pConfig->Drc_v21.Local.EnvLv = (float*)malloc(sizeof(float) * (New_Local_EnvLv_len));
|
pConfig->Drc_v21.Local.LocalWeit = (float*)malloc(sizeof(float) * (New_Local_EnvLv_len));
|
pConfig->Drc_v21.Local.GlobalContrast = (float*)malloc(sizeof(float) * (New_Local_EnvLv_len));
|
pConfig->Drc_v21.Local.LoLitContrast = (float*)malloc(sizeof(float) * (New_Local_EnvLv_len));
|
}
|
}
|
else if(CHECK_ISP_HW_V30()) {
|
if(pDrcAttr->opMode == DRC_OPMODE_MANU) {
|
New_DrcGain_EnvLv_len = 1;
|
New_HiLit_EnvLv_len = 1;
|
New_Local_EnvLv_len = 1;
|
}
|
else if(pDrcAttr->opMode == DRC_OPMODE_DRC_GAIN) {
|
New_DrcGain_EnvLv_len = 1;
|
New_HiLit_EnvLv_len = pCalibDb->Drc_v30.DrcTuningPara.HiLight.EnvLv_len;
|
New_Local_EnvLv_len = pCalibDb->Drc_v30.DrcTuningPara.LocalSetting.LocalData.EnvLv_len;
|
}
|
else if(pDrcAttr->opMode == DRC_OPMODE_HILIT) {
|
New_DrcGain_EnvLv_len = pCalibDb->Drc_v30.DrcTuningPara.DrcGain.EnvLv_len;
|
New_HiLit_EnvLv_len = 1;
|
New_Local_EnvLv_len = pCalibDb->Drc_v30.DrcTuningPara.LocalSetting.LocalData.EnvLv_len;
|
}
|
else if(pDrcAttr->opMode == DRC_OPMODE_LOCAL_TMO) {
|
New_DrcGain_EnvLv_len = pCalibDb->Drc_v30.DrcTuningPara.DrcGain.EnvLv_len;
|
New_HiLit_EnvLv_len = pCalibDb->Drc_v30.DrcTuningPara.HiLight.EnvLv_len;
|
New_Local_EnvLv_len = 1;
|
}
|
|
LOG1_ATMO( "%s: Pre DrcGain len:%d, Cur DrcGain len:%d\n", __FUNCTION__, pConfig->Drc_v30.DrcGain.len, New_DrcGain_EnvLv_len);
|
LOG1_ATMO( "%s: Pre HiLit len:%d, Cur HiLit len:%d\n", __FUNCTION__, pConfig->Drc_v30.HiLit.len, New_HiLit_EnvLv_len);
|
LOG1_ATMO( "%s: Pre Local len:%d, Cur Local len:%d\n", __FUNCTION__, pConfig->Drc_v30.Local.len, New_Local_EnvLv_len);
|
|
//drc gain
|
if(pConfig->Drc_v30.DrcGain.len != New_DrcGain_EnvLv_len) {
|
free(pConfig->Drc_v30.DrcGain.EnvLv);
|
free(pConfig->Drc_v30.DrcGain.DrcGain);
|
free(pConfig->Drc_v30.DrcGain.Alpha);
|
free(pConfig->Drc_v30.DrcGain.Clip);
|
pConfig->Drc_v30.DrcGain.len = New_DrcGain_EnvLv_len;
|
pConfig->Drc_v30.DrcGain.EnvLv = (float*)malloc(sizeof(float) * (New_DrcGain_EnvLv_len));
|
pConfig->Drc_v30.DrcGain.DrcGain = (float*)malloc(sizeof(float) * (New_DrcGain_EnvLv_len));
|
pConfig->Drc_v30.DrcGain.Alpha = (float*)malloc(sizeof(float) * (New_DrcGain_EnvLv_len));
|
pConfig->Drc_v30.DrcGain.Clip = (float*)malloc(sizeof(float) * (New_DrcGain_EnvLv_len));
|
}
|
|
//hilit
|
if(pConfig->Drc_v30.HiLit.len != New_HiLit_EnvLv_len) {
|
free(pConfig->Drc_v30.HiLit.EnvLv);
|
free(pConfig->Drc_v30.HiLit.Strength);
|
pConfig->Drc_v30.HiLit.len = New_HiLit_EnvLv_len;
|
pConfig->Drc_v30.HiLit.EnvLv = (float*)malloc(sizeof(float) * (New_HiLit_EnvLv_len));
|
pConfig->Drc_v30.HiLit.Strength = (float*)malloc(sizeof(float) * (New_HiLit_EnvLv_len));
|
}
|
|
//local
|
if(pConfig->Drc_v30.Local.len != New_Local_EnvLv_len) {
|
free(pConfig->Drc_v30.Local.EnvLv);
|
free(pConfig->Drc_v30.Local.LocalWeit);
|
free(pConfig->Drc_v30.Local.LocalAutoEnable);
|
free(pConfig->Drc_v30.Local.LocalAutoWeit);
|
free(pConfig->Drc_v30.Local.GlobalContrast);
|
free(pConfig->Drc_v30.Local.LoLitContrast);
|
pConfig->Drc_v30.Local.len = New_Local_EnvLv_len;
|
pConfig->Drc_v30.Local.EnvLv = (float*)malloc(sizeof(float) * (New_Local_EnvLv_len));
|
pConfig->Drc_v30.Local.LocalWeit = (float*)malloc(sizeof(float) * (New_Local_EnvLv_len));
|
pConfig->Drc_v30.Local.LocalAutoEnable = (int*)malloc(sizeof(float) * (New_Local_EnvLv_len));
|
pConfig->Drc_v30.Local.LocalAutoWeit = (float*)malloc(sizeof(float) * (New_Local_EnvLv_len));
|
pConfig->Drc_v30.Local.GlobalContrast = (float*)malloc(sizeof(float) * (New_Local_EnvLv_len));
|
pConfig->Drc_v30.Local.LoLitContrast = (float*)malloc(sizeof(float) * (New_Local_EnvLv_len));
|
}
|
}
|
|
LOG1_ATMO( "%s:exit!\n", __FUNCTION__);
|
}
|
/******************************************************************************
|
* DrcPrepareJsonMalloc()
|
***************************************************************************/
|
void DrcPrepareJsonMalloc
|
(
|
AdrcConfig_t* pConfig,
|
DrcCalibDB_t* pCalibDb
|
) {
|
LOG1_ATMO( "%s:enter!\n", __FUNCTION__);
|
|
// initial checks
|
DCT_ASSERT(pConfig != NULL);
|
DCT_ASSERT(pCalibDb != NULL);
|
|
int New_DrcGain_EnvLv_len = 1;
|
int New_HiLit_EnvLv_len = 1;
|
int New_Local_EnvLv_len = 1;
|
|
if(CHECK_ISP_HW_V21()) {
|
New_DrcGain_EnvLv_len = pCalibDb->Drc_v21.DrcTuningPara.DrcGain.EnvLv_len;
|
New_HiLit_EnvLv_len = pCalibDb->Drc_v21.DrcTuningPara.HiLight.EnvLv_len;
|
New_Local_EnvLv_len = pCalibDb->Drc_v21.DrcTuningPara.LocalTMOSetting.LocalTMOData.EnvLv_len;
|
|
LOG1_ATMO( "%s: Pre DrcGain len:%d, Cur DrcGain len:%d\n", __FUNCTION__, pConfig->Drc_v21.DrcGain.len, New_DrcGain_EnvLv_len);
|
LOG1_ATMO( "%s: Pre HiLit len:%d, Cur HiLit len:%d\n", __FUNCTION__, pConfig->Drc_v21.HiLit.len, New_HiLit_EnvLv_len);
|
LOG1_ATMO( "%s: Pre Local len:%d, Cur Local len:%d\n", __FUNCTION__, pConfig->Drc_v21.Local.len, New_Local_EnvLv_len);
|
|
//drc gain
|
if(pConfig->Drc_v21.DrcGain.len != New_DrcGain_EnvLv_len) {
|
free(pConfig->Drc_v21.DrcGain.EnvLv);
|
free(pConfig->Drc_v21.DrcGain.DrcGain);
|
free(pConfig->Drc_v21.DrcGain.Alpha);
|
free(pConfig->Drc_v21.DrcGain.Clip);
|
pConfig->Drc_v21.DrcGain.len = New_DrcGain_EnvLv_len;
|
pConfig->Drc_v21.DrcGain.EnvLv = (float*)malloc(sizeof(float) * (New_DrcGain_EnvLv_len));
|
pConfig->Drc_v21.DrcGain.DrcGain = (float*)malloc(sizeof(float) * (New_DrcGain_EnvLv_len));
|
pConfig->Drc_v21.DrcGain.Alpha = (float*)malloc(sizeof(float) * (New_DrcGain_EnvLv_len));
|
pConfig->Drc_v21.DrcGain.Clip = (float*)malloc(sizeof(float) * (New_DrcGain_EnvLv_len));
|
}
|
|
//hilit
|
if(pConfig->Drc_v21.HiLit.len != New_HiLit_EnvLv_len) {
|
free(pConfig->Drc_v21.HiLit.EnvLv);
|
free(pConfig->Drc_v21.HiLit.Strength);
|
pConfig->Drc_v21.HiLit.len = New_HiLit_EnvLv_len;
|
pConfig->Drc_v21.HiLit.EnvLv = (float*)malloc(sizeof(float) * (New_HiLit_EnvLv_len));
|
pConfig->Drc_v21.HiLit.Strength = (float*)malloc(sizeof(float) * (New_HiLit_EnvLv_len));
|
}
|
|
//local
|
if(pConfig->Drc_v21.Local.len != New_Local_EnvLv_len) {
|
free(pConfig->Drc_v21.Local.EnvLv);
|
free(pConfig->Drc_v21.Local.LocalWeit);
|
free(pConfig->Drc_v21.Local.GlobalContrast);
|
free(pConfig->Drc_v21.Local.LoLitContrast);
|
pConfig->Drc_v21.Local.len = New_Local_EnvLv_len;
|
pConfig->Drc_v21.Local.EnvLv = (float*)malloc(sizeof(float) * (New_Local_EnvLv_len));
|
pConfig->Drc_v21.Local.LocalWeit = (float*)malloc(sizeof(float) * (New_Local_EnvLv_len));
|
pConfig->Drc_v21.Local.GlobalContrast = (float*)malloc(sizeof(float) * (New_Local_EnvLv_len));
|
pConfig->Drc_v21.Local.LoLitContrast = (float*)malloc(sizeof(float) * (New_Local_EnvLv_len));
|
}
|
}
|
else if(CHECK_ISP_HW_V30()) {
|
New_DrcGain_EnvLv_len = pCalibDb->Drc_v30.DrcTuningPara.DrcGain.EnvLv_len;
|
New_HiLit_EnvLv_len = pCalibDb->Drc_v30.DrcTuningPara.HiLight.EnvLv_len;
|
New_Local_EnvLv_len = pCalibDb->Drc_v30.DrcTuningPara.LocalSetting.LocalData.EnvLv_len;
|
|
LOG1_ATMO( "%s: Pre DrcGain len:%d, Cur DrcGain len:%d\n", __FUNCTION__, pConfig->Drc_v30.DrcGain.len, New_DrcGain_EnvLv_len);
|
LOG1_ATMO( "%s: Pre HiLit len:%d, Cur HiLit len:%d\n", __FUNCTION__, pConfig->Drc_v30.HiLit.len, New_HiLit_EnvLv_len);
|
LOG1_ATMO( "%s: Pre Local len:%d, Cur Local len:%d\n", __FUNCTION__, pConfig->Drc_v30.Local.len, New_Local_EnvLv_len);
|
|
//drc gain
|
if(pConfig->Drc_v30.DrcGain.len != New_DrcGain_EnvLv_len) {
|
free(pConfig->Drc_v30.DrcGain.EnvLv);
|
free(pConfig->Drc_v30.DrcGain.DrcGain);
|
free(pConfig->Drc_v30.DrcGain.Alpha);
|
free(pConfig->Drc_v30.DrcGain.Clip);
|
pConfig->Drc_v30.DrcGain.len = New_DrcGain_EnvLv_len;
|
pConfig->Drc_v30.DrcGain.EnvLv = (float*)malloc(sizeof(float) * (New_DrcGain_EnvLv_len));
|
pConfig->Drc_v30.DrcGain.DrcGain = (float*)malloc(sizeof(float) * (New_DrcGain_EnvLv_len));
|
pConfig->Drc_v30.DrcGain.Alpha = (float*)malloc(sizeof(float) * (New_DrcGain_EnvLv_len));
|
pConfig->Drc_v30.DrcGain.Clip = (float*)malloc(sizeof(float) * (New_DrcGain_EnvLv_len));
|
}
|
|
//hilit
|
if(pConfig->Drc_v30.HiLit.len != New_HiLit_EnvLv_len) {
|
free(pConfig->Drc_v30.HiLit.EnvLv);
|
free(pConfig->Drc_v30.HiLit.Strength);
|
pConfig->Drc_v30.HiLit.len = New_HiLit_EnvLv_len;
|
pConfig->Drc_v30.HiLit.EnvLv = (float*)malloc(sizeof(float) * (New_HiLit_EnvLv_len));
|
pConfig->Drc_v30.HiLit.Strength = (float*)malloc(sizeof(float) * (New_HiLit_EnvLv_len));
|
}
|
|
//local
|
if(pConfig->Drc_v30.Local.len != New_Local_EnvLv_len) {
|
free(pConfig->Drc_v30.Local.EnvLv);
|
free(pConfig->Drc_v30.Local.LocalWeit);
|
free(pConfig->Drc_v30.Local.LocalAutoEnable);
|
free(pConfig->Drc_v30.Local.LocalAutoWeit);
|
free(pConfig->Drc_v30.Local.GlobalContrast);
|
free(pConfig->Drc_v30.Local.LoLitContrast);
|
pConfig->Drc_v30.Local.len = New_Local_EnvLv_len;
|
pConfig->Drc_v30.Local.EnvLv = (float*)malloc(sizeof(float) * (New_Local_EnvLv_len));
|
pConfig->Drc_v30.Local.LocalWeit = (float*)malloc(sizeof(float) * (New_Local_EnvLv_len));
|
pConfig->Drc_v30.Local.LocalAutoEnable = (int*)malloc(sizeof(float) * (New_Local_EnvLv_len));
|
pConfig->Drc_v30.Local.LocalAutoWeit = (float*)malloc(sizeof(float) * (New_Local_EnvLv_len));
|
pConfig->Drc_v30.Local.GlobalContrast = (float*)malloc(sizeof(float) * (New_Local_EnvLv_len));
|
pConfig->Drc_v30.Local.LoLitContrast = (float*)malloc(sizeof(float) * (New_Local_EnvLv_len));
|
}
|
}
|
|
LOG1_ATMO( "%s:exit!\n", __FUNCTION__);
|
}
|
|
/******************************************************************************
|
* CalibrateDrcGainY()
|
*****************************************************************************/
|
void CalibrateDrcGainY( DrcProcRes_t *para, float DraGain, float alpha)
|
{
|
LOG1_ATMO("%s:Enter!\n", __FUNCTION__);
|
|
float tmp = 0;
|
float luma[17] = { 0, 256, 512, 768, 1024, 1280, 1536, 1792, 2048, 2304, 2560, 2816, 3072, 3328, 3584, 3840, 4096 };
|
float gainTable[17];
|
|
for(int i = 0; i < 17; ++i) {
|
tmp = luma[i];
|
tmp = 1 - alpha * pow((1 - tmp / 4096), 2);
|
gainTable[i] = 1024 * pow(DraGain, tmp);
|
if(CHECK_ISP_HW_V21())
|
para->Drc_v21.sw_drc_gain_y[i] = (int)(gainTable[i]) ;
|
else if(CHECK_ISP_HW_V30())
|
para->Drc_v30.gain_y[i] = (int)(gainTable[i]) ;
|
}
|
|
LOG1_ATMO("%s:Eixt!\n", __FUNCTION__);
|
}
|
|
/******************************************************************************
|
* ConfigV21()
|
*set default Config data
|
*****************************************************************************/
|
void ConfigV21
|
(
|
AdrcContext_t* pAdrcCtx
|
) {
|
LOGI_ATMO( "%s:enter!\n", __FUNCTION__);
|
|
// initial checks
|
DCT_ASSERT(pAdrcCtx != NULL);
|
|
//config default PrevData data
|
pAdrcCtx->PrevData.frameCnt = 0;
|
pAdrcCtx->PrevData.EnvLv = 0;
|
pAdrcCtx->PrevData.ApiMode = DRC_OPMODE_API_OFF;
|
pAdrcCtx->PrevData.HandleData.Drc_v21.DrcGain = 4.0;
|
pAdrcCtx->PrevData.HandleData.Drc_v21.Alpha = 0.2;
|
pAdrcCtx->PrevData.HandleData.Drc_v21.Clip = 16.0 ;
|
pAdrcCtx->PrevData.HandleData.Drc_v21.Strength = 0.01 ;
|
pAdrcCtx->PrevData.HandleData.Drc_v21.LocalWeit = 1.00 ;
|
pAdrcCtx->PrevData.HandleData.Drc_v21.GlobalContrast = 0 ;
|
pAdrcCtx->PrevData.HandleData.Drc_v21.LoLitContrast = 0;
|
|
//set default value for api
|
pAdrcCtx->drcAttr.stManualV21.Enable = true;
|
pAdrcCtx->drcAttr.stManualV21.DrcGain.Alpha = 0.1;
|
pAdrcCtx->drcAttr.stManualV21.DrcGain.DrcGain = 1;
|
pAdrcCtx->drcAttr.stManualV21.DrcGain.Clip = 1;
|
pAdrcCtx->drcAttr.stManualV21.HiLit.Strength = 0.0;
|
pAdrcCtx->drcAttr.stManualV21.LocalSetting.LocalData.LocalWeit = 1;
|
pAdrcCtx->drcAttr.stManualV21.LocalSetting.LocalData.GlobalContrast = 0.0;
|
pAdrcCtx->drcAttr.stManualV21.LocalSetting.LocalData.LoLitContrast = 0.0;
|
pAdrcCtx->drcAttr.stManualV21.LocalSetting.curPixWeit = 0.376471;
|
pAdrcCtx->drcAttr.stManualV21.LocalSetting.preFrameWeit = 0.8;
|
pAdrcCtx->drcAttr.stManualV21.LocalSetting.Range_force_sgm = 0.0;
|
pAdrcCtx->drcAttr.stManualV21.LocalSetting.Range_sgm_cur = 0.2;
|
pAdrcCtx->drcAttr.stManualV21.LocalSetting.Range_sgm_pre = 0.2;
|
pAdrcCtx->drcAttr.stManualV21.LocalSetting.Space_sgm_cur = 4068;
|
pAdrcCtx->drcAttr.stManualV21.LocalSetting.Space_sgm_pre = 3068;
|
pAdrcCtx->drcAttr.stManualV21.LocalSetting.Space_sgm_pre = 3068;
|
pAdrcCtx->drcAttr.stManualV21.Compress.Mode = COMPRESS_AUTO;
|
pAdrcCtx->drcAttr.stManualV21.Compress.Manual_curve[0] = 0;
|
pAdrcCtx->drcAttr.stManualV21.Compress.Manual_curve[1] = 558;
|
pAdrcCtx->drcAttr.stManualV21.Compress.Manual_curve[2] = 1087;
|
pAdrcCtx->drcAttr.stManualV21.Compress.Manual_curve[3] = 1588;
|
pAdrcCtx->drcAttr.stManualV21.Compress.Manual_curve[4] = 2063;
|
pAdrcCtx->drcAttr.stManualV21.Compress.Manual_curve[5] = 2515;
|
pAdrcCtx->drcAttr.stManualV21.Compress.Manual_curve[6] = 2944;
|
pAdrcCtx->drcAttr.stManualV21.Compress.Manual_curve[7] = 3353;
|
pAdrcCtx->drcAttr.stManualV21.Compress.Manual_curve[8] = 3744;
|
pAdrcCtx->drcAttr.stManualV21.Compress.Manual_curve[9] = 4473;
|
pAdrcCtx->drcAttr.stManualV21.Compress.Manual_curve[10] = 5139;
|
pAdrcCtx->drcAttr.stManualV21.Compress.Manual_curve[11] = 5751;
|
pAdrcCtx->drcAttr.stManualV21.Compress.Manual_curve[12] = 6316;
|
pAdrcCtx->drcAttr.stManualV21.Compress.Manual_curve[13] = 6838;
|
pAdrcCtx->drcAttr.stManualV21.Compress.Manual_curve[14] = 7322;
|
pAdrcCtx->drcAttr.stManualV21.Compress.Manual_curve[15] = 7772;
|
pAdrcCtx->drcAttr.stManualV21.Compress.Manual_curve[16] = 8192;
|
pAdrcCtx->drcAttr.stManualV21.Scale_y[0] = 0;
|
pAdrcCtx->drcAttr.stManualV21.Scale_y[1] = 2;
|
pAdrcCtx->drcAttr.stManualV21.Scale_y[2] = 20;
|
pAdrcCtx->drcAttr.stManualV21.Scale_y[3] = 76;
|
pAdrcCtx->drcAttr.stManualV21.Scale_y[4] = 193;
|
pAdrcCtx->drcAttr.stManualV21.Scale_y[5] = 381;
|
pAdrcCtx->drcAttr.stManualV21.Scale_y[6] = 631;
|
pAdrcCtx->drcAttr.stManualV21.Scale_y[7] = 772;
|
pAdrcCtx->drcAttr.stManualV21.Scale_y[8] = 919;
|
pAdrcCtx->drcAttr.stManualV21.Scale_y[9] = 1066;
|
pAdrcCtx->drcAttr.stManualV21.Scale_y[10] = 1211;
|
pAdrcCtx->drcAttr.stManualV21.Scale_y[11] = 1479;
|
pAdrcCtx->drcAttr.stManualV21.Scale_y[12] = 1700;
|
pAdrcCtx->drcAttr.stManualV21.Scale_y[13] = 1863;
|
pAdrcCtx->drcAttr.stManualV21.Scale_y[14] = 1968;
|
pAdrcCtx->drcAttr.stManualV21.Scale_y[15] = 2024;
|
pAdrcCtx->drcAttr.stManualV21.Scale_y[16] = 2048;
|
pAdrcCtx->drcAttr.stManualV21.Edge_Weit = 0.02;
|
pAdrcCtx->drcAttr.stManualV21.OutPutLongFrame = false;
|
pAdrcCtx->drcAttr.stManualV21.IIR_frame = 2;
|
|
pAdrcCtx->drcAttr.stDrcGain.DrcGain = 1;
|
pAdrcCtx->drcAttr.stDrcGain.Clip = 1;
|
pAdrcCtx->drcAttr.stDrcGain.Alpha = 0.2;
|
|
pAdrcCtx->drcAttr.stHiLit.Strength = 0.0;
|
|
pAdrcCtx->drcAttr.stLocalDataV21.LocalWeit = 1;
|
pAdrcCtx->drcAttr.stLocalDataV21.GlobalContrast = 0.0;
|
pAdrcCtx->drcAttr.stLocalDataV21.LoLitContrast = 0.0;
|
|
LOG1_ATMO( "%s:exit!\n", __FUNCTION__);
|
}
|
|
/******************************************************************************
|
* Config()
|
*set default Config data
|
*****************************************************************************/
|
void ConfigV30
|
(
|
AdrcContext_t* pAdrcCtx
|
) {
|
LOGI_ATMO( "%s:enter!\n", __FUNCTION__);
|
|
// initial checks
|
DCT_ASSERT(pAdrcCtx != NULL);
|
|
//config default PrevData data
|
pAdrcCtx->PrevData.frameCnt = 0;
|
pAdrcCtx->PrevData.EnvLv = 0;
|
pAdrcCtx->PrevData.MotionCoef = 0;
|
pAdrcCtx->PrevData.ApiMode = DRC_OPMODE_API_OFF;
|
pAdrcCtx->PrevData.HandleData.Drc_v30.DrcGain = 4.0;
|
pAdrcCtx->PrevData.HandleData.Drc_v30.Alpha = 0.2;
|
pAdrcCtx->PrevData.HandleData.Drc_v30.Clip = 16.0 ;
|
pAdrcCtx->PrevData.HandleData.Drc_v30.Strength = 0.01 ;
|
pAdrcCtx->PrevData.HandleData.Drc_v30.LocalWeit = 1.00 ;
|
pAdrcCtx->PrevData.HandleData.Drc_v30.LocalAutoEnable = 1 ;
|
pAdrcCtx->PrevData.HandleData.Drc_v30.LocalAutoWeit = 0.037477 ;
|
pAdrcCtx->PrevData.HandleData.Drc_v30.GlobalContrast = 0 ;
|
pAdrcCtx->PrevData.HandleData.Drc_v30.LoLitContrast = 0;
|
|
//set default value for api
|
pAdrcCtx->drcAttr.stManualV30.Enable = true;
|
pAdrcCtx->drcAttr.stManualV30.DrcGain.Alpha = 0.1;
|
pAdrcCtx->drcAttr.stManualV30.DrcGain.DrcGain = 1;
|
pAdrcCtx->drcAttr.stManualV30.DrcGain.Clip = 1;
|
pAdrcCtx->drcAttr.stManualV30.HiLight.Strength = 0.0;
|
pAdrcCtx->drcAttr.stManualV30.LocalSetting.LocalData.LocalWeit = 1;
|
pAdrcCtx->drcAttr.stManualV30.LocalSetting.LocalData.LocalAutoEnable = 1;
|
pAdrcCtx->drcAttr.stManualV30.LocalSetting.LocalData.LocalAutoWeit = 0.5;
|
pAdrcCtx->drcAttr.stManualV30.LocalSetting.LocalData.GlobalContrast = 0.0;
|
pAdrcCtx->drcAttr.stManualV30.LocalSetting.LocalData.LoLitContrast = 0.0;
|
pAdrcCtx->drcAttr.stManualV30.LocalSetting.curPixWeit = 0.376471;
|
pAdrcCtx->drcAttr.stManualV30.LocalSetting.preFrameWeit = 0.8;
|
pAdrcCtx->drcAttr.stManualV30.LocalSetting.Range_force_sgm = 0.0;
|
pAdrcCtx->drcAttr.stManualV30.LocalSetting.Range_sgm_cur = 0.2;
|
pAdrcCtx->drcAttr.stManualV30.LocalSetting.Range_sgm_pre = 0.2;
|
pAdrcCtx->drcAttr.stManualV30.LocalSetting.Space_sgm_cur = 4068;
|
pAdrcCtx->drcAttr.stManualV30.LocalSetting.Space_sgm_pre = 3068;
|
pAdrcCtx->drcAttr.stManualV30.LocalSetting.Space_sgm_pre = 3068;
|
pAdrcCtx->drcAttr.stManualV30.CompressSetting.Mode = COMPRESS_AUTO;
|
pAdrcCtx->drcAttr.stManualV30.CompressSetting.Manual_curve[0] = 0;
|
pAdrcCtx->drcAttr.stManualV30.CompressSetting.Manual_curve[1] = 558;
|
pAdrcCtx->drcAttr.stManualV30.CompressSetting.Manual_curve[2] = 1087;
|
pAdrcCtx->drcAttr.stManualV30.CompressSetting.Manual_curve[3] = 1588;
|
pAdrcCtx->drcAttr.stManualV30.CompressSetting.Manual_curve[4] = 2063;
|
pAdrcCtx->drcAttr.stManualV30.CompressSetting.Manual_curve[5] = 2515;
|
pAdrcCtx->drcAttr.stManualV30.CompressSetting.Manual_curve[6] = 2944;
|
pAdrcCtx->drcAttr.stManualV30.CompressSetting.Manual_curve[7] = 3353;
|
pAdrcCtx->drcAttr.stManualV30.CompressSetting.Manual_curve[8] = 3744;
|
pAdrcCtx->drcAttr.stManualV30.CompressSetting.Manual_curve[9] = 4473;
|
pAdrcCtx->drcAttr.stManualV30.CompressSetting.Manual_curve[10] = 5139;
|
pAdrcCtx->drcAttr.stManualV30.CompressSetting.Manual_curve[11] = 5751;
|
pAdrcCtx->drcAttr.stManualV30.CompressSetting.Manual_curve[12] = 6316;
|
pAdrcCtx->drcAttr.stManualV30.CompressSetting.Manual_curve[13] = 6838;
|
pAdrcCtx->drcAttr.stManualV30.CompressSetting.Manual_curve[14] = 7322;
|
pAdrcCtx->drcAttr.stManualV30.CompressSetting.Manual_curve[15] = 7772;
|
pAdrcCtx->drcAttr.stManualV30.CompressSetting.Manual_curve[16] = 8192;
|
pAdrcCtx->drcAttr.stManualV30.Scale_y[0] = 0;
|
pAdrcCtx->drcAttr.stManualV30.Scale_y[1] = 2;
|
pAdrcCtx->drcAttr.stManualV30.Scale_y[2] = 20;
|
pAdrcCtx->drcAttr.stManualV30.Scale_y[3] = 76;
|
pAdrcCtx->drcAttr.stManualV30.Scale_y[4] = 193;
|
pAdrcCtx->drcAttr.stManualV30.Scale_y[5] = 381;
|
pAdrcCtx->drcAttr.stManualV30.Scale_y[6] = 631;
|
pAdrcCtx->drcAttr.stManualV30.Scale_y[7] = 772;
|
pAdrcCtx->drcAttr.stManualV30.Scale_y[8] = 919;
|
pAdrcCtx->drcAttr.stManualV30.Scale_y[9] = 1066;
|
pAdrcCtx->drcAttr.stManualV30.Scale_y[10] = 1211;
|
pAdrcCtx->drcAttr.stManualV30.Scale_y[11] = 1479;
|
pAdrcCtx->drcAttr.stManualV30.Scale_y[12] = 1700;
|
pAdrcCtx->drcAttr.stManualV30.Scale_y[13] = 1863;
|
pAdrcCtx->drcAttr.stManualV30.Scale_y[14] = 1968;
|
pAdrcCtx->drcAttr.stManualV30.Scale_y[15] = 2024;
|
pAdrcCtx->drcAttr.stManualV30.Scale_y[16] = 2048;
|
pAdrcCtx->drcAttr.stManualV30.Edge_Weit = 0.02;
|
pAdrcCtx->drcAttr.stManualV30.OutPutLongFrame = false;
|
pAdrcCtx->drcAttr.stManualV30.IIR_frame = 2;
|
|
pAdrcCtx->drcAttr.stDrcGain.DrcGain = 1;
|
pAdrcCtx->drcAttr.stDrcGain.Clip = 1;
|
pAdrcCtx->drcAttr.stDrcGain.Alpha = 0.2;
|
|
pAdrcCtx->drcAttr.stHiLit.Strength = 0.0;
|
|
pAdrcCtx->drcAttr.stLocalDataV30.LocalWeit = 1;
|
pAdrcCtx->drcAttr.stLocalDataV30.LocalAutoEnable = 1;
|
pAdrcCtx->drcAttr.stLocalDataV30.LocalAutoWeit = 0.5;
|
pAdrcCtx->drcAttr.stLocalDataV30.GlobalContrast = 0.0;
|
pAdrcCtx->drcAttr.stLocalDataV30.LoLitContrast = 0.0;
|
|
|
LOG1_ATMO( "%s:exit!\n", __FUNCTION__);
|
}
|
|
void AdrcGetEnvLv
|
(
|
AdrcContext_t* pAdrcCtx,
|
AecPreResult_t AecHdrPreResult
|
) {
|
LOG1_ATMO( "%s:enter!\n", __FUNCTION__);
|
|
//transfer CurrAeResult data into AhdrHandle
|
switch (pAdrcCtx->FrameNumber)
|
{
|
case LINEAR_NUM:
|
pAdrcCtx->CurrAeResult.GlobalEnvLv = AecHdrPreResult.GlobalEnvLv[0];
|
pAdrcCtx->CurrAeResult.AEMaxRatio = 1.0;
|
break;
|
case HDR_2X_NUM:
|
pAdrcCtx->CurrAeResult.GlobalEnvLv = AecHdrPreResult.GlobalEnvLv[1];
|
//todo
|
pAdrcCtx->CurrAeResult.AEMaxRatio = 64.0;
|
break;
|
case HDR_3X_NUM:
|
if(CHECK_ISP_HW_V30()) {
|
pAdrcCtx->CurrAeResult.GlobalEnvLv = AecHdrPreResult.GlobalEnvLv[1];
|
//todo
|
pAdrcCtx->CurrAeResult.AEMaxRatio = 64.0;
|
}
|
break;
|
default:
|
LOGE_ATMO("%s: Wrong frame number in HDR mode!!!\n", __FUNCTION__);
|
break;
|
}
|
|
//Normalize the current envLv for AEC
|
pAdrcCtx->CurrData.EnvLv = (pAdrcCtx->CurrAeResult.GlobalEnvLv - MIN_ENV_LV) / (MAX_ENV_LV - MIN_ENV_LV);
|
pAdrcCtx->CurrData.EnvLv = LIMIT_VALUE(pAdrcCtx->CurrData.EnvLv, ENVLVMAX, ENVLVMIN);
|
|
LOG1_ATMO( "%s:exit!\n", __FUNCTION__);
|
}
|
|
void AdrcGetSensorInfo
|
(
|
AdrcContext_t* pAdrcCtx,
|
AecProcResult_t AecHdrProcResult
|
) {
|
LOG1_ATMO( "%s:enter!\n", __FUNCTION__);
|
|
pAdrcCtx->SensorInfo.LongFrmMode = AecHdrProcResult.LongFrmMode;
|
|
for(int i = 0; i < 3; i++)
|
{
|
#if 0 // TODO Merge
|
pAdrcCtx->SensorInfo.HdrMinGain[i] = AecHdrProcResult.HdrExpRange.stGainRange[i].Min;
|
pAdrcCtx->SensorInfo.HdrMaxGain[i] = AecHdrProcResult.HdrExpRange.stGainRange[i].Max;
|
pAdrcCtx->SensorInfo.HdrMinIntegrationTime[i] = AecHdrProcResult.HdrExpRange.stExpTimeRange[i].Min;
|
pAdrcCtx->SensorInfo.HdrMaxIntegrationTime[i] = AecHdrProcResult.HdrExpRange.stExpTimeRange[i].Max;
|
#endif
|
}
|
|
if(pAdrcCtx->FrameNumber == LINEAR_NUM) {
|
pAdrcCtx->SensorInfo.MaxExpoL = 0;
|
pAdrcCtx->SensorInfo.MinExpoL = 0;
|
}
|
else if(pAdrcCtx->FrameNumber == HDR_2X_NUM) {
|
pAdrcCtx->SensorInfo.MaxExpoL = pAdrcCtx->SensorInfo.HdrMaxGain[1] * pAdrcCtx->SensorInfo.HdrMaxIntegrationTime[1];
|
pAdrcCtx->SensorInfo.MinExpoL = pAdrcCtx->SensorInfo.HdrMinGain[1] * pAdrcCtx->SensorInfo.HdrMinIntegrationTime[1];
|
}
|
else if(pAdrcCtx->FrameNumber == HDR_3X_NUM) {
|
pAdrcCtx->SensorInfo.MaxExpoL = pAdrcCtx->SensorInfo.HdrMaxGain[2] * pAdrcCtx->SensorInfo.HdrMaxIntegrationTime[2];
|
pAdrcCtx->SensorInfo.MinExpoL = pAdrcCtx->SensorInfo.HdrMinGain[2] * pAdrcCtx->SensorInfo.HdrMinIntegrationTime[2];
|
}
|
|
pAdrcCtx->SensorInfo.MaxExpoS = pAdrcCtx->SensorInfo.HdrMaxGain[0] * pAdrcCtx->SensorInfo.HdrMaxIntegrationTime[0];
|
pAdrcCtx->SensorInfo.MinExpoS = pAdrcCtx->SensorInfo.HdrMinGain[0] * pAdrcCtx->SensorInfo.HdrMinIntegrationTime[0];
|
|
LOG1_ATMO( "%s:exit!\n", __FUNCTION__);
|
}
|
|
/******************************************************************************
|
* AdrcIQUpdateV21()
|
*
|
*****************************************************************************/
|
void AdrcIQUpdateV21
|
(
|
AdrcContext_t* pAdrcCtx
|
)
|
{
|
LOG1_ATMO("%s:enter!\n", __FUNCTION__);
|
|
//store enable
|
pAdrcCtx->CurrData.Enable = pAdrcCtx->Config.Drc_v21.Enable;
|
|
//get Drc gain
|
pAdrcCtx->CurrData.HandleData.Drc_v21.DrcGain = DrcGetCurrPara(pAdrcCtx->CurrData.EnvLv,
|
pAdrcCtx->Config.Drc_v21.DrcGain.EnvLv, pAdrcCtx->Config.Drc_v21.DrcGain.DrcGain, pAdrcCtx->Config.Drc_v21.DrcGain.len);
|
pAdrcCtx->CurrData.HandleData.Drc_v21.Alpha = DrcGetCurrPara(pAdrcCtx->CurrData.EnvLv,
|
pAdrcCtx->Config.Drc_v21.DrcGain.EnvLv, pAdrcCtx->Config.Drc_v21.DrcGain.Alpha, pAdrcCtx->Config.Drc_v21.DrcGain.len);
|
pAdrcCtx->CurrData.HandleData.Drc_v21.Clip = DrcGetCurrPara(pAdrcCtx->CurrData.EnvLv,
|
pAdrcCtx->Config.Drc_v21.DrcGain.EnvLv, pAdrcCtx->Config.Drc_v21.DrcGain.Clip, pAdrcCtx->Config.Drc_v21.DrcGain.len);
|
|
//get hi lit
|
pAdrcCtx->CurrData.HandleData.Drc_v21.Strength = DrcGetCurrPara(pAdrcCtx->CurrData.EnvLv,
|
pAdrcCtx->Config.Drc_v21.HiLit.EnvLv, pAdrcCtx->Config.Drc_v21.HiLit.Strength, pAdrcCtx->Config.Drc_v21.HiLit.len);
|
|
//get local
|
pAdrcCtx->CurrData.HandleData.Drc_v21.LocalWeit = DrcGetCurrPara(pAdrcCtx->CurrData.EnvLv,
|
pAdrcCtx->Config.Drc_v21.Local.EnvLv, pAdrcCtx->Config.Drc_v21.Local.LocalWeit, pAdrcCtx->Config.Drc_v21.Local.len);
|
pAdrcCtx->CurrData.HandleData.Drc_v21.GlobalContrast = DrcGetCurrPara(pAdrcCtx->CurrData.EnvLv,
|
pAdrcCtx->Config.Drc_v21.Local.EnvLv, pAdrcCtx->Config.Drc_v21.Local.GlobalContrast, pAdrcCtx->Config.Drc_v21.Local.len);
|
pAdrcCtx->CurrData.HandleData.Drc_v21.LoLitContrast = DrcGetCurrPara(pAdrcCtx->CurrData.EnvLv,
|
pAdrcCtx->Config.Drc_v21.Local.EnvLv, pAdrcCtx->Config.Drc_v21.Local.LoLitContrast, pAdrcCtx->Config.Drc_v21.Local.len);
|
|
//compress
|
pAdrcCtx->CurrData.HandleData.Drc_v21.Mode = pAdrcCtx->Config.Drc_v21.Compress.Mode;
|
for(int i = 0; i < ADRC_Y_NUM; i++)
|
pAdrcCtx->CurrData.HandleData.Drc_v21.Manual_curve[i] = pAdrcCtx->Config.Drc_v21.Compress.Manual_curve[i];
|
|
//others
|
if(0 != memcmp(&pAdrcCtx->CurrData.Others, &pAdrcCtx->Config.Drc_v21.Others, sizeof(DrcOhters_t)))
|
memcpy(&pAdrcCtx->CurrData.Others, &pAdrcCtx->Config.Drc_v21.Others, sizeof(DrcOhters_t));//load iq paras
|
|
LOG1_ATMO( "%s:exit!\n", __FUNCTION__);
|
}
|
|
/******************************************************************************
|
* AdrcIQUpdateV30()
|
*
|
*****************************************************************************/
|
void AdrcIQUpdateV30
|
(
|
AdrcContext_t* pAdrcCtx
|
)
|
{
|
LOG1_ATMO("%s:enter!\n", __FUNCTION__);
|
|
//store enable
|
pAdrcCtx->CurrData.Enable = pAdrcCtx->Config.Drc_v30.Enable;
|
|
//get Drc gain
|
pAdrcCtx->CurrData.HandleData.Drc_v30.DrcGain = DrcGetCurrPara(pAdrcCtx->CurrData.EnvLv,
|
pAdrcCtx->Config.Drc_v30.DrcGain.EnvLv, pAdrcCtx->Config.Drc_v30.DrcGain.DrcGain, pAdrcCtx->Config.Drc_v30.DrcGain.len);
|
pAdrcCtx->CurrData.HandleData.Drc_v30.Alpha = DrcGetCurrPara(pAdrcCtx->CurrData.EnvLv,
|
pAdrcCtx->Config.Drc_v30.DrcGain.EnvLv, pAdrcCtx->Config.Drc_v30.DrcGain.Alpha, pAdrcCtx->Config.Drc_v30.DrcGain.len);
|
pAdrcCtx->CurrData.HandleData.Drc_v30.Clip = DrcGetCurrPara(pAdrcCtx->CurrData.EnvLv,
|
pAdrcCtx->Config.Drc_v30.DrcGain.EnvLv, pAdrcCtx->Config.Drc_v30.DrcGain.Clip, pAdrcCtx->Config.Drc_v30.DrcGain.len);
|
|
//get hi lit
|
pAdrcCtx->CurrData.HandleData.Drc_v30.Strength = DrcGetCurrPara(pAdrcCtx->CurrData.EnvLv,
|
pAdrcCtx->Config.Drc_v30.HiLit.EnvLv, pAdrcCtx->Config.Drc_v30.HiLit.Strength, pAdrcCtx->Config.Drc_v30.HiLit.len);
|
|
//get local
|
pAdrcCtx->CurrData.HandleData.Drc_v30.LocalWeit = DrcGetCurrPara(pAdrcCtx->CurrData.EnvLv,
|
pAdrcCtx->Config.Drc_v30.Local.EnvLv, pAdrcCtx->Config.Drc_v30.Local.LocalWeit, pAdrcCtx->Config.Drc_v30.Local.len);
|
pAdrcCtx->CurrData.HandleData.Drc_v30.GlobalContrast = DrcGetCurrPara(pAdrcCtx->CurrData.EnvLv,
|
pAdrcCtx->Config.Drc_v30.Local.EnvLv, pAdrcCtx->Config.Drc_v30.Local.GlobalContrast, pAdrcCtx->Config.Drc_v30.Local.len);
|
pAdrcCtx->CurrData.HandleData.Drc_v30.LoLitContrast = DrcGetCurrPara(pAdrcCtx->CurrData.EnvLv,
|
pAdrcCtx->Config.Drc_v30.Local.EnvLv, pAdrcCtx->Config.Drc_v30.Local.LoLitContrast, pAdrcCtx->Config.Drc_v30.Local.len);
|
pAdrcCtx->CurrData.HandleData.Drc_v30.LocalAutoEnable = DrcGetCurrParaInt(pAdrcCtx->CurrData.EnvLv,
|
pAdrcCtx->Config.Drc_v30.Local.EnvLv, pAdrcCtx->Config.Drc_v30.Local.LocalAutoEnable, pAdrcCtx->Config.Drc_v30.Local.len);
|
pAdrcCtx->CurrData.HandleData.Drc_v30.LocalAutoWeit = DrcGetCurrPara(pAdrcCtx->CurrData.EnvLv,
|
pAdrcCtx->Config.Drc_v30.Local.EnvLv, pAdrcCtx->Config.Drc_v30.Local.LocalAutoWeit, pAdrcCtx->Config.Drc_v30.Local.len);
|
|
//compress
|
pAdrcCtx->CurrData.HandleData.Drc_v30.Mode = pAdrcCtx->Config.Drc_v30.Compress.Mode;
|
for(int i = 0; i < ADRC_Y_NUM; i++)
|
pAdrcCtx->CurrData.HandleData.Drc_v30.Manual_curve[i] = pAdrcCtx->Config.Drc_v30.Compress.Manual_curve[i];
|
|
//others
|
if(0 != memcmp(&pAdrcCtx->CurrData.Others, &pAdrcCtx->Config.Drc_v30.Others, sizeof(DrcOhters_t)))
|
memcpy(&pAdrcCtx->CurrData.Others, &pAdrcCtx->Config.Drc_v30.Others, sizeof(DrcOhters_t));//load iq paras
|
|
LOG1_ATMO( "%s:exit!\n", __FUNCTION__);
|
}
|
/******************************************************************************
|
* AdrcProcUpdateConfig()
|
*transfer html parameter into handle
|
***************************************************************************/
|
void AdrcProcUpdateConfig
|
(
|
AdrcContext_t* pAdrcCtx,
|
DrcCalibDB_t* pCalibDb,
|
drcAttr_t* pDrcAttr
|
) {
|
LOG1_ATMO( "%s:enter!\n", __FUNCTION__);
|
|
// initial checks
|
DCT_ASSERT(pAdrcCtx != NULL);
|
DCT_ASSERT(pDrcAttr != NULL);
|
DCT_ASSERT(pCalibDb != NULL);
|
|
if(CHECK_ISP_HW_V21()) {
|
if (pAdrcCtx->drcAttr.opMode > DRC_OPMODE_MANU) {
|
//drc gain
|
if(pAdrcCtx->drcAttr.opMode == DRC_OPMODE_DRC_GAIN) {
|
pAdrcCtx->Config.Drc_v21.DrcGain.EnvLv[0] = ADRCNORMALIZEMIN;
|
pAdrcCtx->Config.Drc_v21.DrcGain.DrcGain[0] = LIMIT_VALUE(pDrcAttr->stDrcGain.DrcGain, DRCGAINMAX, DRCGAINMIN);
|
pAdrcCtx->Config.Drc_v21.DrcGain.Alpha[0] = LIMIT_VALUE(pDrcAttr->stDrcGain.Alpha, ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v21.DrcGain.Clip[0] = LIMIT_VALUE(pDrcAttr->stDrcGain.Clip, CLIPMAX, CLIPMIN);
|
}
|
else
|
for (int i = 0; i < pAdrcCtx->Config.Drc_v21.DrcGain.len; i++ ) {
|
pAdrcCtx->Config.Drc_v21.DrcGain.EnvLv[i] = LIMIT_VALUE(pCalibDb->Drc_v21.DrcTuningPara.DrcGain.EnvLv[i], ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v21.DrcGain.DrcGain[i] = LIMIT_VALUE(pCalibDb->Drc_v21.DrcTuningPara.DrcGain.DrcGain[i], DRCGAINMAX, DRCGAINMIN);
|
pAdrcCtx->Config.Drc_v21.DrcGain.Alpha[i] = LIMIT_VALUE(pCalibDb->Drc_v21.DrcTuningPara.DrcGain.Alpha[i], ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v21.DrcGain.Clip[i] = LIMIT_VALUE(pCalibDb->Drc_v21.DrcTuningPara.DrcGain.Clip[i], CLIPMAX, CLIPMIN);
|
}
|
//hight ligjt
|
if(pAdrcCtx->drcAttr.opMode == DRC_OPMODE_HILIT) {
|
pAdrcCtx->Config.Drc_v21.HiLit.EnvLv[0] = ADRCNORMALIZEMIN;
|
pAdrcCtx->Config.Drc_v21.HiLit.Strength[0] = LIMIT_VALUE(pDrcAttr->stHiLit.Strength, ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
}
|
else
|
for (int i = 0; i < pAdrcCtx->Config.Drc_v21.HiLit.len; i++ ) {
|
pAdrcCtx->Config.Drc_v21.HiLit.EnvLv[i] = LIMIT_VALUE(pCalibDb->Drc_v21.DrcTuningPara.HiLight.EnvLv[i], ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v21.HiLit.Strength[i] = LIMIT_VALUE(pCalibDb->Drc_v21.DrcTuningPara.HiLight.Strength[i], ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
}
|
// local
|
if(pAdrcCtx->drcAttr.opMode == DRC_OPMODE_LOCAL_TMO) {
|
pAdrcCtx->Config.Drc_v21.Local.EnvLv[0] = ADRCNORMALIZEMIN;
|
pAdrcCtx->Config.Drc_v21.Local.LocalWeit[0] = LIMIT_VALUE(pDrcAttr->stLocalDataV21.LocalWeit, ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v21.Local.GlobalContrast[0] = LIMIT_VALUE(pDrcAttr->stLocalDataV21.GlobalContrast, ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v21.Local.LoLitContrast[0] = LIMIT_VALUE(pDrcAttr->stLocalDataV21.LoLitContrast, ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
}
|
else
|
for (int i = 0; i < pAdrcCtx->Config.Drc_v21.Local.len; i++ ) {
|
pAdrcCtx->Config.Drc_v21.Local.EnvLv[i] = LIMIT_VALUE(pCalibDb->Drc_v21.DrcTuningPara.LocalTMOSetting.LocalTMOData.EnvLv[i], ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v21.Local.LocalWeit[i] = LIMIT_VALUE(pCalibDb->Drc_v21.DrcTuningPara.LocalTMOSetting.LocalTMOData.LocalWeit[i], ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v21.Local.GlobalContrast[i] = LIMIT_VALUE(pCalibDb->Drc_v21.DrcTuningPara.LocalTMOSetting.LocalTMOData.GlobalContrast[i], ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v21.Local.LoLitContrast[i] = LIMIT_VALUE(pCalibDb->Drc_v21.DrcTuningPara.LocalTMOSetting.LocalTMOData.LoLitContrast[i], ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
}
|
//others
|
pAdrcCtx->Config.Drc_v21.OutPutLongFrame = pCalibDb->Drc_v21.DrcTuningPara.OutPutLongFrame;
|
pAdrcCtx->Config.Drc_v21.Others.curPixWeit = LIMIT_VALUE(pCalibDb->Drc_v21.DrcTuningPara.LocalTMOSetting.curPixWeit, ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v21.Others.preFrameWeit = LIMIT_VALUE(pCalibDb->Drc_v21.DrcTuningPara.LocalTMOSetting.preFrameWeit, ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v21.Others.Range_force_sgm = LIMIT_VALUE(pCalibDb->Drc_v21.DrcTuningPara.LocalTMOSetting.Range_force_sgm, ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v21.Others.Range_sgm_cur = LIMIT_VALUE(pCalibDb->Drc_v21.DrcTuningPara.LocalTMOSetting.Range_sgm_cur, ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v21.Others.Range_sgm_pre = LIMIT_VALUE(pCalibDb->Drc_v21.DrcTuningPara.LocalTMOSetting.Range_sgm_pre, ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v21.Others.Space_sgm_cur = LIMIT_VALUE(pCalibDb->Drc_v21.DrcTuningPara.LocalTMOSetting.Space_sgm_cur, SPACESGMMAX, SPACESGMMIN);
|
pAdrcCtx->Config.Drc_v21.Others.Space_sgm_pre = LIMIT_VALUE(pCalibDb->Drc_v21.DrcTuningPara.LocalTMOSetting.Space_sgm_pre, SPACESGMMAX, SPACESGMMIN);
|
//compress and scale y
|
pAdrcCtx->Config.Drc_v21.Compress.Mode = pCalibDb->Drc_v21.DrcTuningPara.CompressSetting.Mode;
|
for(int i = 0; i < ADRC_Y_NUM; i++ ) {
|
pAdrcCtx->Config.Drc_v21.Others.Scale_y[i] = LIMIT_VALUE(pCalibDb->Drc_v21.DrcTuningPara.Scale_y[i], SCALEYMAX, SCALEYMIN);
|
pAdrcCtx->Config.Drc_v21.Compress.Manual_curve[i] = LIMIT_VALUE(pCalibDb->Drc_v21.DrcTuningPara.CompressSetting.Manual_curve[i], MANUALCURVEMAX, MANUALCURVEMIN);
|
}
|
pAdrcCtx->Config.Drc_v21.Others.ByPassThr = LIMIT_VALUE(pCalibDb->Drc_v21.DrcTuningPara.ByPassThr, ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v21.Others.Edge_Weit = LIMIT_VALUE(pCalibDb->Drc_v21.DrcTuningPara.Edge_Weit, ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v21.Others.IIR_frame = LIMIT_VALUE(pCalibDb->Drc_v21.DrcTuningPara.IIR_frame, IIRFRAMEMAX, IIRFRAMEMIN);
|
pAdrcCtx->Config.Drc_v21.Others.Tolerance = LIMIT_VALUE(pCalibDb->Drc_v21.DrcTuningPara.Tolerance, ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v21.Others.damp = LIMIT_VALUE(pCalibDb->Drc_v21.DrcTuningPara.damp, ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
}
|
else if(pAdrcCtx->drcAttr.opMode == DRC_OPMODE_MANU) {
|
//drc gain
|
pAdrcCtx->Config.Drc_v21.DrcGain.EnvLv[0] = ADRCNORMALIZEMIN;
|
pAdrcCtx->Config.Drc_v21.DrcGain.DrcGain[0] = LIMIT_VALUE(pDrcAttr->stManualV21.DrcGain.DrcGain, DRCGAINMAX, DRCGAINMIN);
|
pAdrcCtx->Config.Drc_v21.DrcGain.Alpha[0] = LIMIT_VALUE(pDrcAttr->stManualV21.DrcGain.Alpha, ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v21.DrcGain.Clip[0] = LIMIT_VALUE(pDrcAttr->stManualV21.DrcGain.Clip, CLIPMAX, CLIPMIN);
|
//hight ligjt
|
pAdrcCtx->Config.Drc_v21.HiLit.EnvLv[0] = ADRCNORMALIZEMIN;
|
pAdrcCtx->Config.Drc_v21.HiLit.Strength[0] = LIMIT_VALUE(pDrcAttr->stManualV21.HiLit.Strength, ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
// local
|
pAdrcCtx->Config.Drc_v21.Local.EnvLv[0] = ADRCNORMALIZEMIN;
|
pAdrcCtx->Config.Drc_v21.Local.LocalWeit[0] = LIMIT_VALUE(pDrcAttr->stManualV21.LocalSetting.LocalData.LocalWeit, ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v21.Local.GlobalContrast[0] = LIMIT_VALUE(pDrcAttr->stManualV21.LocalSetting.LocalData.GlobalContrast, ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v21.Local.LoLitContrast[0] = LIMIT_VALUE(pDrcAttr->stManualV21.LocalSetting.LocalData.LoLitContrast, ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
//others
|
pAdrcCtx->Config.Drc_v21.OutPutLongFrame = pDrcAttr->stManualV21.OutPutLongFrame;
|
pAdrcCtx->Config.Drc_v21.Others.curPixWeit = LIMIT_VALUE(pDrcAttr->stManualV21.LocalSetting.curPixWeit, ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v21.Others.preFrameWeit = LIMIT_VALUE(pDrcAttr->stManualV21.LocalSetting.preFrameWeit, ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v21.Others.Range_force_sgm = LIMIT_VALUE(pDrcAttr->stManualV21.LocalSetting.Range_force_sgm, ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v21.Others.Range_sgm_cur = LIMIT_VALUE(pDrcAttr->stManualV21.LocalSetting.Range_sgm_cur, ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v21.Others.Range_sgm_pre = LIMIT_VALUE(pDrcAttr->stManualV21.LocalSetting.Range_sgm_pre, ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v21.Others.Space_sgm_cur = LIMIT_VALUE(pDrcAttr->stManualV21.LocalSetting.Space_sgm_cur, SPACESGMMAX, SPACESGMMIN);
|
pAdrcCtx->Config.Drc_v21.Others.Space_sgm_pre = LIMIT_VALUE(pDrcAttr->stManualV21.LocalSetting.Space_sgm_pre, SPACESGMMAX, SPACESGMMIN);
|
for(int i = 0; i < ADRC_Y_NUM; i++ )
|
pAdrcCtx->Config.Drc_v21.Others.Scale_y[i] = LIMIT_VALUE(pDrcAttr->stManualV21.Scale_y[i], SCALEYMAX, SCALEYMIN);
|
pAdrcCtx->Config.Drc_v21.Others.ByPassThr = ADRCNORMALIZEMIN;
|
pAdrcCtx->Config.Drc_v21.Others.Edge_Weit = LIMIT_VALUE(pDrcAttr->stManualV21.Edge_Weit, ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v21.Others.IIR_frame = LIMIT_VALUE(pDrcAttr->stManualV21.IIR_frame, IIRFRAMEMAX, IIRFRAMEMIN);
|
pAdrcCtx->Config.Drc_v21.Others.Tolerance = ADRCNORMALIZEMIN;
|
pAdrcCtx->Config.Drc_v21.Others.damp = ADRCNORMALIZEMIN;
|
}
|
}
|
else if(CHECK_ISP_HW_V30()) {
|
if(pAdrcCtx->drcAttr.opMode > DRC_OPMODE_MANU) {
|
//drc gain
|
if(pAdrcCtx->drcAttr.opMode == DRC_OPMODE_DRC_GAIN) {
|
pAdrcCtx->Config.Drc_v30.DrcGain.EnvLv[0] = ADRCNORMALIZEMIN;
|
pAdrcCtx->Config.Drc_v30.DrcGain.DrcGain[0] = LIMIT_VALUE(pDrcAttr->stDrcGain.DrcGain, DRCGAINMAX, DRCGAINMIN);
|
pAdrcCtx->Config.Drc_v30.DrcGain.Alpha[0] = LIMIT_VALUE(pDrcAttr->stDrcGain.Alpha, ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v30.DrcGain.Clip[0] = LIMIT_VALUE(pDrcAttr->stDrcGain.Clip, CLIPMAX, CLIPMIN);
|
}
|
else
|
for (int i = 0; i < pAdrcCtx->Config.Drc_v30.DrcGain.len; i++ ) {
|
pAdrcCtx->Config.Drc_v30.DrcGain.EnvLv[i] = LIMIT_VALUE(pCalibDb->Drc_v30.DrcTuningPara.DrcGain.EnvLv[i], ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v30.DrcGain.DrcGain[i] = LIMIT_VALUE(pCalibDb->Drc_v30.DrcTuningPara.DrcGain.DrcGain[i], DRCGAINMAX, DRCGAINMIN);
|
pAdrcCtx->Config.Drc_v30.DrcGain.Alpha[i] = LIMIT_VALUE(pCalibDb->Drc_v30.DrcTuningPara.DrcGain.Alpha[i], ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v30.DrcGain.Clip[i] = LIMIT_VALUE(pCalibDb->Drc_v30.DrcTuningPara.DrcGain.Clip[i], CLIPMAX, CLIPMIN);
|
}
|
//hight light
|
if(pAdrcCtx->drcAttr.opMode == DRC_OPMODE_DRC_GAIN) {
|
pAdrcCtx->Config.Drc_v30.HiLit.EnvLv[0] = ADRCNORMALIZEMIN;
|
pAdrcCtx->Config.Drc_v30.HiLit.Strength[0] = LIMIT_VALUE(pDrcAttr->stHiLit.Strength, ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
}
|
else
|
for (int i = 0; i < pAdrcCtx->Config.Drc_v30.HiLit.len; i++ ) {
|
pAdrcCtx->Config.Drc_v30.HiLit.EnvLv[i] = LIMIT_VALUE(pCalibDb->Drc_v30.DrcTuningPara.HiLight.EnvLv[i], ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v30.HiLit.Strength[i] = LIMIT_VALUE(pCalibDb->Drc_v30.DrcTuningPara.HiLight.Strength[i], ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
}
|
// local
|
if(pAdrcCtx->drcAttr.opMode == DRC_OPMODE_DRC_GAIN) {
|
pAdrcCtx->Config.Drc_v30.Local.EnvLv[0] = ADRCNORMALIZEMIN;
|
pAdrcCtx->Config.Drc_v30.Local.LocalWeit[0] = LIMIT_VALUE(pDrcAttr->stLocalDataV30.LocalWeit, ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v30.Local.LocalAutoEnable[0] = LIMIT_VALUE(pDrcAttr->stLocalDataV30.LocalAutoEnable, ADRCNORMALIZEINTMAX, ADRCNORMALIZEINTMIN);
|
pAdrcCtx->Config.Drc_v30.Local.LocalAutoWeit[0] = LIMIT_VALUE(pDrcAttr->stLocalDataV30.LocalAutoWeit, ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v30.Local.GlobalContrast[0] = LIMIT_VALUE(pDrcAttr->stLocalDataV30.GlobalContrast, ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v30.Local.LoLitContrast[0] = LIMIT_VALUE(pDrcAttr->stLocalDataV30.LoLitContrast, ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
}
|
else
|
for (int i = 0; i < pAdrcCtx->Config.Drc_v30.Local.len; i++ ) {
|
pAdrcCtx->Config.Drc_v30.Local.EnvLv[i] = LIMIT_VALUE(pCalibDb->Drc_v30.DrcTuningPara.LocalSetting.LocalData.EnvLv[i], ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v30.Local.LocalWeit[i] = LIMIT_VALUE(pCalibDb->Drc_v30.DrcTuningPara.LocalSetting.LocalData.LocalWeit[i], ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v30.Local.LocalAutoEnable[i] = LIMIT_VALUE(pCalibDb->Drc_v30.DrcTuningPara.LocalSetting.LocalData.LocalAutoEnable[i], ADRCNORMALIZEINTMAX, ADRCNORMALIZEINTMIN);
|
pAdrcCtx->Config.Drc_v30.Local.LocalAutoWeit[i] = LIMIT_VALUE(pCalibDb->Drc_v30.DrcTuningPara.LocalSetting.LocalData.LocalAutoWeit[i], ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v30.Local.GlobalContrast[i] = LIMIT_VALUE(pCalibDb->Drc_v30.DrcTuningPara.LocalSetting.LocalData.GlobalContrast[i], ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v30.Local.LoLitContrast[i] = LIMIT_VALUE(pCalibDb->Drc_v30.DrcTuningPara.LocalSetting.LocalData.LoLitContrast[i], ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
}
|
//others
|
pAdrcCtx->Config.Drc_v30.OutPutLongFrame = pCalibDb->Drc_v30.DrcTuningPara.OutPutLongFrame;
|
pAdrcCtx->Config.Drc_v30.Others.curPixWeit = LIMIT_VALUE(pCalibDb->Drc_v30.DrcTuningPara.LocalSetting.curPixWeit, ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v30.Others.preFrameWeit = LIMIT_VALUE(pCalibDb->Drc_v30.DrcTuningPara.LocalSetting.preFrameWeit, ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v30.Others.Range_force_sgm = LIMIT_VALUE(pCalibDb->Drc_v30.DrcTuningPara.LocalSetting.Range_force_sgm, ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v30.Others.Range_sgm_cur = LIMIT_VALUE(pCalibDb->Drc_v30.DrcTuningPara.LocalSetting.Range_sgm_cur, ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v30.Others.Range_sgm_pre = LIMIT_VALUE(pCalibDb->Drc_v30.DrcTuningPara.LocalSetting.Range_sgm_pre, ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v30.Others.Space_sgm_cur = LIMIT_VALUE(pCalibDb->Drc_v30.DrcTuningPara.LocalSetting.Space_sgm_cur, SPACESGMMAX, SPACESGMMIN);
|
pAdrcCtx->Config.Drc_v30.Others.Space_sgm_pre = LIMIT_VALUE(pCalibDb->Drc_v30.DrcTuningPara.LocalSetting.Space_sgm_pre, SPACESGMMAX, SPACESGMMIN);
|
//compress and scale y
|
pAdrcCtx->Config.Drc_v30.Compress.Mode = pCalibDb->Drc_v30.DrcTuningPara.CompressSetting.Mode;
|
for(int i = 0; i < ADRC_Y_NUM; i++ ) {
|
pAdrcCtx->Config.Drc_v30.Others.Scale_y[i] = LIMIT_VALUE(pCalibDb->Drc_v30.DrcTuningPara.Scale_y[i], SCALEYMAX, SCALEYMIN);
|
pAdrcCtx->Config.Drc_v30.Compress.Manual_curve[i] = LIMIT_VALUE(pCalibDb->Drc_v30.DrcTuningPara.CompressSetting.Manual_curve[i], MANUALCURVEMAX, MANUALCURVEMIN);
|
}
|
pAdrcCtx->Config.Drc_v30.Others.ByPassThr = LIMIT_VALUE(pCalibDb->Drc_v30.DrcTuningPara.ByPassThr, ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v30.Others.Edge_Weit = LIMIT_VALUE(pCalibDb->Drc_v30.DrcTuningPara.Edge_Weit, ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v30.Others.IIR_frame = LIMIT_VALUE(pCalibDb->Drc_v30.DrcTuningPara.IIR_frame, IIRFRAMEMAX, IIRFRAMEMIN);
|
pAdrcCtx->Config.Drc_v30.Others.Tolerance = LIMIT_VALUE(pCalibDb->Drc_v30.DrcTuningPara.Tolerance, ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v30.Others.damp = LIMIT_VALUE(pCalibDb->Drc_v30.DrcTuningPara.damp, ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
}
|
else if(pAdrcCtx->drcAttr.opMode == DRC_OPMODE_MANU) {
|
//drc gain
|
pAdrcCtx->Config.Drc_v30.DrcGain.EnvLv[0] = ADRCNORMALIZEMIN;
|
pAdrcCtx->Config.Drc_v30.DrcGain.DrcGain[0] = LIMIT_VALUE(pDrcAttr->stManualV30.DrcGain.DrcGain, DRCGAINMAX, DRCGAINMIN);
|
pAdrcCtx->Config.Drc_v30.DrcGain.Alpha[0] = LIMIT_VALUE(pDrcAttr->stManualV30.DrcGain.Alpha, ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v30.DrcGain.Clip[0] = LIMIT_VALUE(pDrcAttr->stManualV30.DrcGain.Clip, CLIPMAX, CLIPMIN);
|
//hight light
|
pAdrcCtx->Config.Drc_v30.HiLit.EnvLv[0] = ADRCNORMALIZEMIN;
|
pAdrcCtx->Config.Drc_v30.HiLit.Strength[0] = LIMIT_VALUE(pDrcAttr->stManualV30.HiLight.Strength, ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
// local
|
pAdrcCtx->Config.Drc_v30.Local.EnvLv[0] = ADRCNORMALIZEMIN;
|
pAdrcCtx->Config.Drc_v30.Local.LocalWeit[0] = LIMIT_VALUE(pDrcAttr->stManualV30.LocalSetting.LocalData.LocalWeit, ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v30.Local.LocalAutoEnable[0] = LIMIT_VALUE(pDrcAttr->stManualV30.LocalSetting.LocalData.LocalAutoEnable, ADRCNORMALIZEINTMAX, ADRCNORMALIZEINTMIN);
|
pAdrcCtx->Config.Drc_v30.Local.LocalAutoWeit[0] = LIMIT_VALUE(pDrcAttr->stManualV30.LocalSetting.LocalData.LocalAutoWeit, ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v30.Local.GlobalContrast[0] = LIMIT_VALUE(pDrcAttr->stManualV30.LocalSetting.LocalData.GlobalContrast, ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v30.Local.LoLitContrast[0] = LIMIT_VALUE(pDrcAttr->stManualV30.LocalSetting.LocalData.LoLitContrast, ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
//others
|
pAdrcCtx->Config.Drc_v30.OutPutLongFrame = pDrcAttr->stManualV30.OutPutLongFrame;
|
pAdrcCtx->Config.Drc_v30.Others.curPixWeit = LIMIT_VALUE(pDrcAttr->stManualV30.LocalSetting.curPixWeit, ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v30.Others.preFrameWeit = LIMIT_VALUE(pDrcAttr->stManualV30.LocalSetting.preFrameWeit, ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v30.Others.Range_force_sgm = LIMIT_VALUE(pDrcAttr->stManualV30.LocalSetting.Range_force_sgm, ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v30.Others.Range_sgm_cur = LIMIT_VALUE(pDrcAttr->stManualV30.LocalSetting.Range_sgm_cur, ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v30.Others.Range_sgm_pre = LIMIT_VALUE(pDrcAttr->stManualV30.LocalSetting.Range_sgm_pre, ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v30.Others.Space_sgm_cur = LIMIT_VALUE(pDrcAttr->stManualV30.LocalSetting.Space_sgm_cur, SPACESGMMAX, SPACESGMMIN);
|
pAdrcCtx->Config.Drc_v30.Others.Space_sgm_pre = LIMIT_VALUE(pDrcAttr->stManualV30.LocalSetting.Space_sgm_pre, SPACESGMMAX, SPACESGMMIN);
|
for(int i = 0; i < ADRC_Y_NUM; i++ )
|
pAdrcCtx->Config.Drc_v30.Others.Scale_y[i] = LIMIT_VALUE(pDrcAttr->stManualV30.Scale_y[i], SCALEYMAX, SCALEYMIN);
|
pAdrcCtx->Config.Drc_v30.Others.ByPassThr = ADRCNORMALIZEMIN;
|
pAdrcCtx->Config.Drc_v30.Others.Edge_Weit = LIMIT_VALUE(pDrcAttr->stManualV30.Edge_Weit, ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v30.Others.IIR_frame = LIMIT_VALUE(pDrcAttr->stManualV30.IIR_frame, IIRFRAMEMAX, IIRFRAMEMIN);
|
pAdrcCtx->Config.Drc_v30.Others.Tolerance = ADRCNORMALIZEMIN;
|
pAdrcCtx->Config.Drc_v30.Others.damp = ADRCNORMALIZEMIN;
|
}
|
}
|
|
LOG1_ATMO( "%s:exit!\n", __FUNCTION__);
|
}
|
/******************************************************************************
|
* AdrcPrePareJsonUpdateConfig()
|
*transfer html parameter into handle
|
***************************************************************************/
|
void AdrcPrePareJsonUpdateConfig
|
(
|
AdrcContext_t* pAdrcCtx,
|
DrcCalibDB_t* pCalibDb
|
) {
|
LOG1_ATMO( "%s:enter!\n", __FUNCTION__);
|
|
// initial checks
|
DCT_ASSERT(pAdrcCtx != NULL);
|
DCT_ASSERT(pCalibDb != NULL);
|
|
if(CHECK_ISP_HW_V21()) {
|
//drc gain
|
for (int i = 0; i < pAdrcCtx->Config.Drc_v21.DrcGain.len; i++ ) {
|
pAdrcCtx->Config.Drc_v21.DrcGain.EnvLv[i] = LIMIT_VALUE(pCalibDb->Drc_v21.DrcTuningPara.DrcGain.EnvLv[i], ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v21.DrcGain.DrcGain[i] = LIMIT_VALUE(pCalibDb->Drc_v21.DrcTuningPara.DrcGain.DrcGain[i], DRCGAINMAX, DRCGAINMIN);
|
pAdrcCtx->Config.Drc_v21.DrcGain.Alpha[i] = LIMIT_VALUE(pCalibDb->Drc_v21.DrcTuningPara.DrcGain.Alpha[i], ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v21.DrcGain.Clip[i] = LIMIT_VALUE(pCalibDb->Drc_v21.DrcTuningPara.DrcGain.Clip[i], CLIPMAX, CLIPMIN);
|
}
|
//hight light
|
for (int i = 0; i < pAdrcCtx->Config.Drc_v21.HiLit.len; i++ ) {
|
pAdrcCtx->Config.Drc_v21.HiLit.EnvLv[i] = LIMIT_VALUE(pCalibDb->Drc_v21.DrcTuningPara.HiLight.EnvLv[i], ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v21.HiLit.Strength[i] = LIMIT_VALUE(pCalibDb->Drc_v21.DrcTuningPara.HiLight.Strength[i], ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
}
|
// local
|
for (int i = 0; i < pAdrcCtx->Config.Drc_v21.Local.len; i++ ) {
|
pAdrcCtx->Config.Drc_v21.Local.EnvLv[i] = LIMIT_VALUE(pCalibDb->Drc_v21.DrcTuningPara.LocalTMOSetting.LocalTMOData.EnvLv[i], ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v21.Local.LocalWeit[i] = LIMIT_VALUE(pCalibDb->Drc_v21.DrcTuningPara.LocalTMOSetting.LocalTMOData.LocalWeit[i], ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v21.Local.GlobalContrast[i] = LIMIT_VALUE(pCalibDb->Drc_v21.DrcTuningPara.LocalTMOSetting.LocalTMOData.GlobalContrast[i], ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v21.Local.LoLitContrast[i] = LIMIT_VALUE(pCalibDb->Drc_v21.DrcTuningPara.LocalTMOSetting.LocalTMOData.LoLitContrast[i], ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
}
|
//others
|
pAdrcCtx->Config.Drc_v21.OutPutLongFrame = pCalibDb->Drc_v21.DrcTuningPara.OutPutLongFrame;
|
pAdrcCtx->Config.Drc_v21.Others.curPixWeit = LIMIT_VALUE(pCalibDb->Drc_v21.DrcTuningPara.LocalTMOSetting.curPixWeit, ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v21.Others.preFrameWeit = LIMIT_VALUE(pCalibDb->Drc_v21.DrcTuningPara.LocalTMOSetting.preFrameWeit, ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v21.Others.Range_force_sgm = LIMIT_VALUE(pCalibDb->Drc_v21.DrcTuningPara.LocalTMOSetting.Range_force_sgm, ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v21.Others.Range_sgm_cur = LIMIT_VALUE(pCalibDb->Drc_v21.DrcTuningPara.LocalTMOSetting.Range_sgm_cur, ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v21.Others.Range_sgm_pre = LIMIT_VALUE(pCalibDb->Drc_v21.DrcTuningPara.LocalTMOSetting.Range_sgm_pre, ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v21.Others.Space_sgm_cur = LIMIT_VALUE(pCalibDb->Drc_v21.DrcTuningPara.LocalTMOSetting.Space_sgm_cur, SPACESGMMAX, SPACESGMMIN);
|
pAdrcCtx->Config.Drc_v21.Others.Space_sgm_pre = LIMIT_VALUE(pCalibDb->Drc_v21.DrcTuningPara.LocalTMOSetting.Space_sgm_pre, SPACESGMMAX, SPACESGMMIN);
|
//compress and scale y
|
pAdrcCtx->Config.Drc_v21.Compress.Mode = pCalibDb->Drc_v21.DrcTuningPara.CompressSetting.Mode;
|
for(int i = 0; i < ADRC_Y_NUM; i++ ) {
|
pAdrcCtx->Config.Drc_v21.Others.Scale_y[i] = LIMIT_VALUE(pCalibDb->Drc_v21.DrcTuningPara.Scale_y[i], SCALEYMAX, SCALEYMIN);
|
pAdrcCtx->Config.Drc_v21.Compress.Manual_curve[i] = LIMIT_VALUE(pCalibDb->Drc_v21.DrcTuningPara.CompressSetting.Manual_curve[i], MANUALCURVEMAX, MANUALCURVEMIN);
|
}
|
pAdrcCtx->Config.Drc_v21.Others.ByPassThr = LIMIT_VALUE(pCalibDb->Drc_v21.DrcTuningPara.ByPassThr, ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v21.Others.Edge_Weit = LIMIT_VALUE(pCalibDb->Drc_v21.DrcTuningPara.Edge_Weit, ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v21.Others.IIR_frame = LIMIT_VALUE(pCalibDb->Drc_v21.DrcTuningPara.IIR_frame, IIRFRAMEMAX, IIRFRAMEMIN);
|
pAdrcCtx->Config.Drc_v21.Others.Tolerance = LIMIT_VALUE(pCalibDb->Drc_v21.DrcTuningPara.Tolerance, ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v21.Others.damp = LIMIT_VALUE(pCalibDb->Drc_v21.DrcTuningPara.damp, ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
}
|
else if(CHECK_ISP_HW_V30()) {
|
//drc gain
|
for (int i = 0; i < pAdrcCtx->Config.Drc_v30.DrcGain.len; i++ ) {
|
pAdrcCtx->Config.Drc_v30.DrcGain.EnvLv[i] = LIMIT_VALUE(pCalibDb->Drc_v30.DrcTuningPara.DrcGain.EnvLv[i], ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v30.DrcGain.DrcGain[i] = LIMIT_VALUE(pCalibDb->Drc_v30.DrcTuningPara.DrcGain.DrcGain[i], DRCGAINMAX, DRCGAINMIN);
|
pAdrcCtx->Config.Drc_v30.DrcGain.Alpha[i] = LIMIT_VALUE(pCalibDb->Drc_v30.DrcTuningPara.DrcGain.Alpha[i], ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v30.DrcGain.Clip[i] = LIMIT_VALUE(pCalibDb->Drc_v30.DrcTuningPara.DrcGain.Clip[i], CLIPMAX, CLIPMIN);
|
}
|
//hight light
|
for (int i = 0; i < pAdrcCtx->Config.Drc_v30.HiLit.len; i++ ) {
|
pAdrcCtx->Config.Drc_v30.HiLit.EnvLv[i] = LIMIT_VALUE(pCalibDb->Drc_v30.DrcTuningPara.HiLight.EnvLv[i], ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v30.HiLit.Strength[i] = LIMIT_VALUE(pCalibDb->Drc_v30.DrcTuningPara.HiLight.Strength[i], ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
}
|
// local
|
for (int i = 0; i < pAdrcCtx->Config.Drc_v30.Local.len; i++ ) {
|
pAdrcCtx->Config.Drc_v30.Local.EnvLv[i] = LIMIT_VALUE(pCalibDb->Drc_v30.DrcTuningPara.LocalSetting.LocalData.EnvLv[i], ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v30.Local.LocalWeit[i] = LIMIT_VALUE(pCalibDb->Drc_v30.DrcTuningPara.LocalSetting.LocalData.LocalWeit[i], ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v30.Local.LocalAutoEnable[i] = LIMIT_VALUE(pCalibDb->Drc_v30.DrcTuningPara.LocalSetting.LocalData.LocalAutoEnable[i], ADRCNORMALIZEINTMAX, ADRCNORMALIZEINTMIN);
|
pAdrcCtx->Config.Drc_v30.Local.LocalAutoWeit[i] = LIMIT_VALUE(pCalibDb->Drc_v30.DrcTuningPara.LocalSetting.LocalData.LocalAutoWeit[i], ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v30.Local.GlobalContrast[i] = LIMIT_VALUE(pCalibDb->Drc_v30.DrcTuningPara.LocalSetting.LocalData.GlobalContrast[i], ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v30.Local.LoLitContrast[i] = LIMIT_VALUE(pCalibDb->Drc_v30.DrcTuningPara.LocalSetting.LocalData.LoLitContrast[i], ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
}
|
//others
|
pAdrcCtx->Config.Drc_v30.OutPutLongFrame = pCalibDb->Drc_v30.DrcTuningPara.OutPutLongFrame;
|
pAdrcCtx->Config.Drc_v30.Others.curPixWeit = LIMIT_VALUE(pCalibDb->Drc_v30.DrcTuningPara.LocalSetting.curPixWeit, ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v30.Others.preFrameWeit = LIMIT_VALUE(pCalibDb->Drc_v30.DrcTuningPara.LocalSetting.preFrameWeit, ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v30.Others.Range_force_sgm = LIMIT_VALUE(pCalibDb->Drc_v30.DrcTuningPara.LocalSetting.Range_force_sgm, ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v30.Others.Range_sgm_cur = LIMIT_VALUE(pCalibDb->Drc_v30.DrcTuningPara.LocalSetting.Range_sgm_cur, ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v30.Others.Range_sgm_pre = LIMIT_VALUE(pCalibDb->Drc_v30.DrcTuningPara.LocalSetting.Range_sgm_pre, ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v30.Others.Space_sgm_cur = LIMIT_VALUE(pCalibDb->Drc_v30.DrcTuningPara.LocalSetting.Space_sgm_cur, SPACESGMMAX, SPACESGMMIN);
|
pAdrcCtx->Config.Drc_v30.Others.Space_sgm_pre = LIMIT_VALUE(pCalibDb->Drc_v30.DrcTuningPara.LocalSetting.Space_sgm_pre, SPACESGMMAX, SPACESGMMIN);
|
//compress and scale y
|
pAdrcCtx->Config.Drc_v30.Compress.Mode = pCalibDb->Drc_v30.DrcTuningPara.CompressSetting.Mode;
|
for(int i = 0; i < ADRC_Y_NUM; i++ ) {
|
pAdrcCtx->Config.Drc_v30.Others.Scale_y[i] = LIMIT_VALUE(pCalibDb->Drc_v30.DrcTuningPara.Scale_y[i], SCALEYMAX, SCALEYMIN);
|
pAdrcCtx->Config.Drc_v30.Compress.Manual_curve[i] = LIMIT_VALUE(pCalibDb->Drc_v30.DrcTuningPara.CompressSetting.Manual_curve[i], MANUALCURVEMAX, MANUALCURVEMIN);
|
}
|
pAdrcCtx->Config.Drc_v30.Others.ByPassThr = LIMIT_VALUE(pCalibDb->Drc_v30.DrcTuningPara.ByPassThr, ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v30.Others.Edge_Weit = LIMIT_VALUE(pCalibDb->Drc_v30.DrcTuningPara.Edge_Weit, ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v30.Others.IIR_frame = LIMIT_VALUE(pCalibDb->Drc_v30.DrcTuningPara.IIR_frame, IIRFRAMEMAX, IIRFRAMEMIN);
|
pAdrcCtx->Config.Drc_v30.Others.Tolerance = LIMIT_VALUE(pCalibDb->Drc_v30.DrcTuningPara.Tolerance, ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
pAdrcCtx->Config.Drc_v30.Others.damp = LIMIT_VALUE(pCalibDb->Drc_v30.DrcTuningPara.damp, ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
}
|
|
LOG1_ATMO( "%s:exit!\n", __FUNCTION__);
|
}
|
|
/******************************************************************************
|
* DrcEnableSetting()
|
*
|
*****************************************************************************/
|
void DrcEnableSetting
|
(
|
AdrcContext_t* pAdrcCtx
|
)
|
{
|
LOG1_ATMO("%s:enter!\n", __FUNCTION__);
|
|
if(CHECK_ISP_HW_V21()) {
|
if(pAdrcCtx->FrameNumber == HDR_2X_NUM)
|
pAdrcCtx->Config.Drc_v21.Enable = true;
|
else if(pAdrcCtx->FrameNumber == LINEAR_NUM) {
|
if(pAdrcCtx->drcAttr.opMode == DRC_OPMODE_API_OFF)
|
pAdrcCtx->Config.Drc_v21.Enable = pAdrcCtx->pCalibDB.Drc_v21.DrcTuningPara.Enable;
|
else if(pAdrcCtx->drcAttr.opMode == DRC_OPMODE_MANU)
|
pAdrcCtx->Config.Drc_v21.Enable = pAdrcCtx->drcAttr.stManualV21.Enable;
|
else if(pAdrcCtx->drcAttr.opMode >= DRC_OPMODE_DRC_GAIN && pAdrcCtx->drcAttr.opMode <= DRC_OPMODE_LOCAL_TMO)
|
pAdrcCtx->Config.Drc_v21.Enable = true;
|
else {
|
LOGE_ATMO( "%s: Drc api in WRONG MODE!!!, drc by pass!!!\n", __FUNCTION__);
|
pAdrcCtx->Config.Drc_v21.Enable = false;
|
}
|
}
|
}
|
else if(CHECK_ISP_HW_V30()) {
|
if(pAdrcCtx->FrameNumber == HDR_2X_NUM || pAdrcCtx->FrameNumber == HDR_3X_NUM)
|
pAdrcCtx->Config.Drc_v30.Enable = true;
|
else if(pAdrcCtx->FrameNumber == LINEAR_NUM) {
|
if(pAdrcCtx->drcAttr.opMode == DRC_OPMODE_API_OFF)
|
pAdrcCtx->Config.Drc_v30.Enable = pAdrcCtx->pCalibDB.Drc_v30.DrcTuningPara.Enable;
|
else if(pAdrcCtx->drcAttr.opMode == DRC_OPMODE_MANU)
|
pAdrcCtx->Config.Drc_v30.Enable = pAdrcCtx->drcAttr.stManualV30.Enable;
|
else if(pAdrcCtx->drcAttr.opMode >= DRC_OPMODE_DRC_GAIN && pAdrcCtx->drcAttr.opMode <= DRC_OPMODE_LOCAL_TMO)
|
pAdrcCtx->Config.Drc_v30.Enable = true;
|
else {
|
LOGE_ATMO( "%s: Drc api in WRONG MODE!!!, drc by pass!!!\n", __FUNCTION__);
|
pAdrcCtx->Config.Drc_v30.Enable = false;
|
}
|
}
|
}
|
|
LOG1_ATMO( "%s:exit!\n", __FUNCTION__);
|
}
|
|
/******************************************************************************
|
* AdrcDampingV21()
|
*****************************************************************************/
|
void AdrcDampingV21
|
(
|
CurrData_t* pCurrData,
|
AdrcPrevData_t* pPreData,
|
drc_OpMode_t opMode,
|
int FrameCnt
|
)
|
{
|
LOG1_ATMO("%s:Enter!\n", __FUNCTION__);
|
float Drc_damp = pCurrData->Others.damp;
|
bool enDamp;
|
bool ifHDRModeChange = pCurrData->frameCnt == pPreData->frameCnt ? false : true;
|
|
if(opMode != DRC_OPMODE_MANU && FrameCnt != 0 && !ifHDRModeChange)
|
{
|
float diff = 0.0;
|
|
diff = ABS(pCurrData->EnvLv - pPreData->EnvLv);
|
diff = diff / pPreData->EnvLv;
|
if (diff < pCurrData->Others.Tolerance)
|
enDamp = false;
|
else
|
enDamp = true;
|
|
//get finnal cfg data by damp
|
if (enDamp) {
|
if(opMode != DRC_OPMODE_DRC_GAIN) {
|
pCurrData->HandleData.Drc_v21.DrcGain = Drc_damp * pCurrData->HandleData.Drc_v21.DrcGain
|
+ (1 - Drc_damp) * pPreData->HandleData.Drc_v21.DrcGain;
|
pCurrData->HandleData.Drc_v21.Alpha = Drc_damp * pCurrData->HandleData.Drc_v21.Alpha
|
+ (1 - Drc_damp) * pPreData->HandleData.Drc_v21.Alpha;
|
pCurrData->HandleData.Drc_v21.Clip = Drc_damp * pCurrData->HandleData.Drc_v21.Clip
|
+ (1 - Drc_damp) * pPreData->HandleData.Drc_v21.Clip;
|
}
|
if(opMode != DRC_OPMODE_HILIT)
|
pCurrData->HandleData.Drc_v21.Strength = Drc_damp * pCurrData->HandleData.Drc_v21.Strength
|
+ (1 - Drc_damp) * pPreData->HandleData.Drc_v21.Strength;
|
if(opMode != DRC_OPMODE_LOCAL_TMO) {
|
pCurrData->HandleData.Drc_v21.LocalWeit = Drc_damp * pCurrData->HandleData.Drc_v21.LocalWeit
|
+ (1 - Drc_damp) * pPreData->HandleData.Drc_v21.LocalWeit;
|
pCurrData->HandleData.Drc_v21.GlobalContrast = Drc_damp * pCurrData->HandleData.Drc_v21.GlobalContrast
|
+ (1 - Drc_damp) * pPreData->HandleData.Drc_v21.GlobalContrast;
|
pCurrData->HandleData.Drc_v21.LoLitContrast = Drc_damp * pCurrData->HandleData.Drc_v21.LoLitContrast
|
+ (1 - Drc_damp) * pPreData->HandleData.Drc_v21.LoLitContrast;
|
}
|
}
|
}
|
|
LOGD_ATMO("%s:%d: Current damp DrcGain:%f Alpha:%f Clip:%f Strength:%f LocalWeit:%f GlobalContrast:%f LoLitContrast:%f CompressMode:%d\n", __FUNCTION__, __LINE__,
|
pCurrData->HandleData.Drc_v21.DrcGain, pCurrData->HandleData.Drc_v21.Alpha, pCurrData->HandleData.Drc_v21.Clip, pCurrData->HandleData.Drc_v21.Strength,
|
pCurrData->HandleData.Drc_v21.LocalWeit, pCurrData->HandleData.Drc_v21.GlobalContrast, pCurrData->HandleData.Drc_v21.LoLitContrast, pCurrData->HandleData.Drc_v21.Mode);
|
|
LOG1_ATMO("%s:Eixt!\n", __FUNCTION__);
|
}
|
/******************************************************************************
|
* AdrcDamping()
|
*****************************************************************************/
|
void AdrcDampingV30
|
(
|
CurrData_t* pCurrData,
|
AdrcPrevData_t* pPreData,
|
drc_OpMode_t opMode,
|
int FrameCnt
|
)
|
{
|
LOG1_ATMO("%s:Enter!\n", __FUNCTION__);
|
float Drc_damp = pCurrData->Others.damp;
|
bool enDamp;
|
bool ifHDRModeChange = pCurrData->frameCnt == pPreData->frameCnt ? false : true;
|
|
if(opMode != DRC_OPMODE_MANU && FrameCnt != 0 && !ifHDRModeChange)
|
{
|
float diff = 0.0;
|
|
diff = ABS(pCurrData->EnvLv - pPreData->EnvLv);
|
diff = diff / pPreData->EnvLv;
|
if (diff < pCurrData->Others.Tolerance)
|
enDamp = false;
|
else
|
enDamp = true;
|
|
//get finnal cfg data by damp
|
if (enDamp) {
|
if(opMode != DRC_OPMODE_DRC_GAIN) {
|
pCurrData->HandleData.Drc_v30.DrcGain = Drc_damp * pCurrData->HandleData.Drc_v30.DrcGain
|
+ (1 - Drc_damp) * pPreData->HandleData.Drc_v30.DrcGain;
|
pCurrData->HandleData.Drc_v30.Alpha = Drc_damp * pCurrData->HandleData.Drc_v30.Alpha
|
+ (1 - Drc_damp) * pPreData->HandleData.Drc_v30.Alpha;
|
pCurrData->HandleData.Drc_v30.Clip = Drc_damp * pCurrData->HandleData.Drc_v30.Clip
|
+ (1 - Drc_damp) * pPreData->HandleData.Drc_v30.Clip;
|
}
|
if(opMode != DRC_OPMODE_HILIT)
|
pCurrData->HandleData.Drc_v30.Strength = Drc_damp * pCurrData->HandleData.Drc_v30.Strength
|
+ (1 - Drc_damp) * pPreData->HandleData.Drc_v30.Strength;
|
if(opMode != DRC_OPMODE_LOCAL_TMO) {
|
pCurrData->HandleData.Drc_v30.LocalWeit = Drc_damp * pCurrData->HandleData.Drc_v30.LocalWeit
|
+ (1 - Drc_damp) * pPreData->HandleData.Drc_v30.LocalWeit;
|
pCurrData->HandleData.Drc_v30.LocalAutoWeit = Drc_damp * pCurrData->HandleData.Drc_v30.LocalAutoWeit
|
+ (1 - Drc_damp) * pPreData->HandleData.Drc_v30.LocalAutoWeit;
|
pCurrData->HandleData.Drc_v30.GlobalContrast = Drc_damp * pCurrData->HandleData.Drc_v30.GlobalContrast
|
+ (1 - Drc_damp) * pPreData->HandleData.Drc_v30.GlobalContrast;
|
pCurrData->HandleData.Drc_v30.LoLitContrast = Drc_damp * pCurrData->HandleData.Drc_v30.LoLitContrast
|
+ (1 - Drc_damp) * pPreData->HandleData.Drc_v30.LoLitContrast;
|
}
|
}
|
}
|
|
LOGD_ATMO("%s: Current damp DrcGain:%f Alpha:%f Clip:%f Strength:%f CompressMode:%d\n", __FUNCTION__,
|
pCurrData->HandleData.Drc_v30.DrcGain, pCurrData->HandleData.Drc_v30.Alpha, pCurrData->HandleData.Drc_v30.Clip, pCurrData->HandleData.Drc_v30.Strength,
|
pCurrData->HandleData.Drc_v30.Mode);
|
LOGD_ATMO("%s: Current damp LocalWeit:%f LocalAutoEnable:%d LocalAutoWeit:%f GlobalContrast:%f LoLitContrast:%f\n", __FUNCTION__,
|
pCurrData->HandleData.Drc_v30.LocalWeit, pCurrData->HandleData.Drc_v30.LocalAutoEnable, pCurrData->HandleData.Drc_v30.LocalAutoWeit,
|
pCurrData->HandleData.Drc_v30.GlobalContrast, pCurrData->HandleData.Drc_v30.LoLitContrast);
|
|
LOG1_ATMO("%s:Eixt!\n", __FUNCTION__);
|
}
|
|
/******************************************************************************
|
* AdrcGetTuningProcResV21()
|
*****************************************************************************/
|
void AdrcGetTuningProcResV21
|
(
|
AdrcProcResData_t* pAdrcProcRes,
|
CurrData_t* pCurrData,
|
bool LongFrmMode,
|
int FrameNumber,
|
int FrameCnt
|
) {
|
LOG1_ATMO( "%s:enter!\n", __FUNCTION__);
|
|
//enable
|
if(FrameNumber == HDR_2X_NUM || FrameNumber == HDR_3X_NUM) {
|
pAdrcProcRes->bTmoEn = true;
|
pAdrcProcRes->isLinearTmo = false;
|
}
|
else if(FrameNumber == LINEAR_NUM) {
|
pAdrcProcRes->bTmoEn = pCurrData->Enable;
|
pAdrcProcRes->isLinearTmo = pAdrcProcRes->bTmoEn;
|
}
|
|
//Long Frame mode
|
pAdrcProcRes->LongFrameMode = LongFrmMode;
|
|
//Global tmo
|
pAdrcProcRes->isHdrGlobalTmo = pCurrData->HandleData.Drc_v21.LocalWeit == 0 ? true : false;
|
|
//compress mode
|
pAdrcProcRes->CompressMode = pCurrData->HandleData.Drc_v21.Mode;
|
|
//DrcProcRes
|
pAdrcProcRes->DrcProcRes.Drc_v21.sw_drc_offset_pow2 = SW_DRC_OFFSET_POW2_FIX;
|
pAdrcProcRes->DrcProcRes.Drc_v21.sw_drc_position = (int)(SHIFT8BIT(pCurrData->HandleData.Drc_v21.Clip) + 0.5);
|
pAdrcProcRes->DrcProcRes.Drc_v21.sw_drc_hpdetail_ratio = (int)(SHIFT12BIT(pCurrData->HandleData.Drc_v21.LoLitContrast) + 0.5);
|
pAdrcProcRes->DrcProcRes.Drc_v21.sw_drc_lpdetail_ratio = (int)(SHIFT12BIT(pCurrData->HandleData.Drc_v21.GlobalContrast) + 0.5);
|
pAdrcProcRes->DrcProcRes.Drc_v21.sw_drc_weicur_pix = (int)(SHIFT8BIT(pCurrData->Others.curPixWeit) + 0.5);
|
pAdrcProcRes->DrcProcRes.Drc_v21.sw_drc_weipre_frame = (int)(SHIFT8BIT(pCurrData->Others.preFrameWeit) + 0.5);
|
pAdrcProcRes->DrcProcRes.Drc_v21.sw_drc_weipre_frame = LIMIT_VALUE(pAdrcProcRes->DrcProcRes.Drc_v21.sw_drc_weipre_frame, 255, 0);
|
pAdrcProcRes->DrcProcRes.Drc_v21.sw_drc_force_sgm_inv0 = (int)(SHIFT13BIT(pCurrData->Others.Range_force_sgm) + 0.5);
|
pAdrcProcRes->DrcProcRes.Drc_v21.sw_drc_edge_scl = (int)(SHIFT8BIT(pCurrData->Others.Edge_Weit) + 0.5);
|
pAdrcProcRes->DrcProcRes.Drc_v21.sw_drc_motion_scl = SW_DRC_MOTION_SCL_FIX;
|
pAdrcProcRes->DrcProcRes.Drc_v21.sw_drc_space_sgm_inv1 = (int)(pCurrData->Others.Space_sgm_cur);
|
pAdrcProcRes->DrcProcRes.Drc_v21.sw_drc_space_sgm_inv0 = (int)(pCurrData->Others.Space_sgm_pre);
|
pAdrcProcRes->DrcProcRes.Drc_v21.sw_drc_range_sgm_inv1 = (int)(SHIFT13BIT(pCurrData->Others.Range_sgm_cur) + 0.5);
|
pAdrcProcRes->DrcProcRes.Drc_v21.sw_drc_range_sgm_inv0 = (int)(SHIFT13BIT(pCurrData->Others.Range_sgm_pre) + 0.5);
|
pAdrcProcRes->DrcProcRes.Drc_v21.sw_drc_weig_maxl = (int)(SHIFT4BIT(pCurrData->HandleData.Drc_v21.Strength) + 0.5);
|
pAdrcProcRes->DrcProcRes.Drc_v21.sw_drc_adrc_gain = pCurrData->HandleData.Drc_v21.DrcGain;
|
pAdrcProcRes->DrcProcRes.Drc_v21.sw_drc_weig_bilat = (int)(SHIFT4BIT(pCurrData->HandleData.Drc_v21.LocalWeit) + 0.5);
|
for(int i = 0; i < ADRC_Y_NUM; ++i) {
|
pAdrcProcRes->DrcProcRes.Drc_v21.sw_drc_scale_y[i] = (int)(pCurrData->Others.Scale_y[i]) ;
|
pAdrcProcRes->DrcProcRes.Drc_v21.sw_drc_compres_y[i] = pCurrData->HandleData.Drc_v21.Manual_curve[i] ;
|
}
|
|
//get sw_drc_gain_y
|
CalibrateDrcGainY(&pAdrcProcRes->DrcProcRes, pAdrcProcRes->DrcProcRes.Drc_v21.sw_drc_adrc_gain, pCurrData->HandleData.Drc_v21.Alpha) ;
|
|
float iir_frame = (float)(MIN(FrameCnt + 1, pCurrData->Others.IIR_frame));
|
pAdrcProcRes->DrcProcRes.Drc_v21.sw_drc_iir_weight = (int)(SHIFT6BIT((iir_frame - 1) / iir_frame) + 0.5);
|
|
//sw_drc_delta_scalein FIX
|
pAdrcProcRes->DrcProcRes.Drc_v21.sw_drc_delta_scalein = DELTA_SCALEIN_FIX;
|
|
LOG1_ATMO( "%s:exit!\n", __FUNCTION__);
|
}
|
|
/******************************************************************************
|
* AdrcGetTuningProcResV30()
|
*****************************************************************************/
|
void AdrcGetTuningProcResV30
|
(
|
AdrcProcResData_t* pAdrcProcRes,
|
CurrData_t* pCurrData,
|
bool LongFrmMode,
|
int FrameNumber,
|
int FrameCnt
|
) {
|
LOG1_ATMO( "%s:enter!\n", __FUNCTION__);
|
|
//enable
|
if(FrameNumber == HDR_2X_NUM || FrameNumber == HDR_3X_NUM) {
|
pAdrcProcRes->bTmoEn = true;
|
pAdrcProcRes->isLinearTmo = false;
|
}
|
else if(FrameNumber == LINEAR_NUM) {
|
pAdrcProcRes->bTmoEn = pCurrData->Enable;
|
pAdrcProcRes->isLinearTmo = pAdrcProcRes->bTmoEn;
|
}
|
|
//Long Frame mode
|
pAdrcProcRes->LongFrameMode = LongFrmMode;
|
|
//Global tmo
|
pAdrcProcRes->isHdrGlobalTmo = pCurrData->HandleData.Drc_v30.LocalWeit == 0 ? true : false;
|
|
//compress mode
|
pAdrcProcRes->CompressMode = pCurrData->HandleData.Drc_v30.Mode;
|
|
//DrcProcRes
|
pAdrcProcRes->DrcProcRes.Drc_v30.bypass_en = FUNCTION_DISABLE;
|
pAdrcProcRes->DrcProcRes.Drc_v30.offset_pow2 = SW_DRC_OFFSET_POW2_FIX;
|
pAdrcProcRes->DrcProcRes.Drc_v30.position = (int)(SHIFT8BIT(pCurrData->HandleData.Drc_v30.Clip) + 0.5);
|
pAdrcProcRes->DrcProcRes.Drc_v30.hpdetail_ratio = (int)(SHIFT12BIT(pCurrData->HandleData.Drc_v30.LoLitContrast) + 0.5);
|
pAdrcProcRes->DrcProcRes.Drc_v30.lpdetail_ratio = (int)(SHIFT12BIT(pCurrData->HandleData.Drc_v30.GlobalContrast) + 0.5);
|
pAdrcProcRes->DrcProcRes.Drc_v30.weicur_pix = (int)(SHIFT8BIT(pCurrData->Others.curPixWeit) + 0.5);
|
pAdrcProcRes->DrcProcRes.Drc_v30.weipre_frame = (int)(SHIFT8BIT(pCurrData->Others.preFrameWeit) + 0.5);
|
pAdrcProcRes->DrcProcRes.Drc_v30.weipre_frame = LIMIT_VALUE(pAdrcProcRes->DrcProcRes.Drc_v30.weipre_frame, INT8BITMAX, 0);
|
pAdrcProcRes->DrcProcRes.Drc_v30.bilat_wt_off = SW_DRC_BILAT_WT_OFF_FIX;//LIMIT_VALUE(pCurrData->HandleData.Drc_v30.MotionStr * INT8BITMAX, INT8BITMAX, 0);
|
pAdrcProcRes->DrcProcRes.Drc_v30.force_sgm_inv0 = (int)(SHIFT13BIT(pCurrData->Others.Range_force_sgm) + 0.5);
|
pAdrcProcRes->DrcProcRes.Drc_v30.edge_scl = (int)(SHIFT8BIT(pCurrData->Others.Edge_Weit) + 0.5);
|
pAdrcProcRes->DrcProcRes.Drc_v30.motion_scl = SW_DRC_MOTION_SCL_FIX;
|
pAdrcProcRes->DrcProcRes.Drc_v30.space_sgm_inv1 = (int)(pCurrData->Others.Space_sgm_cur);
|
pAdrcProcRes->DrcProcRes.Drc_v30.space_sgm_inv0 = (int)(pCurrData->Others.Space_sgm_pre);
|
pAdrcProcRes->DrcProcRes.Drc_v30.range_sgm_inv1 = (int)(SHIFT13BIT(pCurrData->Others.Range_sgm_cur) + 0.5);
|
pAdrcProcRes->DrcProcRes.Drc_v30.range_sgm_inv0 = (int)(SHIFT13BIT(pCurrData->Others.Range_sgm_pre) + 0.5);
|
pAdrcProcRes->DrcProcRes.Drc_v30.weig_maxl = (int)(SHIFT4BIT(pCurrData->HandleData.Drc_v30.Strength) + 0.5);
|
pAdrcProcRes->DrcProcRes.Drc_v30.adrc_gain = pCurrData->HandleData.Drc_v30.DrcGain;
|
pAdrcProcRes->DrcProcRes.Drc_v30.weig_bilat = (int)(SHIFT4BIT(pCurrData->HandleData.Drc_v30.LocalWeit) + 0.5);
|
pAdrcProcRes->DrcProcRes.Drc_v30.enable_soft_thd = pCurrData->HandleData.Drc_v30.LocalAutoEnable;
|
pAdrcProcRes->DrcProcRes.Drc_v30.bilat_soft_thd = (int)(SHIFT14BIT(pCurrData->HandleData.Drc_v30.LocalAutoWeit) + 0.5);
|
pAdrcProcRes->DrcProcRes.Drc_v30.bilat_soft_thd = LIMIT_VALUE(pAdrcProcRes->DrcProcRes.Drc_v30.bilat_soft_thd, INT14BITMAX, 0);
|
for(int i = 0; i < ADRC_Y_NUM; ++i) {
|
pAdrcProcRes->DrcProcRes.Drc_v30.scale_y[i] = (int)(pCurrData->Others.Scale_y[i]) ;
|
pAdrcProcRes->DrcProcRes.Drc_v30.compres_y[i] = pCurrData->HandleData.Drc_v30.Manual_curve[i] ;
|
}
|
|
//get sw_drc_gain_y
|
CalibrateDrcGainY(&pAdrcProcRes->DrcProcRes, pAdrcProcRes->DrcProcRes.Drc_v30.adrc_gain, pCurrData->HandleData.Drc_v30.Alpha) ;
|
|
pAdrcProcRes->DrcProcRes.Drc_v30.wr_cycle = FUNCTION_DISABLE;
|
float iir_frame = (float)(MIN(FrameCnt + 1, pCurrData->Others.IIR_frame));
|
pAdrcProcRes->DrcProcRes.Drc_v30.iir_weight = (int)(SHIFT6BIT((iir_frame - 1) / iir_frame) + 0.5);
|
|
//sw_drc_delta_scalein FIX
|
pAdrcProcRes->DrcProcRes.Drc_v30.delta_scalein = DELTA_SCALEIN_FIX;
|
|
LOG1_ATMO( "%s:exit!\n", __FUNCTION__);
|
}
|
|
/******************************************************************************
|
* AdrcTuningParaProcessingV21()
|
*get handle para by config and current variate
|
*****************************************************************************/
|
void AdrcTuningParaProcessingV21
|
(
|
AdrcContext_t* pAdrcCtx
|
)
|
{
|
LOG1_ATMO("%s:enter!\n", __FUNCTION__);
|
pAdrcCtx->CurrData.frameCnt = pAdrcCtx->frameCnt;
|
|
//para setting
|
AdrcIQUpdateV21(pAdrcCtx);
|
|
//api
|
if(pAdrcCtx->drcAttr.opMode == DRC_OPMODE_API_OFF)
|
LOGD_ATMO("%s: Adrc api OFF!! Current Handle data:\n", __FUNCTION__);
|
else if(pAdrcCtx->drcAttr.opMode == DRC_OPMODE_MANU) {
|
LOGD_ATMO("%s: Adrc api Manual!! Current Handle data:\n", __FUNCTION__);
|
}
|
else if(pAdrcCtx->drcAttr.opMode == DRC_OPMODE_DRC_GAIN) {
|
LOGD_ATMO("%s: Adrc api DRC Gain!! Data from api: DrcGain:%f Alpha:%f Clip:%f\n", __FUNCTION__, pAdrcCtx->drcAttr.stDrcGain.DrcGain,
|
pAdrcCtx->drcAttr.stDrcGain.Alpha, pAdrcCtx->drcAttr.stDrcGain.Clip);
|
}
|
else if(pAdrcCtx->drcAttr.opMode == DRC_OPMODE_HILIT) {
|
LOGD_ATMO("%s: Adrc api HiLit!! Data from api: HiLitStrength:%f\n", __FUNCTION__, pAdrcCtx->drcAttr.stHiLit.Strength);
|
}
|
else if(pAdrcCtx->drcAttr.opMode == DRC_OPMODE_LOCAL_TMO) {
|
LOGD_ATMO("%s: Adrc api Local!! Data from api: LocalWeit:%f GlobalContrast:%f LoLitContrast:%f\n", __FUNCTION__,
|
pAdrcCtx->drcAttr.stLocalDataV21.LocalWeit, pAdrcCtx->drcAttr.stLocalDataV21.GlobalContrast,
|
pAdrcCtx->drcAttr.stLocalDataV21.LoLitContrast);
|
}
|
else
|
LOGE_ATMO("%s: Adrc wrong mode!!!\n", __FUNCTION__);
|
|
//clip drc gain
|
if(pAdrcCtx->CurrAeResult.AEMaxRatio * pAdrcCtx->CurrData.HandleData.Drc_v21.DrcGain > MAX_AE_DRC_GAIN) {
|
LOGE_ATMO("%s: AERatio*DrcGain > 256!!!\n", __FUNCTION__);
|
pAdrcCtx->CurrData.HandleData.Drc_v21.DrcGain = MAX_AE_DRC_GAIN / pAdrcCtx->CurrAeResult.AEMaxRatio;
|
}
|
|
LOGD_ATMO("%s:Current Enable:%d DrcGain:%f Alpha:%f Clip:%f Strength:%f LocalWeit:%f GlobalContrast:%f LoLitContrast:%f CompressMode:%d\n", __FUNCTION__, pAdrcCtx->CurrData.Enable,
|
pAdrcCtx->CurrData.HandleData.Drc_v21.DrcGain, pAdrcCtx->CurrData.HandleData.Drc_v21.Alpha, pAdrcCtx->CurrData.HandleData.Drc_v21.Clip, pAdrcCtx->CurrData.HandleData.Drc_v21.Strength,
|
pAdrcCtx->CurrData.HandleData.Drc_v21.LocalWeit, pAdrcCtx->CurrData.HandleData.Drc_v21.GlobalContrast, pAdrcCtx->CurrData.HandleData.Drc_v21.LoLitContrast
|
, pAdrcCtx->CurrData.HandleData.Drc_v21.Mode);
|
|
//transfer data to api
|
//info
|
pAdrcCtx->drcAttr.Info.EnvLv = pAdrcCtx->CurrData.EnvLv;
|
|
//damp
|
AdrcDampingV21(&pAdrcCtx->CurrData, &pAdrcCtx->PrevData, pAdrcCtx->drcAttr.opMode, pAdrcCtx->frameCnt);
|
|
//get tuning proc res
|
AdrcGetTuningProcResV21(&pAdrcCtx->AdrcProcRes, &pAdrcCtx->CurrData, pAdrcCtx->SensorInfo.LongFrmMode,
|
pAdrcCtx->FrameNumber, pAdrcCtx->frameCnt);
|
|
// store current handle data to pre data for next loop
|
pAdrcCtx->PrevData.EnvLv = pAdrcCtx->CurrData.EnvLv;
|
pAdrcCtx->PrevData.ISO = pAdrcCtx->CurrData.ISO;
|
if(0 != memcmp(&pAdrcCtx->PrevData.HandleData, &pAdrcCtx->CurrData.HandleData, sizeof(DrcHandleData_t)))
|
memcpy(&pAdrcCtx->PrevData.HandleData, &pAdrcCtx->CurrData.HandleData, sizeof(DrcHandleData_t));
|
|
LOG1_ATMO( "%s:exit!\n", __FUNCTION__);
|
}
|
|
/******************************************************************************
|
* AdrcTuningParaProcessing()
|
*get handle para by config and current variate
|
*****************************************************************************/
|
void AdrcTuningParaProcessingV30
|
(
|
AdrcContext_t* pAdrcCtx
|
)
|
{
|
LOG1_ATMO("%s:enter!\n", __FUNCTION__);
|
pAdrcCtx->CurrData.frameCnt = pAdrcCtx->frameCnt;
|
|
//para setting
|
AdrcIQUpdateV30(pAdrcCtx);
|
|
//api
|
if(pAdrcCtx->drcAttr.opMode == DRC_OPMODE_API_OFF)
|
LOG1_ATMO("%s: Adrc api OFF!! Current Handle data:\n", __FUNCTION__);
|
else if(pAdrcCtx->drcAttr.opMode == DRC_OPMODE_MANU) {
|
LOG1_ATMO("%s: Adrc api Manual!! Current Handle data:\n", __FUNCTION__);
|
}
|
else if(pAdrcCtx->drcAttr.opMode == DRC_OPMODE_DRC_GAIN) {
|
LOGD_ATMO("%s: Adrc api DRC Gain!! Data from api: DrcGain:%f Alpha:%f Clip:%f\n", __FUNCTION__, pAdrcCtx->drcAttr.stDrcGain.DrcGain,
|
pAdrcCtx->drcAttr.stDrcGain.Alpha, pAdrcCtx->drcAttr.stDrcGain.Clip);
|
}
|
else if(pAdrcCtx->drcAttr.opMode == DRC_OPMODE_HILIT) {
|
LOGD_ATMO("%s: Adrc api HiLit!! Data from api: HiLitStrength:%f\n", __FUNCTION__, pAdrcCtx->drcAttr.stHiLit.Strength);
|
}
|
else if(pAdrcCtx->drcAttr.opMode == DRC_OPMODE_LOCAL_TMO) {
|
LOGD_ATMO("%s: Adrc api Local!! Data from api: LocalWeit:%f LocalAutoEnable:%f LocalAutoWeit:%f GlobalContrast:%f LoLitContrast:%f\n", __FUNCTION__,
|
pAdrcCtx->drcAttr.stLocalDataV30.LocalWeit, pAdrcCtx->drcAttr.stLocalDataV30.LocalAutoEnable,
|
pAdrcCtx->drcAttr.stLocalDataV30.LocalAutoWeit, pAdrcCtx->drcAttr.stLocalDataV30.GlobalContrast,
|
pAdrcCtx->drcAttr.stLocalDataV30.LoLitContrast);
|
}
|
else
|
LOGE_ATMO("%s: Adrc wrong mode!!!\n", __FUNCTION__);
|
|
//clip drc gain
|
if(pAdrcCtx->CurrAeResult.AEMaxRatio * pAdrcCtx->CurrData.HandleData.Drc_v30.DrcGain > MAX_AE_DRC_GAIN) {
|
LOGE_ATMO("%s: AERatio*DrcGain > 256!!!\n", __FUNCTION__);
|
pAdrcCtx->CurrData.HandleData.Drc_v30.DrcGain = MAX_AE_DRC_GAIN / pAdrcCtx->CurrAeResult.AEMaxRatio;
|
}
|
|
LOGD_ATMO("%s: Current Enable:%d DrcGain:%f Alpha:%f Clip:%f Strength:%f CompressMode:%d\n", __FUNCTION__, pAdrcCtx->CurrData.Enable,
|
pAdrcCtx->CurrData.HandleData.Drc_v30.DrcGain, pAdrcCtx->CurrData.HandleData.Drc_v30.Alpha, pAdrcCtx->CurrData.HandleData.Drc_v30.Clip,
|
pAdrcCtx->CurrData.HandleData.Drc_v30.Strength, pAdrcCtx->CurrData.HandleData.Drc_v30.Mode);
|
LOGD_ATMO("%s: Current LocalWeit:%f LocalAutoEnable:%d LocalAutoWeit:%f GlobalContrast:%f LoLitContrast:%f\n", __FUNCTION__,
|
pAdrcCtx->CurrData.HandleData.Drc_v30.LocalWeit, pAdrcCtx->CurrData.HandleData.Drc_v30.LocalAutoEnable, pAdrcCtx->CurrData.HandleData.Drc_v30.LocalAutoWeit,
|
pAdrcCtx->CurrData.HandleData.Drc_v30.GlobalContrast, pAdrcCtx->CurrData.HandleData.Drc_v30.LoLitContrast);
|
|
//transfer data to api
|
//info
|
pAdrcCtx->drcAttr.Info.EnvLv = pAdrcCtx->CurrData.EnvLv;
|
|
//damp
|
AdrcDampingV30(&pAdrcCtx->CurrData, &pAdrcCtx->PrevData, pAdrcCtx->drcAttr.opMode, pAdrcCtx->frameCnt);
|
|
//get io data
|
AdrcGetTuningProcResV30(&pAdrcCtx->AdrcProcRes, &pAdrcCtx->CurrData, pAdrcCtx->SensorInfo.LongFrmMode,
|
pAdrcCtx->FrameNumber, pAdrcCtx->frameCnt);
|
|
// store current handle data to pre data for next loop
|
pAdrcCtx->PrevData.EnvLv = pAdrcCtx->CurrData.EnvLv;
|
pAdrcCtx->PrevData.ISO = pAdrcCtx->CurrData.ISO;
|
pAdrcCtx->PrevData.MotionCoef = pAdrcCtx->CurrData.MotionCoef;
|
if(0 != memcmp(&pAdrcCtx->PrevData.HandleData, &pAdrcCtx->CurrData.HandleData, sizeof(DrcHandleData_t)))
|
memcpy(&pAdrcCtx->PrevData.HandleData, &pAdrcCtx->CurrData.HandleData, sizeof(DrcHandleData_t));
|
|
LOG1_ATMO( "%s:exit!\n", __FUNCTION__);
|
}
|
|
/******************************************************************************
|
* AdrcTuningParaProcessing()
|
*get handle para by config and current variate
|
*****************************************************************************/
|
void AdrcTuningParaProcessing
|
(
|
AdrcContext_t* pAdrcCtx
|
)
|
{
|
LOG1_ATMO("%s:enter!\n", __FUNCTION__);
|
pAdrcCtx->CurrData.frameCnt = pAdrcCtx->frameCnt;
|
|
if(CHECK_ISP_HW_V21())
|
AdrcTuningParaProcessingV21(pAdrcCtx);
|
else if(CHECK_ISP_HW_V30())
|
AdrcTuningParaProcessingV30(pAdrcCtx);
|
|
LOG1_ATMO( "%s:exit!\n", __FUNCTION__);
|
}
|
|
/******************************************************************************
|
* AdrcExpoParaProcessing()
|
*get handle para by config and current variate
|
*****************************************************************************/
|
void AdrcExpoParaProcessing
|
(
|
AdrcContext_t* pAdrcCtx,
|
DrcExpoData_t* pExpoData
|
)
|
{
|
LOG1_ATMO("%s:enter!\n", __FUNCTION__);
|
|
if(CHECK_ISP_HW_V21()) {
|
//get sw_drc_compres_scl
|
float adrc_gain = pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_adrc_gain;
|
float log_ratio2 = log(pExpoData->nextRatioLS * adrc_gain) / log(2.0f) + 12;
|
float offsetbits_int = (float)(pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_offset_pow2);
|
float offsetbits = offsetbits_int * pow(2, MFHDR_LOG_Q_BITS);
|
float hdrbits = log_ratio2 * pow(2, MFHDR_LOG_Q_BITS);
|
float hdrvalidbits = hdrbits - offsetbits;
|
float compres_scl = (12 * pow(2, MFHDR_LOG_Q_BITS * 2)) / hdrvalidbits;
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_compres_scl = (int)(compres_scl);
|
|
//get sw_drc_min_ogain
|
if(pAdrcCtx->Config.Drc_v21.OutPutLongFrame)
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_min_ogain = 1 << 15;
|
else {
|
float sw_drc_min_ogain = 1 / (pExpoData->nextRatioLS * adrc_gain);
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_min_ogain = (int)(sw_drc_min_ogain * pow(2, 15) + 0.5);
|
}
|
|
//get sw_drc_compres_y
|
if(pAdrcCtx->AdrcProcRes.CompressMode == COMPRESS_AUTO) {
|
float curveparam, curveparam2, curveparam3, tmp;
|
float luma2[17] = { 0, 1024, 2048, 3072, 4096, 5120, 6144, 7168, 8192, 10240, 12288, 14336, 16384, 18432, 20480, 22528, 24576 };
|
float curveTable[17];
|
float dstbits = ISP_RAW_BIT * pow(2, MFHDR_LOG_Q_BITS);
|
float validbits = dstbits - offsetbits;
|
for(int i = 0; i < ISP21_DRC_Y_NUM; ++i)
|
{
|
curveparam = (float)(validbits - 0) / (hdrvalidbits - validbits + pow(2, -6));
|
curveparam2 = validbits * (1 + curveparam);
|
curveparam3 = hdrvalidbits * curveparam;
|
tmp = luma2[i] * hdrvalidbits / 24576;
|
curveTable[i] = (tmp * curveparam2 / (tmp + curveparam3));
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_compres_y[i] = (int)(curveTable[i]) ;
|
}
|
}
|
|
LOGV_ATMO("%s: nextRatioLS:%f sw_drc_position:%d sw_drc_compres_scl:%d sw_drc_offset_pow2:%d\n", __FUNCTION__,
|
pExpoData->nextRatioLS, pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_position, pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_compres_scl,
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_offset_pow2);
|
LOGV_ATMO("%s: sw_drc_lpdetail_ratio:%d sw_drc_hpdetail_ratio:%d sw_drc_delta_scalein:%d\n", __FUNCTION__, pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_lpdetail_ratio,
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_hpdetail_ratio, pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_delta_scalein);
|
LOGV_ATMO("%s: sw_drc_weipre_frame:%d sw_drc_weicur_pix:%d\n", __FUNCTION__,
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_weipre_frame, pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_weicur_pix);
|
LOGV_ATMO("%s: sw_drc_edge_scl:%d sw_drc_motion_scl:%d sw_drc_force_sgm_inv0:%d\n", __FUNCTION__, pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_edge_scl,
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_motion_scl, pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_force_sgm_inv0);
|
LOGV_ATMO("%s: sw_drc_space_sgm_inv0:%d sw_drc_space_sgm_inv1:%d\n", __FUNCTION__,
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_space_sgm_inv0, pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_space_sgm_inv1);
|
LOGV_ATMO("%s: sw_drc_range_sgm_inv0:%d sw_drc_range_sgm_inv1:%d\n", __FUNCTION__, pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_range_sgm_inv0,
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_range_sgm_inv1);
|
LOGV_ATMO("%s: sw_drc_weig_bilat:%d sw_drc_weig_maxl:%d\n", __FUNCTION__, pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_weig_bilat,
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_weig_maxl);
|
LOGV_ATMO("%s: sw_drc_min_ogain:%d sw_drc_iir_weight:%d\n", __FUNCTION__, pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_min_ogain,
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_iir_weight);
|
LOGV_ATMO("%s: sw_drc_gain_y: %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d\n", __FUNCTION__,
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_gain_y[0], pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_gain_y[1],
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_gain_y[2], pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_gain_y[3],
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_gain_y[4], pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_gain_y[5],
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_gain_y[6], pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_gain_y[7],
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_gain_y[8], pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_gain_y[9],
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_gain_y[10], pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_gain_y[11],
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_gain_y[12], pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_gain_y[13],
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_gain_y[14], pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_gain_y[15],
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_gain_y[16]);
|
LOGV_ATMO("%s: sw_drc_scale_y: %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d\n", __FUNCTION__,
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_scale_y[0], pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_scale_y[1],
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_scale_y[2], pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_scale_y[3],
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_scale_y[4], pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_scale_y[5],
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_scale_y[6], pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_scale_y[7],
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_scale_y[8], pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_scale_y[9],
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_scale_y[10], pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_scale_y[11],
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_scale_y[12], pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_scale_y[13],
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_scale_y[14], pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_scale_y[15],
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_scale_y[16]);
|
LOGV_ATMO( "%s: CompressMode:%d sw_drc_compres_y: %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d\n", __FUNCTION__, pAdrcCtx->AdrcProcRes.CompressMode,
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_compres_y[0], pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_compres_y[1],
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_compres_y[2], pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_compres_y[3],
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_compres_y[4], pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_compres_y[5],
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_compres_y[6], pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_compres_y[7],
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_compres_y[8], pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_compres_y[9],
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_compres_y[10], pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_compres_y[11],
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_compres_y[12], pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_compres_y[13],
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_compres_y[14], pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_compres_y[15],
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v21.sw_drc_compres_y[16]);
|
}
|
else if(CHECK_ISP_HW_V30()) {
|
//get sw_drc_compres_scl
|
float adrc_gain = pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.adrc_gain;
|
float log_ratio2 = log(pExpoData->nextRatioLS * adrc_gain) / log(2.0f) + 12;
|
float offsetbits_int = (float)(pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.offset_pow2);
|
float offsetbits = offsetbits_int * pow(2, MFHDR_LOG_Q_BITS);
|
float hdrbits = log_ratio2 * pow(2, MFHDR_LOG_Q_BITS);
|
float hdrvalidbits = hdrbits - offsetbits;
|
float compres_scl = (12 * pow(2, MFHDR_LOG_Q_BITS * 2)) / hdrvalidbits;
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.compres_scl = (int)(compres_scl);
|
|
//get sw_drc_min_ogain
|
if(pAdrcCtx->Config.Drc_v30.OutPutLongFrame)
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.min_ogain = 1 << 15;
|
else {
|
float sw_drc_min_ogain = 1 / (pExpoData->nextRatioLS * adrc_gain);
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.min_ogain = (int)(sw_drc_min_ogain * pow(2, 15) + 0.5);
|
}
|
|
//get sw_drc_compres_y
|
if(pAdrcCtx->AdrcProcRes.CompressMode == COMPRESS_AUTO) {
|
float curveparam, curveparam2, curveparam3, tmp;
|
float luma2[17] = { 0, 1024, 2048, 3072, 4096, 5120, 6144, 7168, 8192, 10240, 12288, 14336, 16384, 18432, 20480, 22528, 24576 };
|
float curveTable[17];
|
float dstbits = ISP_RAW_BIT * pow(2, MFHDR_LOG_Q_BITS);
|
float validbits = dstbits - offsetbits;
|
for(int i = 0; i < ISP21_DRC_Y_NUM; ++i)
|
{
|
curveparam = (float)(validbits - 0) / (hdrvalidbits - validbits + pow(2, -6));
|
curveparam2 = validbits * (1 + curveparam);
|
curveparam3 = hdrvalidbits * curveparam;
|
tmp = luma2[i] * hdrvalidbits / 24576;
|
curveTable[i] = (tmp * curveparam2 / (tmp + curveparam3));
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.compres_y[i] = (int)(curveTable[i]) ;
|
}
|
}
|
|
LOGV_ATMO("%s: nextRatioLS:%f sw_drc_position:%d sw_drc_compres_scl:%d sw_drc_offset_pow2:%d\n", __FUNCTION__, pExpoData->nextRatioLS,
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.position, pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.compres_scl, pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.offset_pow2);
|
LOGV_ATMO("%s: sw_drc_lpdetail_ratio:%d sw_drc_hpdetail_ratio:%d sw_drc_delta_scalein:%d\n", __FUNCTION__, pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.lpdetail_ratio,
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.hpdetail_ratio, pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.delta_scalein);
|
LOGV_ATMO("%s: sw_drc_bilat_wt_off:%d sw_drc_weipre_frame:%d sw_drc_weicur_pix:%d\n", __FUNCTION__, pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.bilat_wt_off,
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.weipre_frame, pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.weicur_pix);
|
LOGV_ATMO("%s: sw_drc_edge_scl:%d sw_drc_motion_scl:%d sw_drc_force_sgm_inv0:%d\n", __FUNCTION__, pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.edge_scl,
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.motion_scl, pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.force_sgm_inv0);
|
LOGV_ATMO("%s: sw_drc_space_sgm_inv0:%d sw_drc_space_sgm_inv1:%d\n", __FUNCTION__,
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.space_sgm_inv0, pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.space_sgm_inv1);
|
LOGV_ATMO("%s: sw_drc_range_sgm_inv0:%d sw_drc_range_sgm_inv1:%d\n", __FUNCTION__, pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.range_sgm_inv0,
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.range_sgm_inv1);
|
LOGV_ATMO("%s: sw_drc_weig_bilat:%d sw_drc_weig_maxl:%d sw_drc_bilat_soft_thd:%d sw_drc_enable_soft_thd:%d\n", __FUNCTION__, pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.weig_bilat,
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.weig_maxl, pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.bilat_soft_thd, pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.enable_soft_thd);
|
LOGV_ATMO("%s: sw_drc_min_ogain:%d sw_drc_iir_weight:%d\n", __FUNCTION__, pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.min_ogain,
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.iir_weight);
|
LOGV_ATMO("%s: sw_drc_gain_y: %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d\n", __FUNCTION__,
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.gain_y[0], pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.gain_y[1],
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.gain_y[2], pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.gain_y[3],
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.gain_y[4], pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.gain_y[5],
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.gain_y[6], pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.gain_y[7],
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.gain_y[8], pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.gain_y[9],
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.gain_y[10], pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.gain_y[11],
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.gain_y[12], pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.gain_y[13],
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.gain_y[14], pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.gain_y[15],
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.gain_y[16]);
|
LOGV_ATMO("%s: sw_drc_scale_y: %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d\n", __FUNCTION__,
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.scale_y[0], pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.scale_y[1],
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.scale_y[2], pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.scale_y[3],
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.scale_y[4], pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.scale_y[5],
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.scale_y[6], pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.scale_y[7],
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.scale_y[8], pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.scale_y[9],
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.scale_y[10], pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.scale_y[11],
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.scale_y[12], pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.scale_y[13],
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.scale_y[14], pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.scale_y[15],
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.scale_y[16]);
|
LOGV_ATMO( "%s: CompressMode:%d sw_drc_compres_y: %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d\n", __FUNCTION__, pAdrcCtx->AdrcProcRes.CompressMode,
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.compres_y[0], pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.compres_y[1],
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.compres_y[2], pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.compres_y[3],
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.compres_y[4], pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.compres_y[5],
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.compres_y[6], pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.compres_y[7],
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.compres_y[8], pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.compres_y[9],
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.compres_y[10], pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.compres_y[11],
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.compres_y[12], pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.compres_y[13],
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.compres_y[14], pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.compres_y[15],
|
pAdrcCtx->AdrcProcRes.DrcProcRes.Drc_v30.compres_y[16]);
|
}
|
|
LOG1_ATMO( "%s:exit!\n", __FUNCTION__);
|
}
|
|
/******************************************************************************
|
* AdrcByPassProcessing()
|
*get handle para by config and current variate
|
*****************************************************************************/
|
bool AdrcByPassProcessing
|
(
|
AdrcContext_t* pAdrcCtx,
|
AecPreResult_t AecHdrPreResult
|
)
|
{
|
LOG1_ATMO("%s:enter!\n", __FUNCTION__);
|
|
bool bypass = false;
|
float diff = 0.0;
|
float ByPassThr = 0.0f;
|
|
// get current EnvLv from AecPreRes
|
AdrcGetEnvLv(pAdrcCtx, AecHdrPreResult);
|
|
// motion coef
|
pAdrcCtx->CurrData.MotionCoef = MOVE_COEF_DEFAULT;
|
|
// transfer ae data to CurrHandle
|
pAdrcCtx->CurrData.EnvLv =
|
LIMIT_VALUE(pAdrcCtx->CurrData.EnvLv, ADRCNORMALIZEMAX, ADRCNORMALIZEMIN);
|
|
pAdrcCtx->CurrData.ISO = pAdrcCtx->CurrAeResult.ISO;
|
pAdrcCtx->CurrData.ISO = LIMIT_VALUE(pAdrcCtx->CurrData.ISO, ISOMAX, ISOMIN);
|
|
if (pAdrcCtx->frameCnt <= 2) // start frame
|
bypass = false;
|
else if (pAdrcCtx->drcAttr.opMode > DRC_OPMODE_API_OFF) // api
|
bypass = false;
|
else if (pAdrcCtx->drcAttr.opMode != pAdrcCtx->PrevData.ApiMode) // api change
|
bypass = false;
|
else { // EnvLv change
|
if (CHECK_ISP_HW_V21())
|
ByPassThr = pAdrcCtx->Config.Drc_v21.Others.ByPassThr;
|
else if (CHECK_ISP_HW_V30())
|
ByPassThr = pAdrcCtx->Config.Drc_v30.Others.ByPassThr;
|
|
//use Envlv for now
|
diff = pAdrcCtx->PrevData.EnvLv - pAdrcCtx->CurrData.EnvLv;
|
if(pAdrcCtx->PrevData.EnvLv == 0.0) {
|
diff = pAdrcCtx->CurrData.EnvLv;
|
if(diff == 0.0)
|
bypass = true;
|
else
|
bypass = false;
|
}
|
else {
|
diff /= pAdrcCtx->PrevData.EnvLv;
|
if(diff >= ByPassThr || diff <= (0 - ByPassThr))
|
bypass = false;
|
else
|
bypass = true;
|
}
|
}
|
|
LOGD_ATMO( "%s: FrameID:%d HDRFrameNum:%d LongFrmMode:%d DRCApiMode:%d EnvLv:%f bypass:%d\n", __FUNCTION__, pAdrcCtx->frameCnt, pAdrcCtx->FrameNumber,
|
pAdrcCtx->SensorInfo.LongFrmMode, pAdrcCtx->drcAttr.opMode, pAdrcCtx->CurrData.EnvLv, bypass);
|
|
LOG1_ATMO( "%s: CtrlEnvLv:%f PrevEnvLv:%f diff:%f ByPassThr:%f opMode:%d bypass:%d!\n", __FUNCTION__, pAdrcCtx->CurrData.EnvLv,
|
pAdrcCtx->PrevData.EnvLv, diff, ByPassThr, pAdrcCtx->drcAttr.opMode, bypass);
|
|
LOG1_ATMO( "%s:exit!\n", __FUNCTION__);
|
return bypass;
|
}
|
|
/******************************************************************************
|
* AdrcInit()
|
*****************************************************************************/
|
XCamReturn AdrcInit
|
(
|
AdrcContext_t **ppAdrcCtx,
|
CamCalibDbV2Context_t *pCalibDb
|
) {
|
LOG1_ATMO("%s:enter!\n", __FUNCTION__);
|
XCamReturn result = XCAM_RETURN_NO_ERROR;
|
|
AdrcContext_t * pAdrcCtx;
|
pAdrcCtx = (AdrcContext_t *)malloc(sizeof(AdrcContext_t));
|
if(pAdrcCtx == NULL) {
|
LOGE_ATMO("%s(%d): invalid inputparams\n", __FUNCTION__, __LINE__);
|
return XCAM_RETURN_ERROR_MEM;
|
}
|
|
memset(pAdrcCtx, 0x00, sizeof(AdrcContext_t));
|
*ppAdrcCtx = pAdrcCtx;
|
pAdrcCtx->state = ADRC_STATE_INITIALIZED;
|
|
if(CHECK_ISP_HW_V21()) {
|
CalibDbV2_drc_t* calibv2_adrc_calib =
|
(CalibDbV2_drc_t*)(CALIBDBV2_GET_MODULE_PTR(pCalibDb, adrc_calib));
|
|
// pre-initialize context
|
memset(pAdrcCtx, 0x00, sizeof(*pAdrcCtx));
|
|
//malloc DrcGain
|
pAdrcCtx->Config.Drc_v21.DrcGain.len = calibv2_adrc_calib->DrcTuningPara.DrcGain.EnvLv_len;
|
pAdrcCtx->Config.Drc_v21.DrcGain.EnvLv = (float*)malloc(sizeof(float) * (calibv2_adrc_calib->DrcTuningPara.DrcGain.EnvLv_len));
|
pAdrcCtx->Config.Drc_v21.DrcGain.DrcGain = (float*)malloc(sizeof(float) * (calibv2_adrc_calib->DrcTuningPara.DrcGain.EnvLv_len));
|
pAdrcCtx->Config.Drc_v21.DrcGain.Alpha = (float*)malloc(sizeof(float) * (calibv2_adrc_calib->DrcTuningPara.DrcGain.EnvLv_len));
|
pAdrcCtx->Config.Drc_v21.DrcGain.Clip = (float*)malloc(sizeof(float) * (calibv2_adrc_calib->DrcTuningPara.DrcGain.EnvLv_len));
|
|
//malloc HiLit
|
pAdrcCtx->Config.Drc_v21.HiLit.len = calibv2_adrc_calib->DrcTuningPara.HiLight.EnvLv_len;
|
pAdrcCtx->Config.Drc_v21.HiLit.EnvLv = (float*)malloc(sizeof(float) * (calibv2_adrc_calib->DrcTuningPara.HiLight.EnvLv_len));
|
pAdrcCtx->Config.Drc_v21.HiLit.Strength = (float*)malloc(sizeof(float) * (calibv2_adrc_calib->DrcTuningPara.HiLight.EnvLv_len));
|
|
//malloc local
|
pAdrcCtx->Config.Drc_v21.Local.len = calibv2_adrc_calib->DrcTuningPara.LocalTMOSetting.LocalTMOData.EnvLv_len;
|
pAdrcCtx->Config.Drc_v21.Local.EnvLv = (float*)malloc(sizeof(float) * (calibv2_adrc_calib->DrcTuningPara.LocalTMOSetting.LocalTMOData.EnvLv_len));
|
pAdrcCtx->Config.Drc_v21.Local.LocalWeit = (float*)malloc(sizeof(float) * (calibv2_adrc_calib->DrcTuningPara.LocalTMOSetting.LocalTMOData.EnvLv_len));
|
pAdrcCtx->Config.Drc_v21.Local.GlobalContrast = (float*)malloc(sizeof(float) * (calibv2_adrc_calib->DrcTuningPara.LocalTMOSetting.LocalTMOData.EnvLv_len));
|
pAdrcCtx->Config.Drc_v21.Local.LoLitContrast = (float*)malloc(sizeof(float) * (calibv2_adrc_calib->DrcTuningPara.LocalTMOSetting.LocalTMOData.EnvLv_len));
|
|
pAdrcCtx->drcAttr.Version = ADRC_VERSION_356X;
|
pAdrcCtx->drcAttr.opMode = DRC_OPMODE_API_OFF;
|
ConfigV21(pAdrcCtx); //set default para
|
memcpy(&pAdrcCtx->pCalibDB.Drc_v21, calibv2_adrc_calib, sizeof(CalibDbV2_drc_t));//load iq paras
|
|
}
|
else if(CHECK_ISP_HW_V30()) {
|
CalibDbV2_drc_V2_t* calibv2_adrc_calib =
|
(CalibDbV2_drc_V2_t*)(CALIBDBV2_GET_MODULE_PTR(pCalibDb, adrc_calib));
|
|
// pre-initialize context
|
memset(pAdrcCtx, 0x00, sizeof(*pAdrcCtx));
|
|
//malloc DrcGain
|
pAdrcCtx->Config.Drc_v30.DrcGain.len = calibv2_adrc_calib->DrcTuningPara.DrcGain.EnvLv_len;
|
pAdrcCtx->Config.Drc_v30.DrcGain.EnvLv = (float*)malloc(sizeof(float) * (calibv2_adrc_calib->DrcTuningPara.DrcGain.EnvLv_len));
|
pAdrcCtx->Config.Drc_v30.DrcGain.DrcGain = (float*)malloc(sizeof(float) * (calibv2_adrc_calib->DrcTuningPara.DrcGain.EnvLv_len));
|
pAdrcCtx->Config.Drc_v30.DrcGain.Alpha = (float*)malloc(sizeof(float) * (calibv2_adrc_calib->DrcTuningPara.DrcGain.EnvLv_len));
|
pAdrcCtx->Config.Drc_v30.DrcGain.Clip = (float*)malloc(sizeof(float) * (calibv2_adrc_calib->DrcTuningPara.DrcGain.EnvLv_len));
|
|
//malloc HiLit
|
pAdrcCtx->Config.Drc_v30.HiLit.len = calibv2_adrc_calib->DrcTuningPara.HiLight.EnvLv_len;
|
pAdrcCtx->Config.Drc_v30.HiLit.EnvLv = (float*)malloc(sizeof(float) * (calibv2_adrc_calib->DrcTuningPara.HiLight.EnvLv_len));
|
pAdrcCtx->Config.Drc_v30.HiLit.Strength = (float*)malloc(sizeof(float) * (calibv2_adrc_calib->DrcTuningPara.HiLight.EnvLv_len));
|
|
//malloc local
|
pAdrcCtx->Config.Drc_v30.Local.len = calibv2_adrc_calib->DrcTuningPara.LocalSetting.LocalData.EnvLv_len;
|
pAdrcCtx->Config.Drc_v30.Local.EnvLv = (float*)malloc(sizeof(float) * (calibv2_adrc_calib->DrcTuningPara.LocalSetting.LocalData.EnvLv_len));
|
pAdrcCtx->Config.Drc_v30.Local.LocalAutoEnable = (int*)malloc(sizeof(float) * (calibv2_adrc_calib->DrcTuningPara.LocalSetting.LocalData.EnvLv_len));
|
pAdrcCtx->Config.Drc_v30.Local.LocalAutoWeit = (float*)malloc(sizeof(float) * (calibv2_adrc_calib->DrcTuningPara.LocalSetting.LocalData.EnvLv_len));
|
pAdrcCtx->Config.Drc_v30.Local.LocalWeit = (float*)malloc(sizeof(float) * (calibv2_adrc_calib->DrcTuningPara.LocalSetting.LocalData.EnvLv_len));
|
pAdrcCtx->Config.Drc_v30.Local.GlobalContrast = (float*)malloc(sizeof(float) * (calibv2_adrc_calib->DrcTuningPara.LocalSetting.LocalData.EnvLv_len));
|
pAdrcCtx->Config.Drc_v30.Local.LoLitContrast = (float*)malloc(sizeof(float) * (calibv2_adrc_calib->DrcTuningPara.LocalSetting.LocalData.EnvLv_len));
|
|
pAdrcCtx->drcAttr.Version = ADRC_VERSION_3588;
|
pAdrcCtx->drcAttr.opMode = DRC_OPMODE_API_OFF;
|
ConfigV30(pAdrcCtx); //set default para
|
memcpy(&pAdrcCtx->pCalibDB.Drc_v30, calibv2_adrc_calib, sizeof(CalibDbV2_drc_V2_t));//load iq paras
|
}
|
|
LOG1_ATMO( "%s:exit!\n", __FUNCTION__);
|
|
return (XCAM_RETURN_NO_ERROR);
|
}
|
/******************************************************************************
|
* AhdrRelease()
|
*****************************************************************************/
|
XCamReturn AdrcRelease
|
(
|
AdrcContext_t* pAdrcCtx
|
) {
|
|
LOG1_ATMO( "%s:enter!\n", __FUNCTION__);
|
XCamReturn result = XCAM_RETURN_NO_ERROR;
|
|
// initial checks
|
if (NULL == pAdrcCtx) {
|
return (XCAM_RETURN_ERROR_PARAM);
|
}
|
|
result = AdrcStop(pAdrcCtx);
|
if (result != XCAM_RETURN_NO_ERROR) {
|
LOGE_ATMO( "%s: AHDRStop() failed!\n", __FUNCTION__);
|
return (result);
|
}
|
|
// check state
|
if ((ADRC_STATE_RUNNING == pAdrcCtx->state)
|
|| (ADRC_STATE_LOCKED == pAdrcCtx->state)) {
|
return (XCAM_RETURN_ERROR_MEM);
|
}
|
|
if(CHECK_ISP_HW_V21()) {
|
free(pAdrcCtx->Config.Drc_v21.DrcGain.EnvLv);
|
free(pAdrcCtx->Config.Drc_v21.DrcGain.DrcGain);
|
free(pAdrcCtx->Config.Drc_v21.DrcGain.Alpha);
|
free(pAdrcCtx->Config.Drc_v21.DrcGain.Clip);
|
free(pAdrcCtx->Config.Drc_v21.HiLit.EnvLv);
|
free(pAdrcCtx->Config.Drc_v21.HiLit.Strength);
|
free(pAdrcCtx->Config.Drc_v21.Local.EnvLv);
|
free(pAdrcCtx->Config.Drc_v21.Local.LocalWeit);
|
free(pAdrcCtx->Config.Drc_v21.Local.GlobalContrast);
|
free(pAdrcCtx->Config.Drc_v21.Local.LoLitContrast);
|
}
|
else if(CHECK_ISP_HW_V30()) {
|
free(pAdrcCtx->Config.Drc_v30.DrcGain.EnvLv);
|
free(pAdrcCtx->Config.Drc_v30.DrcGain.DrcGain);
|
free(pAdrcCtx->Config.Drc_v30.DrcGain.Alpha);
|
free(pAdrcCtx->Config.Drc_v30.DrcGain.Clip);
|
free(pAdrcCtx->Config.Drc_v30.HiLit.EnvLv);
|
free(pAdrcCtx->Config.Drc_v30.HiLit.Strength);
|
free(pAdrcCtx->Config.Drc_v30.Local.EnvLv);
|
free(pAdrcCtx->Config.Drc_v30.Local.LocalAutoEnable);
|
free(pAdrcCtx->Config.Drc_v30.Local.LocalAutoWeit);
|
free(pAdrcCtx->Config.Drc_v30.Local.LocalWeit);
|
free(pAdrcCtx->Config.Drc_v30.Local.GlobalContrast);
|
free(pAdrcCtx->Config.Drc_v30.Local.LoLitContrast);
|
}
|
memset(pAdrcCtx, 0, sizeof(AdrcContext_t));
|
free(pAdrcCtx);
|
pAdrcCtx = NULL;
|
|
LOG1_ATMO( "%s:exit!\n", __FUNCTION__);
|
|
return (XCAM_RETURN_NO_ERROR);
|
}
|