/* 
 | 
 *  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 
 |