/*
|
* Copyright (c) 2019 Rockchip Corporation
|
*
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
* you may not use this file except in compliance with the License.
|
* You may obtain a copy of the License at
|
*
|
* http://www.apache.org/licenses/LICENSE-2.0
|
*
|
* Unless required by applicable law or agreed to in writing, software
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
* See the License for the specific language governing permissions and
|
* limitations under the License.
|
*
|
*/
|
|
#include "rk_aiq_user_api_ahdr.h"
|
#include "RkAiqHandleInt.h"
|
|
RKAIQ_BEGIN_DECLARE
|
|
#ifdef RK_SIMULATOR_HW
|
#define CHECK_USER_API_ENABLE
|
#endif
|
|
void
|
MergeSetData(CalibDbV2_merge_t* CalibV2, CalibDb_HdrMerge_t*CalibV1)
|
{
|
//len
|
CalibV2->MergeTuningPara.OECurve.EnvLv_len = 13;
|
CalibV2->MergeTuningPara.OECurve.Smooth_len = CalibV2->MergeTuningPara.OECurve.EnvLv_len;
|
CalibV2->MergeTuningPara.OECurve.Offset_len = CalibV2->MergeTuningPara.OECurve.EnvLv_len;
|
|
CalibV2->MergeTuningPara.MDCurve.MoveCoef_len = 13;
|
CalibV2->MergeTuningPara.MDCurve.LM_smooth_len = CalibV2->MergeTuningPara.MDCurve.MoveCoef_len;
|
CalibV2->MergeTuningPara.MDCurve.LM_offset_len = CalibV2->MergeTuningPara.MDCurve.MoveCoef_len;
|
CalibV2->MergeTuningPara.MDCurve.MS_smooth_len = CalibV2->MergeTuningPara.MDCurve.MoveCoef_len;
|
CalibV2->MergeTuningPara.MDCurve.MS_offset_len = CalibV2->MergeTuningPara.MDCurve.MoveCoef_len;
|
|
//malloc
|
CalibV2->MergeTuningPara.OECurve.EnvLv = (float *) malloc(sizeof(float) * 13);
|
CalibV2->MergeTuningPara.OECurve.Smooth = (float *) malloc(sizeof(float) * 13);
|
CalibV2->MergeTuningPara.OECurve.Offset = (float *) malloc(sizeof(float) * 13);
|
|
CalibV2->MergeTuningPara.MDCurve.MoveCoef = (float *) malloc(sizeof(float) * 13);
|
CalibV2->MergeTuningPara.MDCurve.LM_smooth = (float *) malloc(sizeof(float) * 13);
|
CalibV2->MergeTuningPara.MDCurve.LM_offset = (float *) malloc(sizeof(float) * 13);
|
CalibV2->MergeTuningPara.MDCurve.MS_smooth = (float *) malloc(sizeof(float) * 13);
|
CalibV2->MergeTuningPara.MDCurve.MS_offset = (float *) malloc(sizeof(float) * 13);
|
|
|
for(int i = 0; i < 13; i++) {
|
CalibV2->MergeTuningPara.OECurve.EnvLv[i] = CalibV1->envLevel[i];
|
CalibV2->MergeTuningPara.OECurve.Smooth[i] = CalibV1->oeCurve_smooth[i];
|
CalibV2->MergeTuningPara.OECurve.Offset[i] = CalibV1->oeCurve_offset[i];
|
CalibV2->MergeTuningPara.MDCurve.MoveCoef[i] = CalibV1->moveCoef[i];
|
CalibV2->MergeTuningPara.MDCurve.LM_smooth[i] = CalibV1->mdCurveLm_smooth[i];
|
CalibV2->MergeTuningPara.MDCurve.LM_offset[i] = CalibV1->mdCurveLm_offset[i];
|
CalibV2->MergeTuningPara.MDCurve.MS_smooth[i] = CalibV1->mdCurveMs_smooth[i];
|
CalibV2->MergeTuningPara.MDCurve.MS_offset[i] = CalibV1->mdCurveMs_offset[i];
|
}
|
CalibV2->MergeTuningPara.OECurve_damp = CalibV1->oeCurve_damp;
|
CalibV2->MergeTuningPara.MDCurveLM_damp = CalibV1->mdCurveLm_damp;
|
CalibV2->MergeTuningPara.MDCurveMS_damp = CalibV1->mdCurveMs_damp;
|
}
|
|
void
|
TmoSetData(CalibDbV2_tmo_t* CalibV2, CalibDb_HdrTmo_t*CalibV1)
|
{
|
//len
|
CalibV2->TmoTuningPara.GlobalLuma.GlobalLumaData.EnvLv_len = 13;
|
CalibV2->TmoTuningPara.GlobalLuma.GlobalLumaData.ISO_len = CalibV2->TmoTuningPara.GlobalLuma.GlobalLumaData.EnvLv_len;
|
CalibV2->TmoTuningPara.GlobalLuma.GlobalLumaData.Strength_len = CalibV2->TmoTuningPara.GlobalLuma.GlobalLumaData.EnvLv_len;
|
CalibV2->TmoTuningPara.DetailsHighLight.HighLightData.OEPdf_len = CalibV2->TmoTuningPara.GlobalLuma.GlobalLumaData.EnvLv_len;
|
CalibV2->TmoTuningPara.DetailsHighLight.HighLightData.EnvLv_len = CalibV2->TmoTuningPara.GlobalLuma.GlobalLumaData.EnvLv_len;
|
CalibV2->TmoTuningPara.DetailsHighLight.HighLightData.Strength_len = CalibV2->TmoTuningPara.GlobalLuma.GlobalLumaData.EnvLv_len;
|
CalibV2->TmoTuningPara.DetailsLowLight.LowLightData.FocusLuma_len = CalibV2->TmoTuningPara.GlobalLuma.GlobalLumaData.EnvLv_len;
|
CalibV2->TmoTuningPara.DetailsLowLight.LowLightData.DarkPdf_len = CalibV2->TmoTuningPara.GlobalLuma.GlobalLumaData.EnvLv_len;
|
CalibV2->TmoTuningPara.DetailsLowLight.LowLightData.ISO_len = CalibV2->TmoTuningPara.GlobalLuma.GlobalLumaData.EnvLv_len;
|
CalibV2->TmoTuningPara.DetailsLowLight.LowLightData.Strength_len = CalibV2->TmoTuningPara.GlobalLuma.GlobalLumaData.EnvLv_len;
|
CalibV2->TmoTuningPara.GlobaTMO.GlobalTmoData.DynamicRange_len = CalibV2->TmoTuningPara.GlobalLuma.GlobalLumaData.EnvLv_len;
|
CalibV2->TmoTuningPara.GlobaTMO.GlobalTmoData.EnvLv_len = CalibV2->TmoTuningPara.GlobalLuma.GlobalLumaData.EnvLv_len;
|
CalibV2->TmoTuningPara.GlobaTMO.GlobalTmoData.Strength_len = CalibV2->TmoTuningPara.GlobalLuma.GlobalLumaData.EnvLv_len;
|
CalibV2->TmoTuningPara.LocalTMO.LocalTmoData.DynamicRange_len = CalibV2->TmoTuningPara.GlobalLuma.GlobalLumaData.EnvLv_len;
|
CalibV2->TmoTuningPara.LocalTMO.LocalTmoData.EnvLv_len = CalibV2->TmoTuningPara.GlobalLuma.GlobalLumaData.EnvLv_len;
|
CalibV2->TmoTuningPara.LocalTMO.LocalTmoData.Strength_len = CalibV2->TmoTuningPara.GlobalLuma.GlobalLumaData.EnvLv_len;
|
|
//malloc
|
CalibV2->TmoTuningPara.GlobalLuma.GlobalLumaData.EnvLv = (float *) malloc(sizeof(float) * 13);
|
CalibV2->TmoTuningPara.GlobalLuma.GlobalLumaData.ISO = (float *) malloc(sizeof(float) * 13);
|
CalibV2->TmoTuningPara.GlobalLuma.GlobalLumaData.Strength = (float *) malloc(sizeof(float) * 13);
|
CalibV2->TmoTuningPara.DetailsHighLight.HighLightData.OEPdf = (float *) malloc(sizeof(float) * 13);
|
CalibV2->TmoTuningPara.DetailsHighLight.HighLightData.EnvLv = (float *) malloc(sizeof(float) * 13);
|
CalibV2->TmoTuningPara.DetailsHighLight.HighLightData.Strength = (float *) malloc(sizeof(float) * 13);
|
CalibV2->TmoTuningPara.DetailsLowLight.LowLightData.FocusLuma = (float *) malloc(sizeof(float) * 13);
|
CalibV2->TmoTuningPara.DetailsLowLight.LowLightData.DarkPdf = (float *) malloc(sizeof(float) * 13);
|
CalibV2->TmoTuningPara.DetailsLowLight.LowLightData.ISO = (float *) malloc(sizeof(float) * 13);
|
CalibV2->TmoTuningPara.DetailsLowLight.LowLightData.Strength = (float *) malloc(sizeof(float) * 13);
|
CalibV2->TmoTuningPara.GlobaTMO.GlobalTmoData.DynamicRange = (float *) malloc(sizeof(float) * 13);
|
CalibV2->TmoTuningPara.GlobaTMO.GlobalTmoData.EnvLv = (float *) malloc(sizeof(float) * 13);
|
CalibV2->TmoTuningPara.GlobaTMO.GlobalTmoData.Strength = (float *) malloc(sizeof(float) * 13);
|
CalibV2->TmoTuningPara.LocalTMO.LocalTmoData.DynamicRange = (float *) malloc(sizeof(float) * 13);
|
CalibV2->TmoTuningPara.LocalTMO.LocalTmoData.EnvLv = (float *) malloc(sizeof(float) * 13);
|
CalibV2->TmoTuningPara.LocalTMO.LocalTmoData.Strength = (float *) malloc(sizeof(float) * 13);
|
|
|
CalibV2->TmoTuningPara.Enable = CalibV1->en[0].en;
|
//global luma
|
CalibV2->TmoTuningPara.GlobalLuma.Mode = CalibV1->luma[0].GlobalLumaMode ? GLOBALLUMAMODE_ISO : GLOBALLUMAMODE_ENVLV;
|
for(int i = 0; i < 13; i++) {
|
CalibV2->TmoTuningPara.GlobalLuma.GlobalLumaData.EnvLv[i] = CalibV1->luma[0].envLevel[i];
|
CalibV2->TmoTuningPara.GlobalLuma.GlobalLumaData.ISO[i] = CalibV1->luma[0].ISO[i];
|
CalibV2->TmoTuningPara.GlobalLuma.GlobalLumaData.Strength[i] = CalibV1->luma[0].globalLuma[i];
|
}
|
CalibV2->TmoTuningPara.GlobalLuma.Tolerance = CalibV1->luma[0].Tolerance;
|
//details high light
|
CalibV2->TmoTuningPara.DetailsHighLight.Mode = CalibV1->HighLight[0].DetailsHighLightMode ? DETAILSHIGHLIGHTMODE_ENVLV : DETAILSHIGHLIGHTMODE_OEPDF;
|
for(int i = 0; i < 13; i++) {
|
|
CalibV2->TmoTuningPara.DetailsHighLight.HighLightData.OEPdf[i] = CalibV1->HighLight[0].OEPdf[i];
|
CalibV2->TmoTuningPara.DetailsHighLight.HighLightData.EnvLv[i] = CalibV1->HighLight[0].EnvLv[i];
|
CalibV2->TmoTuningPara.DetailsHighLight.HighLightData.Strength[i] = CalibV1->HighLight[0].detailsHighLight[i];
|
}
|
CalibV2->TmoTuningPara.DetailsHighLight.Tolerance = CalibV1->HighLight[0].Tolerance;
|
//details low light
|
if(CalibV1->LowLight[0].DetailsLowLightMode == 0)
|
CalibV2->TmoTuningPara.DetailsLowLight.Mode = DETAILSLOWLIGHTMODE_FOCUSLUMA;
|
else if(CalibV1->LowLight[0].DetailsLowLightMode > 0 && CalibV1->LowLight[0].DetailsLowLightMode < 2)
|
CalibV2->TmoTuningPara.DetailsLowLight.Mode = DETAILSLOWLIGHTMODE_DARKPDF;
|
else if(CalibV1->LowLight[0].DetailsLowLightMode >= 2)
|
CalibV2->TmoTuningPara.DetailsLowLight.Mode = DETAILSLOWLIGHTMODE_ISO;
|
for(int i = 0; i < 13; i++) {
|
|
CalibV2->TmoTuningPara.DetailsLowLight.LowLightData.FocusLuma[i] = CalibV1->LowLight[0].FocusLuma[i];
|
CalibV2->TmoTuningPara.DetailsLowLight.LowLightData.DarkPdf[i] = CalibV1->LowLight[0].DarkPdf[i];
|
CalibV2->TmoTuningPara.DetailsLowLight.LowLightData.ISO[i] = CalibV1->LowLight[0].ISO[i];
|
CalibV2->TmoTuningPara.DetailsLowLight.LowLightData.Strength[i] = CalibV1->LowLight[0].detailsLowLight[i];
|
}
|
CalibV2->TmoTuningPara.DetailsLowLight.Tolerance = CalibV1->LowLight[0].Tolerance;
|
//global tmo
|
CalibV2->TmoTuningPara.GlobaTMO.IIR = CalibV1->GlobaTMO[0].iir;
|
CalibV2->TmoTuningPara.GlobaTMO.Mode = CalibV1->GlobaTMO[0].mode ? TMOTYPEMODE_ENVLV : TMOTYPEMODE_DYNAMICRANGE;
|
for(int i = 0; i < 13; i++) {
|
|
CalibV2->TmoTuningPara.GlobaTMO.GlobalTmoData.DynamicRange[i] = CalibV1->GlobaTMO[0].DynamicRange[i];
|
CalibV2->TmoTuningPara.GlobaTMO.GlobalTmoData.EnvLv[i] = CalibV1->GlobaTMO[0].EnvLv[i];
|
CalibV2->TmoTuningPara.GlobaTMO.GlobalTmoData.Strength[i] = CalibV1->GlobaTMO[0].Strength[i];
|
}
|
CalibV2->TmoTuningPara.GlobaTMO.Tolerance = CalibV1->GlobaTMO[0].Tolerance;
|
//local tmo
|
CalibV2->TmoTuningPara.LocalTMO.Mode = CalibV1->LocalTMO[0].LocalTMOMode ? TMOTYPEMODE_ENVLV : TMOTYPEMODE_DYNAMICRANGE;
|
for(int i = 0; i < 13; i++) {
|
|
CalibV2->TmoTuningPara.LocalTMO.LocalTmoData.DynamicRange[i] = CalibV1->LocalTMO[0].DynamicRange[i];
|
CalibV2->TmoTuningPara.LocalTMO.LocalTmoData.EnvLv[i] = CalibV1->LocalTMO[0].EnvLv[i];
|
CalibV2->TmoTuningPara.LocalTMO.LocalTmoData.Strength[i] = CalibV1->LocalTMO[0].Strength[i];
|
}
|
CalibV2->TmoTuningPara.LocalTMO.Tolerance = CalibV1->LocalTMO[0].Tolerance;
|
CalibV2->TmoTuningPara.damp = CalibV1->damp;
|
}
|
|
void
|
TransferSetData(amerge_attrib_t* merge, atmo_attrib_t*tmo, ahdr_attrib_t *attr)
|
{
|
switch (attr->opMode)
|
{
|
case HDR_OpMode_Api_OFF:
|
merge->opMode = MERGE_OPMODE_API_OFF;
|
tmo->opMode = TMO_OPMODE_API_OFF;
|
break;
|
case HDR_OpMode_Auto:
|
merge->opMode = MERGE_OPMODE_AUTO;
|
tmo->opMode = TMO_OPMODE_AUTO;
|
break;
|
case HDR_OpMode_MANU:
|
merge->opMode = MERGE_OPMODE_MANU;
|
tmo->opMode = TMO_OPMODE_MANU;
|
break;
|
case HDR_OpMode_SET_LEVEL:
|
merge->opMode = MERGE_OPMODE_API_OFF;
|
tmo->opMode = TMO_OPMODE_SET_LEVEL;
|
break;
|
case HDR_OpMode_DarkArea:
|
merge->opMode = MERGE_OPMODE_API_OFF;
|
tmo->opMode = TMO_OPMODE_DARKAREA;
|
break;
|
case HDR_OpMode_Tool:
|
merge->opMode = MERGE_OPMODE_TOOL;
|
tmo->opMode = TMO_OPMODE_TOOL;
|
break;
|
default:
|
LOGE_ATMO("%s: Wrong HDR api opmode!!!\n", __FUNCTION__);
|
break;
|
}
|
|
//st auto
|
merge->stAuto.bUpdateMge = attr->stAuto.bUpdateMge;
|
memcpy(&merge->stAuto.stMgeAuto, &attr->stAuto.stMgeAuto, sizeof(amgeAttr_t));
|
tmo->stAuto.bUpdateTmo = attr->stAuto.bUpdateTmo;
|
memcpy(&tmo->stAuto.stTmoAuto, &attr->stAuto.stTmoAuto, sizeof(atmoAttr_t));
|
|
//st manu
|
merge->stManual.bUpdateMge = attr->stManual.bUpdateMge;
|
memcpy(&merge->stManual.stMgeManual, &attr->stManual.stMgeManual, sizeof(mmgeAttr_t));
|
tmo->stManual.bUpdateTmo = attr->stManual.bUpdateTmo;
|
memcpy(&tmo->stManual.stTmoManual, &attr->stManual.stTmoManual, sizeof(mtmoAttr_t));
|
|
//st level
|
tmo->stSetLevel.level = attr->stSetLevel.level;
|
|
//st darkare
|
tmo->stDarkArea.level = attr->stDarkArea.level;
|
|
//st tool
|
MergeSetData(&merge->stTool, &attr->stTool.merge);
|
TmoSetData(&tmo->stTool, &attr->stTool.tmo);
|
|
}
|
|
void
|
MergeGetData(CalibDbV2_merge_t* CalibV2, CalibDb_HdrMerge_t*CalibV1)
|
{
|
//oe curve
|
if(CalibV2->MergeTuningPara.OECurve.EnvLv_len >= 13 ) {
|
for(int i = 0 ; i < 13; i++) {
|
CalibV1->envLevel[i] = CalibV2->MergeTuningPara.OECurve.EnvLv[i];
|
CalibV1->oeCurve_smooth[i] = CalibV2->MergeTuningPara.OECurve.Smooth[i];
|
CalibV1->oeCurve_offset[i] = CalibV2->MergeTuningPara.OECurve.Offset[i];
|
}
|
}
|
else if (CalibV2->MergeTuningPara.OECurve.EnvLv_len >= 1 && CalibV2->MergeTuningPara.OECurve.EnvLv_len < 13 ) {
|
for(int i = 0 ; i < CalibV2->MergeTuningPara.OECurve.EnvLv_len; i++) {
|
CalibV1->envLevel[i] = CalibV2->MergeTuningPara.OECurve.EnvLv[i];
|
CalibV1->oeCurve_smooth[i] = CalibV2->MergeTuningPara.OECurve.Smooth[i];
|
CalibV1->oeCurve_offset[i] = CalibV2->MergeTuningPara.OECurve.Offset[i];
|
}
|
int j = CalibV2->MergeTuningPara.OECurve.EnvLv_len - 1;
|
for(int i = CalibV2->MergeTuningPara.OECurve.EnvLv_len ; i < 13; i++) {
|
CalibV1->envLevel[i] = CalibV2->MergeTuningPara.OECurve.EnvLv[j];
|
CalibV1->oeCurve_smooth[i] = CalibV2->MergeTuningPara.OECurve.Smooth[j];
|
CalibV1->oeCurve_offset[i] = CalibV2->MergeTuningPara.OECurve.Offset[j];
|
}
|
}
|
//md curve
|
if(CalibV2->MergeTuningPara.MDCurve.MoveCoef_len >= 13 ) {
|
for(int i = 0 ; i < 13; i++) {
|
CalibV1->moveCoef[i] = CalibV2->MergeTuningPara.MDCurve.MoveCoef[i];
|
CalibV1->mdCurveLm_smooth[i] = CalibV2->MergeTuningPara.MDCurve.LM_smooth[i];
|
CalibV1->mdCurveLm_offset[i] = CalibV2->MergeTuningPara.MDCurve.LM_offset[i];
|
CalibV1->mdCurveMs_smooth[i] = CalibV2->MergeTuningPara.MDCurve.MS_smooth[i];
|
CalibV1->mdCurveMs_offset[i] = CalibV2->MergeTuningPara.MDCurve.MS_offset[i];
|
}
|
}
|
else if (CalibV2->MergeTuningPara.MDCurve.MoveCoef_len >= 1 && CalibV2->MergeTuningPara.MDCurve.MoveCoef_len < 13 ) {
|
for(int i = 0 ; i < CalibV2->MergeTuningPara.MDCurve.MoveCoef_len; i++) {
|
CalibV1->moveCoef[i] = CalibV2->MergeTuningPara.MDCurve.MoveCoef[i];
|
CalibV1->mdCurveLm_smooth[i] = CalibV2->MergeTuningPara.MDCurve.LM_smooth[i];
|
CalibV1->mdCurveLm_offset[i] = CalibV2->MergeTuningPara.MDCurve.LM_offset[i];
|
CalibV1->mdCurveMs_smooth[i] = CalibV2->MergeTuningPara.MDCurve.MS_smooth[i];
|
CalibV1->mdCurveMs_offset[i] = CalibV2->MergeTuningPara.MDCurve.MS_offset[i];
|
}
|
int j = CalibV2->MergeTuningPara.MDCurve.MoveCoef_len - 1;
|
for(int i = CalibV2->MergeTuningPara.MDCurve.MoveCoef_len; i < 13; i++) {
|
CalibV1->moveCoef[i] = CalibV2->MergeTuningPara.MDCurve.MoveCoef[j];
|
CalibV1->mdCurveLm_smooth[i] = CalibV2->MergeTuningPara.MDCurve.LM_smooth[j];
|
CalibV1->mdCurveLm_offset[i] = CalibV2->MergeTuningPara.MDCurve.LM_offset[j];
|
CalibV1->mdCurveMs_smooth[i] = CalibV2->MergeTuningPara.MDCurve.MS_smooth[j];
|
CalibV1->mdCurveMs_offset[i] = CalibV2->MergeTuningPara.MDCurve.MS_offset[j];
|
}
|
}
|
//other
|
CalibV1->oeCurve_damp = CalibV2->MergeTuningPara.OECurve_damp;
|
CalibV1->mdCurveLm_damp = CalibV2->MergeTuningPara.MDCurveLM_damp;
|
CalibV1->mdCurveMs_damp = CalibV2->MergeTuningPara.MDCurveMS_damp;
|
|
}
|
|
void
|
TmoGetData(CalibDbV2_tmo_t* CalibV2, CalibDb_HdrTmo_t*CalibV1)
|
{
|
|
for(int i = 0; i < 3; i++) {
|
//global luma
|
if(CalibV2->TmoTuningPara.GlobalLuma.GlobalLumaData.EnvLv_len >= 13 ) {
|
for(int j = 0 ; j < 13; j++) {
|
CalibV1->luma[i].envLevel[j] = CalibV2->TmoTuningPara.GlobalLuma.GlobalLumaData.EnvLv[j];
|
CalibV1->luma[i].ISO[j] = CalibV2->TmoTuningPara.GlobalLuma.GlobalLumaData.ISO[j];
|
CalibV1->luma[i].globalLuma[j] = CalibV2->TmoTuningPara.GlobalLuma.GlobalLumaData.Strength[j];
|
}
|
} else if(CalibV2->TmoTuningPara.GlobalLuma.GlobalLumaData.EnvLv_len >= 1 && CalibV2->TmoTuningPara.GlobalLuma.GlobalLumaData.EnvLv_len < 13 ) {
|
for(int j = 0 ; j < CalibV2->TmoTuningPara.GlobalLuma.GlobalLumaData.EnvLv_len; j++) {
|
CalibV1->luma[i].envLevel[j] = CalibV2->TmoTuningPara.GlobalLuma.GlobalLumaData.EnvLv[j];
|
CalibV1->luma[i].ISO[j] = CalibV2->TmoTuningPara.GlobalLuma.GlobalLumaData.ISO[j];
|
CalibV1->luma[i].globalLuma[j] = CalibV2->TmoTuningPara.GlobalLuma.GlobalLumaData.Strength[j];
|
}
|
int k = CalibV2->TmoTuningPara.GlobalLuma.GlobalLumaData.EnvLv_len - 1;
|
for(int j = CalibV2->TmoTuningPara.GlobalLuma.GlobalLumaData.EnvLv_len; j < 13; j++) {
|
CalibV1->luma[i].envLevel[j] = CalibV2->TmoTuningPara.GlobalLuma.GlobalLumaData.EnvLv[k];
|
CalibV1->luma[i].ISO[j] = CalibV2->TmoTuningPara.GlobalLuma.GlobalLumaData.ISO[k];
|
CalibV1->luma[i].globalLuma[j] = CalibV2->TmoTuningPara.GlobalLuma.GlobalLumaData.Strength[k];
|
}
|
}
|
|
//high light
|
if(CalibV2->TmoTuningPara.DetailsHighLight.HighLightData.OEPdf_len >= 13 ) {
|
for(int j = 0 ; j < 13; j++) {
|
CalibV1->HighLight[i].OEPdf[j] = CalibV2->TmoTuningPara.DetailsHighLight.HighLightData.OEPdf[j];
|
CalibV1->HighLight[i].EnvLv[j] = CalibV2->TmoTuningPara.DetailsHighLight.HighLightData.EnvLv[j];
|
CalibV1->HighLight[i].detailsHighLight[j] = CalibV2->TmoTuningPara.DetailsHighLight.HighLightData.Strength[j];
|
}
|
} else if(CalibV2->TmoTuningPara.DetailsHighLight.HighLightData.OEPdf_len >= 1 && CalibV2->TmoTuningPara.DetailsHighLight.HighLightData.OEPdf_len < 13 ) {
|
for(int j = 0 ; j < CalibV2->TmoTuningPara.DetailsHighLight.HighLightData.OEPdf_len; j++) {
|
CalibV1->HighLight[i].OEPdf[j] = CalibV2->TmoTuningPara.DetailsHighLight.HighLightData.OEPdf[j];
|
CalibV1->HighLight[i].EnvLv[j] = CalibV2->TmoTuningPara.DetailsHighLight.HighLightData.EnvLv[j];
|
CalibV1->HighLight[i].detailsHighLight[j] = CalibV2->TmoTuningPara.DetailsHighLight.HighLightData.Strength[j];
|
}
|
int k = CalibV2->TmoTuningPara.DetailsHighLight.HighLightData.OEPdf_len - 1;
|
for(int j = CalibV2->TmoTuningPara.DetailsHighLight.HighLightData.OEPdf_len; j < 13; j++) {
|
CalibV1->HighLight[i].OEPdf[j] = CalibV2->TmoTuningPara.DetailsHighLight.HighLightData.OEPdf[k];
|
CalibV1->HighLight[i].EnvLv[j] = CalibV2->TmoTuningPara.DetailsHighLight.HighLightData.EnvLv[k];
|
CalibV1->HighLight[i].detailsHighLight[j] = CalibV2->TmoTuningPara.DetailsHighLight.HighLightData.Strength[k];
|
}
|
}
|
//low light
|
if(CalibV2->TmoTuningPara.DetailsLowLight.LowLightData.FocusLuma_len >= 13 ) {
|
for(int j = 0 ; j < 13; j++) {
|
CalibV1->LowLight[i].FocusLuma[j] = CalibV2->TmoTuningPara.DetailsLowLight.LowLightData.FocusLuma[j];
|
CalibV1->LowLight[i].DarkPdf[j] = CalibV2->TmoTuningPara.DetailsLowLight.LowLightData.DarkPdf[j];
|
CalibV1->LowLight[i].ISO[j] = CalibV2->TmoTuningPara.DetailsLowLight.LowLightData.ISO[j];
|
CalibV1->LowLight[i].detailsLowLight[j] = CalibV2->TmoTuningPara.DetailsLowLight.LowLightData.Strength[j];
|
}
|
} else if(CalibV2->TmoTuningPara.DetailsLowLight.LowLightData.FocusLuma_len >= 1 && CalibV2->TmoTuningPara.DetailsLowLight.LowLightData.FocusLuma_len < 13 ) {
|
for(int j = 0 ; j < CalibV2->TmoTuningPara.DetailsLowLight.LowLightData.FocusLuma_len; j++) {
|
CalibV1->LowLight[i].FocusLuma[j] = CalibV2->TmoTuningPara.DetailsLowLight.LowLightData.FocusLuma[j];
|
CalibV1->LowLight[i].DarkPdf[j] = CalibV2->TmoTuningPara.DetailsLowLight.LowLightData.DarkPdf[j];
|
CalibV1->LowLight[i].ISO[j] = CalibV2->TmoTuningPara.DetailsLowLight.LowLightData.ISO[j];
|
CalibV1->LowLight[i].detailsLowLight[j] = CalibV2->TmoTuningPara.DetailsLowLight.LowLightData.Strength[j];
|
}
|
int k = CalibV2->TmoTuningPara.DetailsLowLight.LowLightData.FocusLuma_len - 1;
|
for(int j = CalibV2->TmoTuningPara.DetailsLowLight.LowLightData.FocusLuma_len; j < 13; j++) {
|
CalibV1->LowLight[i].FocusLuma[j] = CalibV2->TmoTuningPara.DetailsLowLight.LowLightData.FocusLuma[k];
|
CalibV1->LowLight[i].DarkPdf[j] = CalibV2->TmoTuningPara.DetailsLowLight.LowLightData.DarkPdf[k];
|
CalibV1->LowLight[i].ISO[j] = CalibV2->TmoTuningPara.DetailsLowLight.LowLightData.ISO[k];
|
CalibV1->LowLight[i].detailsLowLight[j] = CalibV2->TmoTuningPara.DetailsLowLight.LowLightData.Strength[k];
|
}
|
}
|
//global tmo
|
if(CalibV2->TmoTuningPara.GlobaTMO.GlobalTmoData.DynamicRange_len >= 13 ) {
|
for(int j = 0 ; j < 13; j++) {
|
CalibV1->GlobaTMO[i].DynamicRange[j] = CalibV2->TmoTuningPara.GlobaTMO.GlobalTmoData.DynamicRange[j];
|
CalibV1->GlobaTMO[i].EnvLv[j] = CalibV2->TmoTuningPara.GlobaTMO.GlobalTmoData.EnvLv[j];
|
CalibV1->GlobaTMO[i].Strength[j] = CalibV2->TmoTuningPara.GlobaTMO.GlobalTmoData.Strength[j];
|
}
|
} else if(CalibV2->TmoTuningPara.GlobaTMO.GlobalTmoData.DynamicRange_len >= 1 && CalibV2->TmoTuningPara.GlobaTMO.GlobalTmoData.DynamicRange_len < 13 ) {
|
for(int j = 0 ; j < CalibV2->TmoTuningPara.GlobaTMO.GlobalTmoData.DynamicRange_len; j++) {
|
CalibV1->GlobaTMO[i].DynamicRange[j] = CalibV2->TmoTuningPara.GlobaTMO.GlobalTmoData.DynamicRange[j];
|
CalibV1->GlobaTMO[i].EnvLv[j] = CalibV2->TmoTuningPara.GlobaTMO.GlobalTmoData.EnvLv[j];
|
CalibV1->GlobaTMO[i].Strength[j] = CalibV2->TmoTuningPara.GlobaTMO.GlobalTmoData.Strength[j];
|
}
|
int k = CalibV2->TmoTuningPara.GlobaTMO.GlobalTmoData.DynamicRange_len - 1;
|
for(int j = CalibV2->TmoTuningPara.GlobaTMO.GlobalTmoData.DynamicRange_len; j < 13; j++) {
|
CalibV1->GlobaTMO[i].DynamicRange[j] = CalibV2->TmoTuningPara.GlobaTMO.GlobalTmoData.DynamicRange[k];
|
CalibV1->GlobaTMO[i].EnvLv[j] = CalibV2->TmoTuningPara.GlobaTMO.GlobalTmoData.EnvLv[k];
|
CalibV1->GlobaTMO[i].Strength[j] = CalibV2->TmoTuningPara.GlobaTMO.GlobalTmoData.Strength[k];
|
}
|
}
|
//local tmo
|
if(CalibV2->TmoTuningPara.LocalTMO.LocalTmoData.DynamicRange_len >= 13 ) {
|
for(int j = 0 ; j < 13; j++) {
|
CalibV1->LocalTMO[i].DynamicRange[j] = CalibV2->TmoTuningPara.LocalTMO.LocalTmoData.DynamicRange[j];
|
CalibV1->LocalTMO[i].EnvLv[j] = CalibV2->TmoTuningPara.LocalTMO.LocalTmoData.EnvLv[j];
|
CalibV1->LocalTMO[i].Strength[j] = CalibV2->TmoTuningPara.LocalTMO.LocalTmoData.Strength[j];
|
}
|
} else if(CalibV2->TmoTuningPara.LocalTMO.LocalTmoData.DynamicRange_len >= 1 && CalibV2->TmoTuningPara.LocalTMO.LocalTmoData.DynamicRange_len < 13 ) {
|
for(int j = 0 ; j < CalibV2->TmoTuningPara.LocalTMO.LocalTmoData.DynamicRange_len; j++) {
|
CalibV1->LocalTMO[i].DynamicRange[j] = CalibV2->TmoTuningPara.LocalTMO.LocalTmoData.DynamicRange[j];
|
CalibV1->LocalTMO[i].EnvLv[j] = CalibV2->TmoTuningPara.LocalTMO.LocalTmoData.EnvLv[j];
|
CalibV1->LocalTMO[i].Strength[j] = CalibV2->TmoTuningPara.LocalTMO.LocalTmoData.Strength[j];
|
}
|
int k = CalibV2->TmoTuningPara.LocalTMO.LocalTmoData.DynamicRange_len - 1;
|
for(int j = CalibV2->TmoTuningPara.LocalTMO.LocalTmoData.DynamicRange_len; j < 13; j++) {
|
CalibV1->LocalTMO[i].DynamicRange[j] = CalibV2->TmoTuningPara.LocalTMO.LocalTmoData.DynamicRange[k];
|
CalibV1->LocalTMO[i].EnvLv[j] = CalibV2->TmoTuningPara.LocalTMO.LocalTmoData.EnvLv[k];
|
CalibV1->LocalTMO[i].Strength[j] = CalibV2->TmoTuningPara.LocalTMO.LocalTmoData.Strength[k];
|
}
|
}
|
}
|
|
//other
|
for(int i = 0; i < 3; i++) {
|
CalibV1->en[i].en = CalibV2->TmoTuningPara.Enable ? 1 : 0;
|
CalibV1->luma[i].GlobalLumaMode = CalibV2->TmoTuningPara.GlobalLuma.Mode;
|
CalibV1->luma[i].Tolerance = CalibV2->TmoTuningPara.GlobalLuma.Tolerance;
|
CalibV1->HighLight[i].DetailsHighLightMode = CalibV2->TmoTuningPara.DetailsHighLight.Mode;
|
CalibV1->HighLight[i].Tolerance = CalibV2->TmoTuningPara.DetailsHighLight.Tolerance;
|
CalibV1->LowLight[i].DetailsLowLightMode = CalibV2->TmoTuningPara.DetailsLowLight.Mode;
|
CalibV1->LowLight[i].Tolerance = CalibV2->TmoTuningPara.DetailsLowLight.Tolerance;
|
CalibV1->LocalTMO[i].LocalTMOMode = CalibV2->TmoTuningPara.LocalTMO.Mode;
|
CalibV1->LocalTMO[i].Tolerance = CalibV2->TmoTuningPara.LocalTMO.Tolerance;
|
CalibV1->GlobaTMO[i].en = CalibV2->TmoTuningPara.GlobaTMO.Enable ? 1 : 0;
|
CalibV1->GlobaTMO[i].iir = CalibV2->TmoTuningPara.GlobaTMO.IIR;
|
CalibV1->GlobaTMO[i].mode = CalibV2->TmoTuningPara.GlobaTMO.Mode;
|
CalibV1->GlobaTMO[i].Tolerance = CalibV2->TmoTuningPara.GlobaTMO.Tolerance;
|
}
|
CalibV1->damp = CalibV2->TmoTuningPara.damp;
|
|
|
}
|
|
void
|
TransferGetData(amerge_attrib_t* merge, atmo_attrib_t*tmo, ahdr_attrib_t *attr)
|
{
|
switch (tmo->opMode)
|
{
|
case TMO_OPMODE_API_OFF:
|
attr->opMode = HDR_OpMode_Api_OFF;
|
break;
|
case TMO_OPMODE_AUTO:
|
attr->opMode = HDR_OpMode_Auto;
|
break;
|
case TMO_OPMODE_MANU:
|
attr->opMode = HDR_OpMode_MANU;
|
break;
|
case TMO_OPMODE_SET_LEVEL:
|
attr->opMode = HDR_OpMode_SET_LEVEL;
|
break;
|
case TMO_OPMODE_DARKAREA:
|
attr->opMode = HDR_OpMode_DarkArea;
|
break;
|
case TMO_OPMODE_TOOL:
|
attr->opMode = HDR_OpMode_Tool;
|
break;
|
default:
|
LOGE_ATMO("%s: Wrong HDR api opmode!!!\n", __FUNCTION__);
|
break;
|
}
|
|
//st auto
|
attr->stAuto.bUpdateMge = merge->stAuto.bUpdateMge;
|
memcpy(&attr->stAuto.stMgeAuto, &merge->stAuto.stMgeAuto, sizeof(amgeAttr_t));
|
attr->stAuto.bUpdateTmo = tmo->stAuto.bUpdateTmo;
|
memcpy(&attr->stAuto.stTmoAuto, &tmo->stAuto.stTmoAuto, sizeof(atmoAttr_t));
|
|
//st manu
|
attr->stManual.bUpdateMge = merge->stManual.bUpdateMge;
|
memcpy(&attr->stManual.stMgeManual, &merge->stManual.stMgeManual, sizeof(mmgeAttr_t));
|
attr->stManual.bUpdateTmo = tmo->stManual.bUpdateTmo;
|
memcpy(&attr->stManual.stTmoManual, &tmo->stManual.stTmoManual, sizeof(mtmoAttr_t));
|
|
//st level
|
attr->stSetLevel.level = tmo->stSetLevel.level;
|
|
//st darkare
|
attr->stDarkArea.level = tmo->stDarkArea.level;
|
|
//st tool
|
MergeGetData(&merge->stTool, &attr->stTool.merge);
|
TmoGetData(&tmo->stTool, &attr->stTool.tmo);
|
|
//get ctrl data
|
attr->CtlInfo.MoveCoef = merge->CtlInfo.MoveCoef;
|
attr->CtlInfo.SceneMode = 0;
|
attr->CtlInfo.GlobalLumaMode = tmo->CtlInfo.GlobalLumaMode;
|
attr->CtlInfo.DetailsHighLightMode = tmo->CtlInfo.DetailsHighLightMode;
|
attr->CtlInfo.DetailsLowLightMode = tmo->CtlInfo.DetailsLowLightMode;
|
attr->CtlInfo.GlobalTmoMode = tmo->CtlInfo.GlobalTmoMode;
|
attr->CtlInfo.Envlv = tmo->CtlInfo.Envlv;
|
attr->CtlInfo.ISO = tmo->CtlInfo.ISO;
|
attr->CtlInfo.OEPdf = tmo->CtlInfo.OEPdf;
|
attr->CtlInfo.FocusLuma = tmo->CtlInfo.FocusLuma;
|
attr->CtlInfo.DarkPdf = tmo->CtlInfo.DarkPdf;
|
attr->CtlInfo.DynamicRange = tmo->CtlInfo.DynamicRange;
|
|
//get reg data
|
attr->RegInfo.OECurve_smooth = merge->RegInfo.OECurve_smooth;
|
attr->RegInfo.OECurve_offset = merge->RegInfo.OECurve_offset;
|
attr->RegInfo.MDCurveLM_smooth = merge->RegInfo.MDCurveLM_smooth;
|
attr->RegInfo.MDCurveLM_offset = merge->RegInfo.MDCurveLM_offset;
|
attr->RegInfo.MDCurveMS_smooth = merge->RegInfo.MDCurveMS_smooth;
|
attr->RegInfo.MDCurveMS_offset = merge->RegInfo.MDCurveMS_offset;
|
|
attr->RegInfo.GlobalLuma = tmo->RegInfo.GlobalLuma;
|
attr->RegInfo.DetailsHighlight = tmo->RegInfo.DetailsHighlight;
|
attr->RegInfo.DetailsLowlight = tmo->RegInfo.DetailsLowlight;
|
attr->RegInfo.GlobaltmoStrength = tmo->RegInfo.GlobaltmoStrength;
|
attr->RegInfo.LocalTmoStrength = tmo->RegInfo.LocalTmoStrength;
|
|
}
|
|
XCamReturn
|
rk_aiq_user_api_ahdr_SetAttrib(const rk_aiq_sys_ctx_t* sys_ctx, ahdr_attrib_t attr)
|
{
|
|
amerge_attrib_t mergeAttr;
|
memset(&mergeAttr, 0, sizeof(amerge_attrib_t));
|
atmo_attrib_t tmoAttr;
|
memset(&tmoAttr, 0, sizeof(atmo_attrib_t));
|
|
TransferSetData(&mergeAttr, &tmoAttr, &attr);
|
|
XCamReturn ret_amerge = rk_aiq_user_api2_amerge_SetAttrib(sys_ctx, mergeAttr);
|
XCamReturn ret_atmo = rk_aiq_user_api2_atmo_SetAttrib(sys_ctx, tmoAttr);
|
|
|
if (ret_amerge != XCAM_RETURN_NO_ERROR)
|
return ret_amerge;
|
|
if (ret_atmo != XCAM_RETURN_NO_ERROR)
|
return ret_atmo;
|
|
return XCAM_RETURN_NO_ERROR;
|
|
}
|
|
XCamReturn
|
rk_aiq_user_api_ahdr_GetAttrib(const rk_aiq_sys_ctx_t* sys_ctx, ahdr_attrib_t* attr)
|
{
|
amerge_attrib_t mergeAttr;
|
memset(&mergeAttr, 0, sizeof(amerge_attrib_t));
|
atmo_attrib_t tmoAttr;
|
memset(&tmoAttr, 0, sizeof(atmo_attrib_t));
|
|
TransferGetData(&mergeAttr, &tmoAttr, attr);
|
|
XCamReturn ret_amerge = rk_aiq_user_api2_amerge_GetAttrib(sys_ctx, &mergeAttr);
|
XCamReturn ret_atmo = rk_aiq_user_api2_atmo_GetAttrib(sys_ctx, &tmoAttr);
|
|
if (ret_amerge != XCAM_RETURN_NO_ERROR)
|
return ret_amerge;
|
|
if (ret_atmo != XCAM_RETURN_NO_ERROR)
|
return ret_atmo;
|
|
return XCAM_RETURN_NO_ERROR;
|
}
|
|
RKAIQ_END_DECLARE
|