/* * RkAiqHandleInt.cpp * * 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 "RkAiqHandleInt.h" #include "RkAiqCore.h" #include "aiq_core/RkAiqSharedDataManager.h" #include "smart_buffer_priv.h" #include "media_buffer/media_buffer_pool.h" namespace RkCam { XCamReturn RkAiqHandleIntCom::configInparamsCom(RkAiqAlgoCom* com, int type) { ENTER_ANALYZER_FUNCTION(); RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqAlgoComInt* rk_com = NULL; #define GET_RK_COM(algo) \ { \ if (type == RKAIQ_CONFIG_COM_PREPARE) \ rk_com = &(((RkAiqAlgoConfig##algo##Int*)com)->rk_com); \ else if (type == RKAIQ_CONFIG_COM_PRE) \ rk_com = &(((RkAiqAlgoPre##algo##Int*)com)->rk_com); \ else if (type == RKAIQ_CONFIG_COM_PROC) \ rk_com = &(((RkAiqAlgoProc##algo##Int*)com)->rk_com); \ else if (type == RKAIQ_CONFIG_COM_POST) \ rk_com = &(((RkAiqAlgoPost##algo##Int*)com)->rk_com); \ } \ switch (mDes->type) { case RK_AIQ_ALGO_TYPE_AE: GET_RK_COM(Ae); break; case RK_AIQ_ALGO_TYPE_AWB: GET_RK_COM(Awb); break; case RK_AIQ_ALGO_TYPE_AF: GET_RK_COM(Af); break; case RK_AIQ_ALGO_TYPE_ABLC: GET_RK_COM(Ablc); break; case RK_AIQ_ALGO_TYPE_ADPCC: GET_RK_COM(Adpcc); break; case RK_AIQ_ALGO_TYPE_AMERGE: GET_RK_COM(Amerge); break; case RK_AIQ_ALGO_TYPE_ATMO: GET_RK_COM(Atmo); break; case RK_AIQ_ALGO_TYPE_ANR: GET_RK_COM(Anr); break; case RK_AIQ_ALGO_TYPE_ALSC: GET_RK_COM(Alsc); break; case RK_AIQ_ALGO_TYPE_AGIC: GET_RK_COM(Agic); break; case RK_AIQ_ALGO_TYPE_ADEBAYER: GET_RK_COM(Adebayer); break; case RK_AIQ_ALGO_TYPE_ACCM: GET_RK_COM(Accm); break; case RK_AIQ_ALGO_TYPE_AGAMMA: GET_RK_COM(Agamma); break; case RK_AIQ_ALGO_TYPE_ADEGAMMA: GET_RK_COM(Adegamma); break; case RK_AIQ_ALGO_TYPE_AWDR: GET_RK_COM(Awdr); break; case RK_AIQ_ALGO_TYPE_ADHAZ: GET_RK_COM(Adhaz); break; case RK_AIQ_ALGO_TYPE_A3DLUT: GET_RK_COM(A3dlut); break; case RK_AIQ_ALGO_TYPE_ALDCH: GET_RK_COM(Aldch); break; case RK_AIQ_ALGO_TYPE_AR2Y: GET_RK_COM(Ar2y); break; case RK_AIQ_ALGO_TYPE_ACP: GET_RK_COM(Acp); break; case RK_AIQ_ALGO_TYPE_AIE: GET_RK_COM(Aie); break; case RK_AIQ_ALGO_TYPE_ASHARP: GET_RK_COM(Asharp); break; case RK_AIQ_ALGO_TYPE_AORB: GET_RK_COM(Aorb); break; case RK_AIQ_ALGO_TYPE_AFEC: GET_RK_COM(Afec); break; case RK_AIQ_ALGO_TYPE_ACGC: GET_RK_COM(Acgc); break; case RK_AIQ_ALGO_TYPE_ASD: GET_RK_COM(Asd); break; case RK_AIQ_ALGO_TYPE_ADRC: GET_RK_COM(Adrc); break; case RK_AIQ_ALGO_TYPE_AYNR: GET_RK_COM(Aynr); break; case RK_AIQ_ALGO_TYPE_ACNR: GET_RK_COM(Acnr); break; case RK_AIQ_ALGO_TYPE_ARAWNR: GET_RK_COM(Arawnr); break; case RK_AIQ_ALGO_TYPE_AEIS: GET_RK_COM(Aeis); break; case RK_AIQ_ALGO_TYPE_AMD: GET_RK_COM(Amd); break; case RK_AIQ_ALGO_TYPE_AMFNR: GET_RK_COM(Amfnr); break; case RK_AIQ_ALGO_TYPE_AGAIN: GET_RK_COM(Again); break; default: LOGE_ANALYZER("wrong algo type !"); } if (!rk_com) goto out; xcam_mem_clear(*rk_com); if (type == RkAiqHandle::RKAIQ_CONFIG_COM_PREPARE) { rk_com->u.prepare.calib = (CamCalibDbContext_t*)(sharedCom->calib); rk_com->u.prepare.calibv2 = (CamCalibDbV2Context_t*)(sharedCom->calibv2); } else { rk_com->u.proc.pre_res_comb = &shared->preResComb; rk_com->u.proc.proc_res_comb = &shared->procResComb; rk_com->u.proc.post_res_comb = &shared->postResComb; rk_com->u.proc.iso = sharedCom->iso; rk_com->u.proc.fill_light_on = sharedCom->fill_light_on; rk_com->u.proc.gray_mode = sharedCom->gray_mode; rk_com->u.proc.is_bw_sensor = sharedCom->is_bw_sensor; rk_com->u.proc.preExp = &shared->preExp; rk_com->u.proc.curExp = &shared->curExp; rk_com->u.proc.res_comb = &shared->res_comb; } EXIT_ANALYZER_FUNCTION(); out: return RkAiqHandle::configInparamsCom(com, type); } void RkAiqHandleIntCom::waitSignal() { if (mAiqCore->isRunningState()) { mUpdateCond.timedwait(mCfgMutex, 100000); } else { updateConfig(false); } } void RkAiqHandleIntCom::sendSignal() { if (mAiqCore->isRunningState()) mUpdateCond.signal(); } void RkAiqAeHandleInt::init() { ENTER_ANALYZER_FUNCTION(); RkAiqAeHandle::deInit(); mConfig = (RkAiqAlgoCom*)(new RkAiqAlgoConfigAeInt()); mPreInParam = (RkAiqAlgoCom*)(new RkAiqAlgoPreAeInt()); mPreOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoPreResAeInt()); mProcInParam = (RkAiqAlgoCom*)(new RkAiqAlgoProcAeInt()); mProcOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoProcResAeInt()); mPostInParam = (RkAiqAlgoCom*)(new RkAiqAlgoPostAeInt()); mPostOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoPostResAeInt()); EXIT_ANALYZER_FUNCTION(); } XCamReturn RkAiqAeHandleInt::updateConfig(bool needSync) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; if (needSync) mCfgMutex.lock(); // if something changed, api will modify aecCfg in mAlgoCtx if (updateExpSwAttr) { mCurExpSwAttr = mNewExpSwAttr; updateExpSwAttr = false; updateAttr |= UPDATE_EXPSWATTR; Uapi_ExpSwAttr_t ExpSwAttrV1 = mCurExpSwAttr; rk_aiq_uapi_ae_convExpSwAttr_v1Tov2(&ExpSwAttrV1, &mCurExpSwAttrV2); rk_aiq_uapi_ae_setExpSwAttr(mAlgoCtx, &mCurExpSwAttrV2, false); sendSignal(); } if (updateLinExpAttr) { mCurLinExpAttr = mNewLinExpAttr; updateLinExpAttr = false; updateAttr |= UPDATE_LINEXPATTR; Uapi_LinExpAttr_t LinExpAttrV1 = mCurLinExpAttr; rk_aiq_uapi_ae_convLinExpAttr_v1Tov2(&LinExpAttrV1, &mCurLinExpAttrV2); rk_aiq_uapi_ae_setLinExpAttr(mAlgoCtx, &mCurLinExpAttrV2, false); sendSignal(); } if (updateHdrExpAttr) { mCurHdrExpAttr = mNewHdrExpAttr; updateHdrExpAttr = false; updateAttr |= UPDATE_HDREXPATTR; Uapi_HdrExpAttr_t HdrExpAttrV1 = mCurHdrExpAttr; rk_aiq_uapi_ae_convHdrExpAttr_v1Tov2(&HdrExpAttrV1, &mCurHdrExpAttrV2); rk_aiq_uapi_ae_setHdrExpAttr(mAlgoCtx, &mCurHdrExpAttrV2, false); sendSignal(); } // TODO: update v2 if (updateExpSwAttrV2) { mCurExpSwAttrV2 = mNewExpSwAttrV2; updateExpSwAttrV2 = false; updateAttr |= UPDATE_EXPSWATTR; rk_aiq_uapi_ae_setExpSwAttr(mAlgoCtx, &mCurExpSwAttrV2, false); sendSignal(); } if (updateLinExpAttrV2) { mCurLinExpAttrV2 = mNewLinExpAttrV2; updateLinExpAttrV2 = false; updateAttr |= UPDATE_LINEXPATTR; rk_aiq_uapi_ae_setLinExpAttr(mAlgoCtx, &mCurLinExpAttrV2, false); sendSignal(); } if (updateHdrExpAttrV2) { mCurHdrExpAttrV2 = mNewHdrExpAttrV2; updateHdrExpAttrV2 = false; updateAttr |= UPDATE_HDREXPATTR; rk_aiq_uapi_ae_setHdrExpAttr(mAlgoCtx, &mCurHdrExpAttrV2, false); sendSignal(); } if (updateLinAeRouteAttr) { mCurLinAeRouteAttr = mNewLinAeRouteAttr; updateLinAeRouteAttr = false; updateAttr |= UPDATE_LINAEROUTEATTR; rk_aiq_uapi_ae_setLinAeRouteAttr(mAlgoCtx, &mCurLinAeRouteAttr, false); sendSignal(); } if (updateHdrAeRouteAttr) { mCurHdrAeRouteAttr = mNewHdrAeRouteAttr; updateHdrAeRouteAttr = false; updateAttr |= UPDATE_HDRAEROUTEATTR; rk_aiq_uapi_ae_setHdrAeRouteAttr(mAlgoCtx, &mCurHdrAeRouteAttr, false); sendSignal(); } if (updateIrisAttr) { mCurIrisAttr = mNewIrisAttr; updateIrisAttr = false; updateAttr |= UPDATE_IRISATTR; rk_aiq_uapi_ae_setIrisAttr(mAlgoCtx, &mCurIrisAttr, false); sendSignal(); } if (updateSyncTestAttr) { mCurAecSyncTestAttr = mNewAecSyncTestAttr; updateSyncTestAttr = false; updateAttr |= UPDATE_SYNCTESTATTR; rk_aiq_uapi_ae_setSyncTest(mAlgoCtx, &mCurAecSyncTestAttr, false); sendSignal(); } if (updateExpWinAttr) { mCurExpWinAttr = mNewExpWinAttr; updateExpWinAttr = false; updateAttr |= UPDATE_EXPWINATTR; rk_aiq_uapi_ae_setExpWinAttr(mAlgoCtx, &mCurExpWinAttr, false); sendSignal(); } // once any params are changed, run reconfig to convert aecCfg to paectx AeInstanceConfig_t* pAeInstConfig = (AeInstanceConfig_t*)mAlgoCtx; AeConfig_t pAecCfg = pAeInstConfig->aecCfg; pAecCfg->IsReconfig |= updateAttr; updateAttr = 0; if (needSync) mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAeHandleInt::setExpSwAttr(Uapi_ExpSwAttr_t ExpSwAttr) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; mCfgMutex.lock(); //TODO // check if there is different between att & mCurAtt // if something changed, set att to mNewAtt, and // the new params will be effective later when updateConfig // called by RkAiqCore // if something changed if (0 != memcmp(&mCurExpSwAttr, &ExpSwAttr, sizeof(Uapi_ExpSwAttr_t))) { mNewExpSwAttr = ExpSwAttr; updateExpSwAttr = true; waitSignal(); } mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAeHandleInt::getExpSwAttr(Uapi_ExpSwAttr_t* pExpSwAttr) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; Uapi_ExpSwAttrV2_t ExpSwAttrV2; memset(&ExpSwAttrV2, 0x00, sizeof(Uapi_ExpSwAttrV2_t)); rk_aiq_uapi_ae_getExpSwAttr(mAlgoCtx, &ExpSwAttrV2); rk_aiq_uapi_ae_convExpSwAttr_v2Tov1(&ExpSwAttrV2, pExpSwAttr); mCurExpSwAttrV2 = ExpSwAttrV2; EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAeHandleInt::setExpSwAttr(Uapi_ExpSwAttrV2_t ExpSwAttrV2) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; mCfgMutex.lock(); //TODO // check if there is different between att & mCurAtt // if something changed, set att to mNewAtt, and // the new params will be effective later when updateConfig // called by RkAiqCore // if something changed if (0 != memcmp(&mCurExpSwAttrV2, &ExpSwAttrV2, sizeof(Uapi_ExpSwAttrV2_t))) { mNewExpSwAttrV2 = ExpSwAttrV2; updateExpSwAttrV2 = true; waitSignal(); } mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAeHandleInt::getExpSwAttr(Uapi_ExpSwAttrV2_t* pExpSwAttrV2) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; rk_aiq_uapi_ae_getExpSwAttr(mAlgoCtx, pExpSwAttrV2); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAeHandleInt::setLinExpAttr(Uapi_LinExpAttr_t LinExpAttr) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; mCfgMutex.lock(); //TODO // check if there is different between att & mCurAtt // if something changed, set att to mNewAtt, and // the new params will be effective later when updateConfig // called by RkAiqCore // if something changed if (0 != memcmp(&mCurLinExpAttr, &LinExpAttr, sizeof(Uapi_LinExpAttr_t))) { mNewLinExpAttr = LinExpAttr; updateLinExpAttr = true; waitSignal(); } mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAeHandleInt::getLinExpAttr(Uapi_LinExpAttr_t* pLinExpAttr) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; Uapi_LinExpAttrV2_t LinExpAttrV2; memset(&LinExpAttrV2, 0x00, sizeof(Uapi_LinExpAttrV2_t)); rk_aiq_uapi_ae_getLinExpAttr(mAlgoCtx, &LinExpAttrV2); rk_aiq_uapi_ae_convLinExpAttr_v2Tov1(&LinExpAttrV2, pLinExpAttr); mCurLinExpAttrV2 = LinExpAttrV2; EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAeHandleInt::setLinExpAttr(Uapi_LinExpAttrV2_t LinExpAttrV2) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; mCfgMutex.lock(); //TODO // check if there is different between att & mCurAtt // if something changed, set att to mNewAtt, and // the new params will be effective later when updateConfig // called by RkAiqCore // if something changed if (0 != memcmp(&mCurLinExpAttrV2, &LinExpAttrV2, sizeof(Uapi_LinExpAttrV2_t))) { mNewLinExpAttrV2 = LinExpAttrV2; updateLinExpAttrV2 = true; waitSignal(); } mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAeHandleInt::getLinExpAttr(Uapi_LinExpAttrV2_t* pLinExpAttrV2) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; rk_aiq_uapi_ae_getLinExpAttr(mAlgoCtx, pLinExpAttrV2); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAeHandleInt::setHdrExpAttr(Uapi_HdrExpAttr_t HdrExpAttr) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; mCfgMutex.lock(); //TODO // check if there is different between att & mCurAtt // if something changed, set att to mNewAtt, and // the new params will be effective later when updateConfig // called by RkAiqCore // if something changed if (0 != memcmp(&mCurHdrExpAttr, &HdrExpAttr, sizeof(Uapi_HdrExpAttr_t))) { mNewHdrExpAttr = HdrExpAttr; updateHdrExpAttr = true; waitSignal(); } mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAeHandleInt::getHdrExpAttr (Uapi_HdrExpAttr_t* pHdrExpAttr) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; Uapi_HdrExpAttrV2_t HdrExpAttrV2; memset(&HdrExpAttrV2, 0x00, sizeof(Uapi_HdrExpAttrV2_t)); rk_aiq_uapi_ae_getHdrExpAttr(mAlgoCtx, &HdrExpAttrV2); rk_aiq_uapi_ae_convHdrExpAttr_v2Tov1(&HdrExpAttrV2, pHdrExpAttr); mCurHdrExpAttrV2 = HdrExpAttrV2; EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAeHandleInt::setHdrExpAttr(Uapi_HdrExpAttrV2_t HdrExpAttrV2) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; mCfgMutex.lock(); //TODO // check if there is different between att & mCurAtt // if something changed, set att to mNewAtt, and // the new params will be effective later when updateConfig // called by RkAiqCore // if something changed if (0 != memcmp(&mCurHdrExpAttrV2, &HdrExpAttrV2, sizeof(Uapi_HdrExpAttrV2_t))) { mNewHdrExpAttrV2 = HdrExpAttrV2; updateHdrExpAttrV2 = true; waitSignal(); } mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAeHandleInt::getHdrExpAttr (Uapi_HdrExpAttrV2_t* pHdrExpAttrV2) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; rk_aiq_uapi_ae_getHdrExpAttr(mAlgoCtx, pHdrExpAttrV2); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAeHandleInt::setLinAeRouteAttr(Uapi_LinAeRouteAttr_t LinAeRouteAttr) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; mCfgMutex.lock(); //TODO // check if there is different between att & mCurAtt // if something changed, set att to mNewAtt, and // the new params will be effective later when updateConfig // called by RkAiqCore // if something changed if (0 != memcmp(&mCurLinAeRouteAttr, &LinAeRouteAttr, sizeof(Uapi_LinAeRouteAttr_t))) { mNewLinAeRouteAttr = LinAeRouteAttr; updateLinAeRouteAttr = true; waitSignal(); } mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAeHandleInt::getLinAeRouteAttr(Uapi_LinAeRouteAttr_t* pLinAeRouteAttr) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; rk_aiq_uapi_ae_getLinAeRouteAttr(mAlgoCtx, pLinAeRouteAttr); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAeHandleInt::setHdrAeRouteAttr(Uapi_HdrAeRouteAttr_t HdrAeRouteAttr) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; mCfgMutex.lock(); //TODO // check if there is different between att & mCurAtt // if something changed, set att to mNewAtt, and // the new params will be effective later when updateConfig // called by RkAiqCore // if something changed if (0 != memcmp(&mCurHdrAeRouteAttr, &HdrAeRouteAttr, sizeof(Uapi_HdrAeRouteAttr_t))) { mNewHdrAeRouteAttr = HdrAeRouteAttr; updateHdrAeRouteAttr = true; waitSignal(); } mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAeHandleInt::getHdrAeRouteAttr(Uapi_HdrAeRouteAttr_t* pHdrAeRouteAttr) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; rk_aiq_uapi_ae_getHdrAeRouteAttr(mAlgoCtx, pHdrAeRouteAttr); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAeHandleInt::setIrisAttr(Uapi_IrisAttrV2_t IrisAttr) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; mCfgMutex.lock(); //TODO // check if there is different between att & mCurAtt // if something changed, set att to mNewAtt, and // the new params will be effective later when updateConfig // called by RkAiqCore // if something changed if (0 != memcmp(&mCurIrisAttr, &IrisAttr, sizeof(Uapi_IrisAttrV2_t))) { mNewIrisAttr = IrisAttr; updateIrisAttr = true; waitSignal(); } mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAeHandleInt::getIrisAttr(Uapi_IrisAttrV2_t * pIrisAttr) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; rk_aiq_uapi_ae_getIrisAttr(mAlgoCtx, pIrisAttr); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAeHandleInt::setSyncTestAttr(Uapi_AecSyncTest_t SyncTestAttr) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; mCfgMutex.lock(); //TODO // check if there is different between att & mCurAtt // if something changed, set att to mNewAtt, and // the new params will be effective later when updateConfig // called by RkAiqCore // if something changed if (0 != memcmp(&mCurAecSyncTestAttr, &SyncTestAttr, sizeof(Uapi_AecSyncTest_t))) { mNewAecSyncTestAttr = SyncTestAttr; updateSyncTestAttr = true; waitSignal(); } mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAeHandleInt::getSyncTestAttr(Uapi_AecSyncTest_t * pSyncTestAttr) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; rk_aiq_uapi_ae_getSyncTest(mAlgoCtx, pSyncTestAttr); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAeHandleInt::setExpWinAttr(Uapi_ExpWin_t ExpWinAttr) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; mCfgMutex.lock(); //TODO // check if there is different between att & mCurAtt // if something changed, set att to mNewAtt, and // the new params will be effective later when updateConfig // called by RkAiqCore // if something changed if (0 != memcmp(&mCurExpWinAttr, &ExpWinAttr, sizeof(Uapi_ExpWin_t))) { mNewExpWinAttr = ExpWinAttr; updateExpWinAttr = true; waitSignal(); } mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAeHandleInt::getExpWinAttr(Uapi_ExpWin_t * pExpWinAttr) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; rk_aiq_uapi_ae_getExpWinAttr(mAlgoCtx, pExpWinAttr); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAeHandleInt::queryExpInfo(Uapi_ExpQueryInfo_t* pExpQueryInfo) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; rk_aiq_uapi_ae_queryExpInfo(mAlgoCtx, pExpQueryInfo); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAeHandleInt::prepare() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; ret = RkAiqAeHandle::prepare(); RKAIQCORE_CHECK_RET(ret, "ae handle prepare failed"); RkAiqAlgoConfigAeInt* ae_config_int = (RkAiqAlgoConfigAeInt*)mConfig; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; /*****************AecConfig pic-info params*****************/ ae_config_int->RawWidth = sharedCom->snsDes.isp_acq_width; ae_config_int->RawHeight = sharedCom->snsDes.isp_acq_height; ae_config_int->nr_switch = sharedCom->snsDes.nr_switch; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->prepare(mConfig); RKAIQCORE_CHECK_RET(ret, "ae algo prepare failed"); EXIT_ANALYZER_FUNCTION(); return XCAM_RETURN_NO_ERROR; } XCamReturn RkAiqAeHandleInt::preProcess() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoPreAeInt* ae_pre_int = (RkAiqAlgoPreAeInt*)mPreInParam; RkAiqAlgoPreResAeInt* ae_pre_res_int = nullptr; if (mAiqCore->mAlogsComSharedParams.init) { ae_pre_res_int = (RkAiqAlgoPreResAeInt*)mPreOutParam; } else { mPreResShared = new RkAiqAlgoPreResAeIntShared(); if (!mPreResShared.ptr()) { LOGE("new ae mPreOutParam failed, bypass!"); return XCAM_RETURN_BYPASS; } ae_pre_res_int = &mPreResShared->result; } RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; RkAiqPreResComb* comb = &shared->preResComb; ret = RkAiqAeHandle::preProcess(); if (ret) { comb->ae_pre_res = NULL; RKAIQCORE_CHECK_RET(ret, "ae handle preProcess failed"); } comb->ae_pre_res = NULL; ae_pre_int->aecStatsBuf = shared->aecStatsBuf; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; if (mAiqCore->mAlogsComSharedParams.init) ret = des->pre_process(mPreInParam, mPreOutParam); else ret = des->pre_process(mPreInParam, (RkAiqAlgoResCom*)ae_pre_res_int); RKAIQCORE_CHECK_RET(ret, "ae algo pre_process failed"); // set result to mAiqCore comb->ae_pre_res = (RkAiqAlgoPreResAe*)ae_pre_res_int; if (!mAiqCore->mAlogsComSharedParams.init) { mPreResShared->set_sequence(shared->frameId); SmartPtr msg = new RkAiqCoreVdBufMsg(XCAM_MESSAGE_AE_PRE_RES_OK, shared->frameId, mPreResShared); mAiqCore->post_message(msg); } EXIT_ANALYZER_FUNCTION(); return XCAM_RETURN_NO_ERROR; } XCamReturn RkAiqAeHandleInt::processing() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoProcAeInt* ae_proc_int = (RkAiqAlgoProcAeInt*)mProcInParam; RkAiqAlgoProcResAeInt* ae_proc_res_int = nullptr; if (mAiqCore->mAlogsComSharedParams.init) { ae_proc_res_int = (RkAiqAlgoProcResAeInt*)mProcOutParam; } else { mProcResShared = new RkAiqAlgoProcResAeIntShared(); if (!mProcResShared.ptr()) { LOGE("new ae mProcOutParam failed, bypass!"); return XCAM_RETURN_BYPASS; } ae_proc_res_int = &mProcResShared->result; // mProcOutParam = (RkAiqAlgoResCom*)ae_proc_res_int; } RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqProcResComb* comb = &shared->procResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAeHandle::processing(); if (ret) { comb->ae_proc_res = NULL; RKAIQCORE_CHECK_RET(ret, "ae handle processing failed"); } comb->ae_proc_res = NULL; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; if (mAiqCore->mAlogsComSharedParams.init) ret = des->processing(mProcInParam, mProcOutParam); else ret = des->processing(mProcInParam, (RkAiqAlgoResCom*)ae_proc_res_int); RKAIQCORE_CHECK_RET(ret, "ae algo processing failed"); comb->ae_proc_res = (RkAiqAlgoProcResAe*)ae_proc_res_int; if (mAiqCore->mAlogsComSharedParams.init) { RkAiqCore::RkAiqAlgosGroupShared_t* measGroupshared = nullptr; if (mAiqCore->getGroupSharedParams(RK_AIQ_CORE_ANALYZE_MEAS, measGroupshared) != XCAM_RETURN_NO_ERROR) LOGW("get the shared of meas failed"); if (measGroupshared) { measGroupshared->frameId = shared->frameId; measGroupshared->preResComb.ae_pre_res = shared->preResComb.ae_pre_res; measGroupshared->procResComb.ae_proc_res = shared->procResComb.ae_proc_res; measGroupshared->postResComb.ae_post_res = shared->postResComb.ae_post_res; } } else { mProcResShared->set_sequence(shared->frameId); SmartPtr msg = new RkAiqCoreVdBufMsg(XCAM_MESSAGE_AE_PROC_RES_OK, shared->frameId, mProcResShared); mAiqCore->post_message(msg); } EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAeHandleInt::postProcess() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoPostAeInt* ae_post_int = (RkAiqAlgoPostAeInt*)mPostInParam; RkAiqAlgoPostResAeInt* ae_post_res_int = (RkAiqAlgoPostResAeInt*)mPostOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqPostResComb* comb = &shared->postResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAeHandle::postProcess(); if (ret) { comb->ae_post_res = NULL; RKAIQCORE_CHECK_RET(ret, "ae handle postProcess failed"); return ret; } comb->ae_post_res = NULL; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->post_process(mPostInParam, mPostOutParam); RKAIQCORE_CHECK_RET(ret, "ae algo post_process failed"); // set result to mAiqCore comb->ae_post_res = (RkAiqAlgoPostResAe*)ae_post_res_int ; EXIT_ANALYZER_FUNCTION(); return ret; } void RkAiqAwbHandleInt::init() { ENTER_ANALYZER_FUNCTION(); RkAiqAwbHandle::deInit(); mConfig = (RkAiqAlgoCom*)(new RkAiqAlgoConfigAwbInt()); mPreInParam = (RkAiqAlgoCom*)(new RkAiqAlgoPreAwbInt()); mPreOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoPreResAwbInt()); mProcInParam = (RkAiqAlgoCom*)(new RkAiqAlgoProcAwbInt()); // mProcOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoProcResAwbInt()); mPostInParam = (RkAiqAlgoCom*)(new RkAiqAlgoPostAwbInt()); mPostOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoPostResAwbInt()); EXIT_ANALYZER_FUNCTION(); } XCamReturn RkAiqAwbHandleInt::updateConfig(bool needSync) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; if (needSync) mCfgMutex.lock(); // if something changed if (updateAtt) { mCurAtt = mNewAtt; updateAtt = false; rk_aiq_uapi_awb_SetAttrib(mAlgoCtx, mCurAtt, false); sendSignal(); } if (updateWbV20Attr) { mCurWbV20Attr = mNewWbV20Attr; updateWbV20Attr = false; rk_aiq_uapiV2_awbV20_SetAttrib(mAlgoCtx, mCurWbV20Attr, false); sendSignal(); } if (updateWbOpModeAttr) { mCurWbOpModeAttr = mNewWbOpModeAttr; updateWbOpModeAttr = false; rk_aiq_uapiV2_awb_SetMwbMode(mAlgoCtx, mCurWbOpModeAttr, false); sendSignal(); } if (updateWbMwbAttr) { mCurWbMwbAttr = mNewWbMwbAttr; updateWbMwbAttr = false; rk_aiq_uapiV2_awb_SetMwbAttrib(mAlgoCtx, mCurWbMwbAttr, false); sendSignal(); } if (updateWbAwbAttr) { mCurWbAwbAttr = mNewWbAwbAttr; updateWbAwbAttr = false; rk_aiq_uapiV2_awbV20_SetAwbAttrib(mAlgoCtx, mCurWbAwbAttr, false); sendSignal(); } if (updateWbAwbWbGainAdjustAttr) { mCurWbAwbWbGainAdjustAttr = mNewWbAwbWbGainAdjustAttr; updateWbAwbWbGainAdjustAttr = false; rk_aiq_uapiV2_awb_SetAwbGainAdjust(mAlgoCtx, mCurWbAwbWbGainAdjustAttr, false); sendSignal(); } if (updateWbAwbWbGainOffsetAttr) { mCurWbAwbWbGainOffsetAttr = mNewWbAwbWbGainOffsetAttr; updateWbAwbWbGainOffsetAttr = false; rk_aiq_uapiV2_awb_SetAwbGainOffset(mAlgoCtx, mCurWbAwbWbGainOffsetAttr, false); sendSignal(); } if (updateWbAwbMultiWindowAttr) { mCurWbAwbMultiWindowAttr = mNewWbAwbMultiWindowAttr; updateWbAwbMultiWindowAttr = false; rk_aiq_uapiV2_awb_SetAwbMultiwindow(mAlgoCtx, mCurWbAwbMultiWindowAttr, false); sendSignal(); } if (needSync) mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAwbHandleInt::setAttrib(rk_aiq_wb_attrib_t att) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; mCfgMutex.lock(); //TODO // check if there is different between att & mCurAtt // if something changed, set att to mNewAtt, and // the new params will be effective later when updateConfig // called by RkAiqCore // if something changed if (0 != memcmp(&mCurAtt, &att, sizeof(rk_aiq_wb_attrib_t))) { mNewAtt = att; updateAtt = true; waitSignal(); } mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAwbHandleInt::getAttrib(rk_aiq_wb_attrib_t *att) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; rk_aiq_uapi_awb_GetAttrib(mAlgoCtx, att); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAwbHandleInt::getCct(rk_aiq_wb_cct_t *cct) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; rk_aiq_uapiV2_awb_GetCCT(mAlgoCtx, cct); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAwbHandleInt::queryWBInfo(rk_aiq_wb_querry_info_t *wb_querry_info ) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; rk_aiq_uapiV2_awb_QueryWBInfo(mAlgoCtx, wb_querry_info); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAwbHandleInt::lock() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; rk_aiq_uapiV2_awb_Lock(mAlgoCtx); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAwbHandleInt::unlock() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; rk_aiq_uapiV2_awb_Unlock(mAlgoCtx); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAwbHandleInt::setWbV20Attrib(rk_aiq_uapiV2_wbV20_attrib_t att) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; mCfgMutex.lock(); //TODO // check if there is different between att & mCurAtt // if something changed, set att to mNewAtt, and // the new params will be effective later when updateConfig // called by RkAiqCore // if something changed if (0 != memcmp(&mCurWbV20Attr, &att, sizeof(rk_aiq_uapiV2_wbV20_attrib_t))) { mNewWbV20Attr = att; updateWbV20Attr = true; waitSignal(); } mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAwbHandleInt::getWbV20Attrib(rk_aiq_uapiV2_wbV20_attrib_t *att) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; rk_aiq_uapiV2_awbV20_GetAttrib(mAlgoCtx, att); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAwbHandleInt::setWbOpModeAttrib(rk_aiq_wb_op_mode_t att) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; mCfgMutex.lock(); //TODO // check if there is different between att & mCurAtt // if something changed, set att to mNewAtt, and // the new params will be effective later when updateConfig // called by RkAiqCore // if something changed if (0 != memcmp(&mCurWbOpModeAttr, &att, sizeof(rk_aiq_wb_op_mode_t))) { mNewWbOpModeAttr = att; updateWbOpModeAttr = true; waitSignal(); } mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAwbHandleInt::getWbOpModeAttrib(rk_aiq_wb_op_mode_t *att) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; rk_aiq_uapiV2_awb_GetMwbMode(mAlgoCtx, att); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAwbHandleInt::setMwbAttrib(rk_aiq_wb_mwb_attrib_t att) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; mCfgMutex.lock(); //TODO // check if there is different between att & mCurAtt // if something changed, set att to mNewAtt, and // the new params will be effective later when updateConfig // called by RkAiqCore // if something changed if (0 != memcmp(&mCurWbMwbAttr, &att, sizeof(rk_aiq_wb_mwb_attrib_t))) { mNewWbMwbAttr = att; updateWbMwbAttr = true; waitSignal(); } mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAwbHandleInt::getMwbAttrib(rk_aiq_wb_mwb_attrib_t *att) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; rk_aiq_uapiV2_awb_GetMwbAttrib(mAlgoCtx, att); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAwbHandleInt::setAwbV20Attrib(rk_aiq_uapiV2_wbV20_awb_attrib_t att) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; mCfgMutex.lock(); //TODO // check if there is different between att & mCurAtt // if something changed, set att to mNewAtt, and // the new params will be effective later when updateConfig // called by RkAiqCore // if something changed if (0 != memcmp(&mCurWbAwbAttr, &att, sizeof(rk_aiq_uapiV2_wbV20_awb_attrib_t))) { mNewWbAwbAttr = att; updateWbAwbAttr = true; waitSignal(); } mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAwbHandleInt::getAwbV20Attrib(rk_aiq_uapiV2_wbV20_awb_attrib_t *att) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; rk_aiq_uapiV2_awbV20_GetAwbAttrib(mAlgoCtx, att); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAwbHandleInt::setWbAwbWbGainAdjustAttrib(rk_aiq_uapiV2_wb_awb_wbGainAdjust_t att) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; mCfgMutex.lock(); //TODO // check if there is different between att & mCurAtt // if something changed, set att to mNewAtt, and // the new params will be effective later when updateConfig // called by RkAiqCore // if something changed if (0 != memcmp(&mCurWbAwbWbGainAdjustAttr, &att, sizeof(rk_aiq_uapiV2_wb_awb_wbGainAdjust_t))) { mNewWbAwbWbGainAdjustAttr = att; updateWbAwbWbGainAdjustAttr = true; waitSignal(); } mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAwbHandleInt::getWbAwbWbGainAdjustAttrib(rk_aiq_uapiV2_wb_awb_wbGainAdjust_t *att) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; rk_aiq_uapiV2_awb_GetAwbGainAdjust(mAlgoCtx, att); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAwbHandleInt::setWbAwbWbGainOffsetAttrib(CalibDbV2_Awb_gain_offset_cfg_t att) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; mCfgMutex.lock(); //TODO // check if there is different between att & mCurAtt // if something changed, set att to mNewAtt, and // the new params will be effective later when updateConfig // called by RkAiqCore // if something changed if (0 != memcmp(&mCurWbAwbWbGainOffsetAttr, &att, sizeof(CalibDbV2_Awb_gain_offset_cfg_t))) { mNewWbAwbWbGainOffsetAttr = att; updateWbAwbWbGainOffsetAttr = true; waitSignal(); } mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAwbHandleInt::getWbAwbWbGainOffsetAttrib(CalibDbV2_Awb_gain_offset_cfg_t *att) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; rk_aiq_uapiV2_awb_GetAwbGainOffset(mAlgoCtx, att); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAwbHandleInt::setWbAwbMultiWindowAttrib(CalibDbV2_Awb_Mul_Win_t att) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; mCfgMutex.lock(); //TODO // check if there is different between att & mCurAtt // if something changed, set att to mNewAtt, and // the new params will be effective later when updateConfig // called by RkAiqCore // if something changed if (0 != memcmp(&mCurWbAwbMultiWindowAttr, &att, sizeof(CalibDbV2_Awb_Mul_Win_t))) { mNewWbAwbMultiWindowAttr = att; updateWbAwbMultiWindowAttr = true; waitSignal(); } mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAwbHandleInt::getWbAwbMultiWindowAttrib(CalibDbV2_Awb_Mul_Win_t *att) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; rk_aiq_uapiV2_awb_GetAwbMultiwindow(mAlgoCtx, att); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAwbHandleInt::prepare() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; ret = RkAiqAwbHandle::prepare(); RKAIQCORE_CHECK_RET(ret, "awb handle prepare failed"); RkAiqAlgoConfigAwbInt* awb_config_int = (RkAiqAlgoConfigAwbInt*)mConfig; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); // TODO //awb_config_int->rawBit; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->prepare(mConfig); RKAIQCORE_CHECK_RET(ret, "awb algo prepare failed"); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAwbHandleInt::preProcess() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoPreAwbInt* awb_pre_int = (RkAiqAlgoPreAwbInt*)mPreInParam; RkAiqAlgoPreResAwbInt* awb_pre_res_int = (RkAiqAlgoPreResAwbInt*)mPreOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqPreResComb* comb = &shared->preResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAwbHandle::preProcess(); if (ret) { comb->awb_pre_res = NULL; RKAIQCORE_CHECK_RET(ret, "awb handle preProcess failed"); } comb->awb_pre_res = NULL; int module_hw_version = sharedCom->ctxCfigs[RK_AIQ_ALGO_TYPE_AWB].cfg_com.module_hw_version; #ifdef RK_SIMULATOR_HW if(module_hw_version == AWB_HARDWARE_V200) { awb_pre_int->awb_hw0_statis = ispStats->awb_stats; awb_pre_int->awb_cfg_effect_v200 = ispStats->awb_cfg_effect_v200; } else { awb_pre_int->awb_hw1_statis = ispStats->awb_stats_v201; awb_pre_int->awb_cfg_effect_v201 = ispStats->awb_cfg_effect_v201; } #else awb_pre_int->awbStatsBuf = shared->awbStatsBuf; #endif RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->pre_process(mPreInParam, mPreOutParam); RKAIQCORE_CHECK_RET(ret, "awb algo pre_process failed"); // set result to mAiqCore comb->awb_pre_res = (RkAiqAlgoPreResAwb*)awb_pre_res_int; EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAwbHandleInt::processing() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoProcAwbInt* awb_proc_int = (RkAiqAlgoProcAwbInt*)mProcInParam; #if 0 RkAiqAlgoProcResAwbInt* awb_proc_res_int = (RkAiqAlgoProcResAwbInt*)mProcOutParam; #else mProcResShared = new RkAiqAlgoProcResAwbIntShared(); if (!mProcResShared.ptr()) { LOGE("new awb mProcOutParam failed, bypass!"); return XCAM_RETURN_BYPASS; } RkAiqAlgoProcResAwbInt* awb_proc_res_int = &mProcResShared->result; // mProcOutParam = (RkAiqAlgoResCom*)awb_proc_res_int; #endif RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqProcResComb* comb = &shared->procResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAwbHandle::processing(); if (ret) { comb->awb_proc_res = NULL; RKAIQCORE_CHECK_RET(ret, "awb handle processing failed"); } comb->awb_proc_res = NULL; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; #if 0 ret = des->processing(mProcInParam, mProcOutParam); #else ret = des->processing(mProcInParam, (RkAiqAlgoResCom*)awb_proc_res_int); #endif RKAIQCORE_CHECK_RET(ret, "awb algo processing failed"); // set result to mAiqCore comb->awb_proc_res = (RkAiqAlgoProcResAwb*)awb_proc_res_int; mProcResShared->set_sequence(shared->frameId); SmartPtr msg = new RkAiqCoreVdBufMsg(XCAM_MESSAGE_AWB_PROC_RES_OK, shared->frameId, mProcResShared); mAiqCore->post_message(msg); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAwbHandleInt::postProcess() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoPostAwbInt* awb_post_int = (RkAiqAlgoPostAwbInt*)mPostInParam; RkAiqAlgoPostResAwbInt* awb_post_res_int = (RkAiqAlgoPostResAwbInt*)mPostOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqPostResComb* comb = &shared->postResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAwbHandle::postProcess(); if (ret) { comb->awb_post_res = NULL; RKAIQCORE_CHECK_RET(ret, "awb handle postProcess failed"); return ret; } comb->awb_post_res = NULL; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->post_process(mPostInParam, mPostOutParam); RKAIQCORE_CHECK_RET(ret, "awb algo post_process failed"); // set result to mAiqCore comb->awb_post_res = (RkAiqAlgoPostResAwb*)awb_post_res_int ; EXIT_ANALYZER_FUNCTION(); return ret; } void RkAiqAfHandleInt::init() { ENTER_ANALYZER_FUNCTION(); RkAiqAfHandle::deInit(); mConfig = (RkAiqAlgoCom*)(new RkAiqAlgoConfigAfInt()); mPreInParam = (RkAiqAlgoCom*)(new RkAiqAlgoPreAfInt()); mPreOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoPreResAfInt()); mProcInParam = (RkAiqAlgoCom*)(new RkAiqAlgoProcAfInt()); #if 0 mProcOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoProcResAfInt()); #endif mPostInParam = (RkAiqAlgoCom*)(new RkAiqAlgoPostAfInt()); mPostOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoPostResAfInt()); EXIT_ANALYZER_FUNCTION(); } XCamReturn RkAiqAfHandleInt::updateConfig(bool needSync) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; if (sharedCom->snsDes.lens_des.focus_support) { if (needSync) mCfgMutex.lock(); // if something changed if (updateAtt) { rk_aiq_uapi_af_SetAttrib(mAlgoCtx, mNewAtt, false); isUpdateAttDone = true; } if (needSync) mCfgMutex.unlock(); } EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAfHandleInt::setAttrib(rk_aiq_af_attrib_t *att) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; if (sharedCom->snsDes.lens_des.focus_support) { mCfgMutex.lock(); //TODO // check if there is different between att & mCurAtt // if something changed, set att to mNewAtt, and // the new params will be effective later when updateConfig // called by RkAiqCore // if something changed if ((0 != memcmp(&mCurAtt, att, sizeof(rk_aiq_af_attrib_t))) || (mCurAtt.AfMode == RKAIQ_AF_MODE_AUTO)) { mNewAtt = *att; updateAtt = true; isUpdateAttDone = false; waitSignal(); } mCfgMutex.unlock(); } EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAfHandleInt::getAttrib(rk_aiq_af_attrib_t *att) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; rk_aiq_uapi_af_GetAttrib(mAlgoCtx, att); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAfHandleInt::lock() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; if (sharedCom->snsDes.lens_des.focus_support) rk_aiq_uapi_af_Lock(mAlgoCtx); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAfHandleInt::unlock() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; if (sharedCom->snsDes.lens_des.focus_support) rk_aiq_uapi_af_Unlock(mAlgoCtx); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAfHandleInt::Oneshot() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; if (sharedCom->snsDes.lens_des.focus_support) rk_aiq_uapi_af_Oneshot(mAlgoCtx); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAfHandleInt::ManualTriger() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; if (sharedCom->snsDes.lens_des.focus_support) rk_aiq_uapi_af_ManualTriger(mAlgoCtx); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAfHandleInt::Tracking() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; if (sharedCom->snsDes.lens_des.focus_support) rk_aiq_uapi_af_Tracking(mAlgoCtx); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAfHandleInt::setZoomPos(int zoom_pos) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; if (sharedCom->snsDes.lens_des.focus_support) rk_aiq_uapi_af_setZoomPos(mAlgoCtx, zoom_pos); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAfHandleInt::GetSearchPath(rk_aiq_af_sec_path_t* path) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; if (sharedCom->snsDes.lens_des.focus_support) rk_aiq_uapi_af_getSearchPath(mAlgoCtx, path); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAfHandleInt::GetSearchResult(rk_aiq_af_result_t* result) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; if (sharedCom->snsDes.lens_des.focus_support) rk_aiq_uapi_af_getSearchResult(mAlgoCtx, result); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAfHandleInt::prepare() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; ret = RkAiqAfHandle::prepare(); RKAIQCORE_CHECK_RET(ret, "af handle prepare failed"); RkAiqAlgoConfigAfInt* af_config_int = (RkAiqAlgoConfigAfInt*)mConfig; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; af_config_int->af_config_com.af_mode = 6; af_config_int->af_config_com.win_h_offs = 0; af_config_int->af_config_com.win_v_offs = 0; af_config_int->af_config_com.win_h_size = 0; af_config_int->af_config_com.win_v_size = 0; af_config_int->af_config_com.lens_des = sharedCom->snsDes.lens_des; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->prepare(mConfig); RKAIQCORE_CHECK_RET(ret, "af algo prepare failed"); EXIT_ANALYZER_FUNCTION(); return XCAM_RETURN_NO_ERROR; } XCamReturn RkAiqAfHandleInt::preProcess() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoPreAfInt* af_pre_int = (RkAiqAlgoPreAfInt*)mPreInParam; RkAiqAlgoPreResAfInt* af_pre_res_int = (RkAiqAlgoPreResAfInt*)mPreOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqPreResComb* comb = &shared->preResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAfHandle::preProcess(); if (ret) { comb->af_pre_res = NULL; RKAIQCORE_CHECK_RET(ret, "af handle preProcess failed"); } comb->af_pre_res = NULL; af_pre_int->af_stats = &ispStats->af_stats; af_pre_int->aec_stats = &ispStats->aec_stats; af_pre_int->xcam_af_stats = shared->afStatsBuf; af_pre_int->xcam_aec_stats = shared->aecStatsBuf; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->pre_process(mPreInParam, mPreOutParam); RKAIQCORE_CHECK_RET(ret, "af algo pre_process failed"); // set result to mAiqCore comb->af_pre_res = (RkAiqAlgoPreResAf*)af_pre_res_int; EXIT_ANALYZER_FUNCTION(); return XCAM_RETURN_NO_ERROR; } XCamReturn RkAiqAfHandleInt::processing() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoProcAfInt* af_proc_int = (RkAiqAlgoProcAfInt*)mProcInParam; #if 0 RkAiqAlgoProcResAfInt* af_proc_res_int = (RkAiqAlgoProcResAfInt*)mProcOutParam; #else mProcResShared = new RkAiqAlgoProcResAfIntShared(); if (!mProcResShared.ptr()) { LOGE("new af mProcOutParam failed, bypass!"); return XCAM_RETURN_BYPASS; } RkAiqAlgoProcResAfInt* af_proc_res_int = &mProcResShared->result; // mProcOutParam = (RkAiqAlgoResCom*)af_proc_res_int; #endif RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqProcResComb* comb = &shared->procResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAfHandle::processing(); if (ret) { comb->af_proc_res = NULL; RKAIQCORE_CHECK_RET(ret, "af handle processing failed"); } comb->af_proc_res = NULL; af_proc_int->af_proc_com.xcam_af_stats = shared->afStatsBuf; af_proc_int->af_proc_com.xcam_aec_stats = shared->aecStatsBuf; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; #if 0 ret = des->processing(mProcInParam, mProcOutParam); #else ret = des->processing(mProcInParam, (RkAiqAlgoResCom*)af_proc_res_int); #endif RKAIQCORE_CHECK_RET(ret, "af algo processing failed"); comb->af_proc_res = (RkAiqAlgoProcResAf*)af_proc_res_int; #if 1 af_proc_res_int->id = shared->frameId; SmartPtr msg = new RkAiqCoreVdBufMsg(XCAM_MESSAGE_AF_PROC_RES_OK, af_proc_res_int->id, mProcResShared); mAiqCore->post_message(msg); #endif EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAfHandleInt::postProcess() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoPostAfInt* af_post_int = (RkAiqAlgoPostAfInt*)mPostInParam; RkAiqAlgoPostResAfInt* af_post_res_int = (RkAiqAlgoPostResAfInt*)mPostOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqPostResComb* comb = &shared->postResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAfHandle::postProcess(); if (ret) { comb->af_post_res = NULL; RKAIQCORE_CHECK_RET(ret, "af handle postProcess failed"); return ret; } comb->af_post_res = NULL; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->post_process(mPostInParam, mPostOutParam); RKAIQCORE_CHECK_RET(ret, "af algo post_process failed"); // set result to mAiqCore comb->af_post_res = (RkAiqAlgoPostResAf*)af_post_res_int ; if (updateAtt && isUpdateAttDone) { mCurAtt = mNewAtt; updateAtt = false; isUpdateAttDone = false; sendSignal(); } EXIT_ANALYZER_FUNCTION(); return ret; } void RkAiqAnrHandleInt::init() { ENTER_ANALYZER_FUNCTION(); RkAiqAnrHandle::deInit(); mConfig = (RkAiqAlgoCom*)(new RkAiqAlgoConfigAnrInt()); mPreInParam = (RkAiqAlgoCom*)(new RkAiqAlgoPreAnrInt()); mPreOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoPreResAnrInt()); mProcInParam = (RkAiqAlgoCom*)(new RkAiqAlgoProcAnrInt()); mProcOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoProcResAnrInt()); mPostInParam = (RkAiqAlgoCom*)(new RkAiqAlgoPostAnrInt()); mPostOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoPostResAnrInt()); EXIT_ANALYZER_FUNCTION(); } XCamReturn RkAiqAnrHandleInt::updateConfig(bool needSync) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; if (needSync) mCfgMutex.lock(); // if something changed if (updateAtt) { mCurAtt = mNewAtt; updateAtt = false; // TODO rk_aiq_uapi_anr_SetAttrib(mAlgoCtx, &mCurAtt, false); sendSignal(); } if(UpdateIQpara) { mCurIQpara = mNewIQpara; UpdateIQpara = false; rk_aiq_uapi_anr_SetIQPara(mAlgoCtx, &mCurIQpara, false); sendSignal(); } if (needSync) mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAnrHandleInt::setAttrib(rk_aiq_nr_attrib_t *att) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; mCfgMutex.lock(); //TODO // check if there is different between att & mCurAtt // if something changed, set att to mNewAtt, and // the new params will be effective later when updateConfig // called by RkAiqCore // if something changed if (0 != memcmp(&mCurAtt, att, sizeof(rk_aiq_nr_attrib_t))) { RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; CalibDbV2_MFNR_t* mfnr = (CalibDbV2_MFNR_t*)CALIBDBV2_GET_MODULE_PTR((void*)(sharedCom->calibv2), mfnr_v1); if (mfnr && mfnr->TuningPara.enable && mfnr->TuningPara.motion_detect_en) { if ((att->eMode == ANR_OP_MODE_AUTO) && (!att->stAuto.mfnrEn)) { att->stAuto.mfnrEn = !att->stAuto.mfnrEn; LOGE("motion detect is running, operate not permit!"); goto EXIT; } else if ((att->eMode == ANR_OP_MODE_MANUAL) && (!att->stManual.mfnrEn)) { att->stManual.mfnrEn = !att->stManual.mfnrEn; LOGE("motion detect is running, operate not permit!"); goto EXIT; } } mNewAtt = *att; updateAtt = true; waitSignal(); } EXIT: mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAnrHandleInt::getAttrib(rk_aiq_nr_attrib_t *att) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; ret = rk_aiq_uapi_anr_GetAttrib(mAlgoCtx, att); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAnrHandleInt::setIQPara(rk_aiq_nr_IQPara_t *para) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; mCfgMutex.lock(); //TODO // check if there is different between att & mCurAtt // if something changed, set att to mNewAtt, and // the new params will be effective later when updateConfig // called by RkAiqCore // if something changed if (0 != memcmp(&mCurIQpara, para, sizeof(rk_aiq_nr_IQPara_t))) { RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; CalibDbV2_MFNR_t* mfnr = (CalibDbV2_MFNR_t*)CALIBDBV2_GET_MODULE_PTR((void*)(sharedCom->calibv2), mfnr_v1); if (mfnr && mfnr->TuningPara.enable && mfnr->TuningPara.motion_detect_en) { if((para->module_bits & (1 << ANR_MODULE_MFNR)) && !para->stMfnrPara.enable) { para->stMfnrPara.enable = !para->stMfnrPara.enable; LOGE("motion detect is running, disable mfnr is not permit!"); } } mNewIQpara = *para; UpdateIQpara = true; waitSignal(); } EXIT: mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAnrHandleInt::getIQPara(rk_aiq_nr_IQPara_t *para) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; ret = rk_aiq_uapi_anr_GetIQPara(mAlgoCtx, para); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAnrHandleInt::setLumaSFStrength(float fPercent) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; ret = rk_aiq_uapi_anr_SetLumaSFStrength(mAlgoCtx, fPercent); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAnrHandleInt::setLumaTFStrength(float fPercent) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; ret = rk_aiq_uapi_anr_SetLumaTFStrength(mAlgoCtx, fPercent); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAnrHandleInt::getLumaSFStrength(float *pPercent) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; ret = rk_aiq_uapi_anr_GetLumaSFStrength(mAlgoCtx, pPercent); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAnrHandleInt::getLumaTFStrength(float *pPercent) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; ret = rk_aiq_uapi_anr_GetLumaTFStrength(mAlgoCtx, pPercent); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAnrHandleInt::setChromaSFStrength(float fPercent) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; ret = rk_aiq_uapi_anr_SetChromaSFStrength(mAlgoCtx, fPercent); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAnrHandleInt::setChromaTFStrength(float fPercent) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; ret = rk_aiq_uapi_anr_SetChromaTFStrength(mAlgoCtx, fPercent); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAnrHandleInt::getChromaSFStrength(float *pPercent) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; ret = rk_aiq_uapi_anr_GetChromaSFStrength(mAlgoCtx, pPercent); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAnrHandleInt::getChromaTFStrength(float *pPercent) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; ret = rk_aiq_uapi_anr_GetChromaTFStrength(mAlgoCtx, pPercent); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAnrHandleInt::setRawnrSFStrength(float fPercent) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; ret = rk_aiq_uapi_anr_SetRawnrSFStrength(mAlgoCtx, fPercent); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAnrHandleInt::getRawnrSFStrength(float *pPercent) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; ret = rk_aiq_uapi_anr_GetRawnrSFStrength(mAlgoCtx, pPercent); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAnrHandleInt::prepare() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; ret = RkAiqAnrHandle::prepare(); RKAIQCORE_CHECK_RET(ret, "anr handle prepare failed"); RkAiqAlgoConfigAnrInt* anr_config_int = (RkAiqAlgoConfigAnrInt*)mConfig; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->prepare(mConfig); RKAIQCORE_CHECK_RET(ret, "anr algo prepare failed"); EXIT_ANALYZER_FUNCTION(); return XCAM_RETURN_NO_ERROR; } XCamReturn RkAiqAnrHandleInt::preProcess() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoPreAnrInt* anr_pre_int = (RkAiqAlgoPreAnrInt*)mPreInParam; RkAiqAlgoPreResAnrInt* anr_pre_res_int = (RkAiqAlgoPreResAnrInt*)mPreOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqPreResComb* comb = &shared->preResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAnrHandle::preProcess(); if (ret) { comb->anr_pre_res = NULL; RKAIQCORE_CHECK_RET(ret, "anr handle preProcess failed"); } comb->anr_pre_res = NULL; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->pre_process(mPreInParam, mPreOutParam); RKAIQCORE_CHECK_RET(ret, "anr algo pre_process failed"); // set result to mAiqCore comb->anr_pre_res = (RkAiqAlgoPreResAnr*)anr_pre_res_int; EXIT_ANALYZER_FUNCTION(); return XCAM_RETURN_NO_ERROR; } XCamReturn RkAiqAnrHandleInt::processing() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoProcAnrInt* anr_proc_int = (RkAiqAlgoProcAnrInt*)mProcInParam; RkAiqAlgoProcResAnrInt* anr_proc_res_int = (RkAiqAlgoProcResAnrInt*)mProcOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqProcResComb* comb = &shared->procResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; static int anr_proc_framecnt = 0; anr_proc_framecnt++; ret = RkAiqAnrHandle::processing(); if (ret) { comb->anr_proc_res = NULL; RKAIQCORE_CHECK_RET(ret, "anr handle processing failed"); } comb->anr_proc_res = NULL; // TODO: fill procParam anr_proc_int->iso = sharedCom->iso; anr_proc_int->hdr_mode = sharedCom->working_mode; LOGD("%s:%d anr hdr_mode:%d \n", __FUNCTION__, __LINE__, anr_proc_int->hdr_mode); RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->processing(mProcInParam, mProcOutParam); RKAIQCORE_CHECK_RET(ret, "anr algo processing failed"); comb->anr_proc_res = (RkAiqAlgoProcResAnr*)anr_proc_res_int; EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAnrHandleInt::postProcess() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoPostAnrInt* anr_post_int = (RkAiqAlgoPostAnrInt*)mPostInParam; RkAiqAlgoPostResAnrInt* anr_post_res_int = (RkAiqAlgoPostResAnrInt*)mPostOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqPostResComb* comb = &shared->postResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAnrHandle::postProcess(); if (ret) { comb->anr_post_res = NULL; RKAIQCORE_CHECK_RET(ret, "anr handle postProcess failed"); return ret; } comb->anr_post_res = NULL; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->post_process(mPostInParam, mPostOutParam); RKAIQCORE_CHECK_RET(ret, "anr algo post_process failed"); // set result to mAiqCore comb->anr_post_res = (RkAiqAlgoPostResAnr*)anr_post_res_int ; EXIT_ANALYZER_FUNCTION(); return ret; } void RkAiqAsharpHandleInt::init() { ENTER_ANALYZER_FUNCTION(); RkAiqAsharpHandle::deInit(); mConfig = (RkAiqAlgoCom*)(new RkAiqAlgoConfigAsharpInt()); mPreInParam = (RkAiqAlgoCom*)(new RkAiqAlgoPreAsharpInt()); mPreOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoPreResAsharpInt()); mProcInParam = (RkAiqAlgoCom*)(new RkAiqAlgoProcAsharpInt()); mProcOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoProcResAsharpInt()); mPostInParam = (RkAiqAlgoCom*)(new RkAiqAlgoPostAsharpInt()); mPostOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoPostResAsharpInt()); EXIT_ANALYZER_FUNCTION(); } XCamReturn RkAiqAsharpHandleInt::updateConfig(bool needSync) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; if (needSync) mCfgMutex.lock(); // if something changed if (updateAtt) { mCurAtt = mNewAtt; updateAtt = false; // TODO rk_aiq_uapi_asharp_SetAttrib(mAlgoCtx, &mCurAtt, false); sendSignal(); } if(updateIQpara) { mCurIQPara = mNewIQPara; updateIQpara = false; // TODO rk_aiq_uapi_asharp_SetIQpara(mAlgoCtx, &mCurIQPara, false); sendSignal(); } if (needSync) mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAsharpHandleInt::setAttrib(rk_aiq_sharp_attrib_t *att) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; mCfgMutex.lock(); //TODO // check if there is different between att & mCurAtt // if something changed, set att to mNewAtt, and // the new params will be effective later when updateConfig // called by RkAiqCore // if something changed if (0 != memcmp(&mCurAtt, att, sizeof(rk_aiq_sharp_attrib_t))) { mNewAtt = *att; updateAtt = true; waitSignal(); } mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAsharpHandleInt::getAttrib(rk_aiq_sharp_attrib_t *att) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; rk_aiq_uapi_asharp_GetAttrib(mAlgoCtx, att); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAsharpHandleInt::setIQPara(rk_aiq_sharp_IQpara_t *para) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; mCfgMutex.lock(); //TODO // check if there is different between att & mCurAtt // if something changed, set att to mNewAtt, and // the new params will be effective later when updateConfig // called by RkAiqCore // if something changed if (0 != memcmp(&mCurIQPara, para, sizeof(rk_aiq_sharp_IQpara_t))) { mNewIQPara = *para; updateIQpara = true; waitSignal(); } mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAsharpHandleInt::getIQPara(rk_aiq_sharp_IQpara_t *para) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; rk_aiq_uapi_asharp_GetIQpara(mAlgoCtx, para); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAsharpHandleInt::setStrength(float fPercent) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; rk_aiq_uapi_asharp_SetStrength(mAlgoCtx, fPercent); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAsharpHandleInt::getStrength(float *pPercent) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; rk_aiq_uapi_asharp_GetStrength(mAlgoCtx, pPercent); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAsharpHandleInt::prepare() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; ret = RkAiqAsharpHandle::prepare(); RKAIQCORE_CHECK_RET(ret, "asharp handle prepare failed"); RkAiqAlgoConfigAsharpInt* asharp_config_int = (RkAiqAlgoConfigAsharpInt*)mConfig; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->prepare(mConfig); RKAIQCORE_CHECK_RET(ret, "asharp algo prepare failed"); EXIT_ANALYZER_FUNCTION(); return XCAM_RETURN_NO_ERROR; } XCamReturn RkAiqAsharpHandleInt::preProcess() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoPreAsharpInt* asharp_pre_int = (RkAiqAlgoPreAsharpInt*)mPreInParam; RkAiqAlgoPreResAsharpInt* asharp_pre_res_int = (RkAiqAlgoPreResAsharpInt*)mPreOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqPreResComb* comb = &shared->preResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAsharpHandle::preProcess(); if (ret) { comb->asharp_pre_res = NULL; RKAIQCORE_CHECK_RET(ret, "asharp handle preProcess failed"); } comb->asharp_pre_res = NULL; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->pre_process(mPreInParam, mPreOutParam); RKAIQCORE_CHECK_RET(ret, "asharp algo pre_process failed"); // set result to mAiqCore comb->asharp_pre_res = (RkAiqAlgoPreResAsharp*)asharp_pre_res_int; EXIT_ANALYZER_FUNCTION(); return XCAM_RETURN_NO_ERROR; } XCamReturn RkAiqAsharpHandleInt::processing() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoProcAsharpInt* asharp_proc_int = (RkAiqAlgoProcAsharpInt*)mProcInParam; RkAiqAlgoProcResAsharpInt* asharp_proc_res_int = (RkAiqAlgoProcResAsharpInt*)mProcOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqProcResComb* comb = &shared->procResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; static int asharp_proc_framecnt = 0; asharp_proc_framecnt++; ret = RkAiqAsharpHandle::processing(); if (ret) { comb->asharp_proc_res = NULL; RKAIQCORE_CHECK_RET(ret, "asharp handle processing failed"); } comb->asharp_proc_res = NULL; // TODO: fill procParam asharp_proc_int->iso = sharedCom->iso; asharp_proc_int->hdr_mode = sharedCom->working_mode; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->processing(mProcInParam, mProcOutParam); RKAIQCORE_CHECK_RET(ret, "asharp algo processing failed"); comb->asharp_proc_res = (RkAiqAlgoProcResAsharp*)asharp_proc_res_int; EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAsharpHandleInt::postProcess() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoPostAsharpInt* asharp_post_int = (RkAiqAlgoPostAsharpInt*)mPostInParam; RkAiqAlgoPostResAsharpInt* asharp_post_res_int = (RkAiqAlgoPostResAsharpInt*)mPostOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqPostResComb* comb = &shared->postResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAsharpHandle::postProcess(); if (ret) { comb->asharp_post_res = NULL; RKAIQCORE_CHECK_RET(ret, "asharp handle postProcess failed"); return ret; } comb->asharp_post_res = NULL; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->post_process(mPostInParam, mPostOutParam); RKAIQCORE_CHECK_RET(ret, "asharp algo post_process failed"); // set result to mAiqCore comb->asharp_post_res = (RkAiqAlgoPostResAsharp*)asharp_post_res_int ; EXIT_ANALYZER_FUNCTION(); return ret; } void RkAiqAdhazHandleInt::init() { ENTER_ANALYZER_FUNCTION(); RkAiqAdhazHandle::deInit(); mConfig = (RkAiqAlgoCom*)(new RkAiqAlgoConfigAdhazInt()); mPreInParam = (RkAiqAlgoCom*)(new RkAiqAlgoPreAdhazInt()); mPreOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoPreResAdhazInt()); mProcInParam = (RkAiqAlgoCom*)(new RkAiqAlgoProcAdhazInt()); mProcOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoProcResAdhazInt()); mPostInParam = (RkAiqAlgoCom*)(new RkAiqAlgoPostAdhazInt()); mPostOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoPostResAdhazInt()); EXIT_ANALYZER_FUNCTION(); } XCamReturn RkAiqAdhazHandleInt::prepare() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; ret = RkAiqAdhazHandle::prepare(); RKAIQCORE_CHECK_RET(ret, "adhaz handle prepare failed"); RkAiqAlgoConfigAdhazInt* adhaz_config_int = (RkAiqAlgoConfigAdhazInt*)mConfig; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; adhaz_config_int->calib = sharedCom->calib; adhaz_config_int->working_mode = sharedCom->working_mode; // adhaz_config_int->rawHeight = sharedCom->snsDes.isp_acq_height; // adhaz_config_int->rawWidth = sharedCom->snsDes.isp_acq_width; // adhaz_config_int->working_mode = sharedCom->working_mode; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->prepare(mConfig); RKAIQCORE_CHECK_RET(ret, "adhaz algo prepare failed"); EXIT_ANALYZER_FUNCTION(); return XCAM_RETURN_NO_ERROR; } XCamReturn RkAiqAdhazHandleInt::preProcess() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoPreAdhazInt* adhaz_pre_int = (RkAiqAlgoPreAdhazInt*)mPreInParam; RkAiqAlgoPreResAdhazInt* adhaz_pre_res_int = (RkAiqAlgoPreResAdhazInt*)mPreOutParam; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqIspStats* ispStats = shared->ispStats; RkAiqPreResComb* comb = &shared->preResComb; adhaz_pre_int->rawHeight = sharedCom->snsDes.isp_acq_height; adhaz_pre_int->rawWidth = sharedCom->snsDes.isp_acq_width; ret = RkAiqAdhazHandle::preProcess(); if (ret) { comb->adhaz_pre_res = NULL; RKAIQCORE_CHECK_RET(ret, "adhaz handle preProcess failed"); } comb->adhaz_pre_res = NULL; #ifdef RK_SIMULATOR_HW //nothing todo #endif RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->pre_process(mPreInParam, mPreOutParam); RKAIQCORE_CHECK_RET(ret, "adhaz algo pre_process failed"); // set result to mAiqCore comb->adhaz_pre_res = (RkAiqAlgoPreResAdhaz*)adhaz_pre_res_int; EXIT_ANALYZER_FUNCTION(); return XCAM_RETURN_NO_ERROR; } XCamReturn RkAiqAdhazHandleInt::processing() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoProcAdhazInt* adhaz_proc_int = (RkAiqAlgoProcAdhazInt*)mProcInParam; RkAiqAlgoProcResAdhazInt* adhaz_proc_res_int = (RkAiqAlgoProcResAdhazInt*)mProcOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqProcResComb* comb = &shared->procResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; adhaz_proc_int->hdr_mode = sharedCom->working_mode; ret = RkAiqAdhazHandle::processing(); if (ret) { comb->adhaz_proc_res = NULL; RKAIQCORE_CHECK_RET(ret, "adhaz handle processing failed"); } if(!shared->ispStats->adehaze_stats_valid && !sharedCom->init) { LOGD("no adehaze stats, ignore!"); // TODO: keep last result ? // // return XCAM_RETURN_BYPASS; } else { if(sharedCom->ctxCfigs[RK_AIQ_ALGO_TYPE_ADHAZ].cfg_com.isp_hw_version == 0) memcpy(&adhaz_proc_int->stats.dehaze_stats_v20, &ispStats->adehaze_stats.dehaze_stats_v20, sizeof(dehaze_stats_v20_t)); else if(sharedCom->ctxCfigs[RK_AIQ_ALGO_TYPE_ADHAZ].cfg_com.isp_hw_version == 1) memcpy(&adhaz_proc_int->stats.dehaze_stats_v21, &ispStats->adehaze_stats.dehaze_stats_v21, sizeof(dehaze_stats_v21_t)); memcpy(adhaz_proc_int->stats.other_stats.tmo_luma, ispStats->aec_stats.ae_data.extra.rawae_big.channelg_xy, sizeof(adhaz_proc_int->stats.other_stats.tmo_luma)); if(sharedCom->working_mode == RK_AIQ_ISP_HDR_MODE_3_FRAME_HDR || sharedCom->working_mode == RK_AIQ_ISP_HDR_MODE_3_LINE_HDR) { memcpy(adhaz_proc_int->stats.other_stats.short_luma, ispStats->aec_stats.ae_data.chn[0].rawae_big.channelg_xy, sizeof(adhaz_proc_int->stats.other_stats.short_luma)); memcpy(adhaz_proc_int->stats.other_stats.middle_luma, ispStats->aec_stats.ae_data.chn[1].rawae_lite.channelg_xy, sizeof(adhaz_proc_int->stats.other_stats.middle_luma)); memcpy(adhaz_proc_int->stats.other_stats.long_luma, ispStats->aec_stats.ae_data.chn[2].rawae_big.channelg_xy, sizeof(adhaz_proc_int->stats.other_stats.long_luma)); } else if(sharedCom->working_mode == RK_AIQ_ISP_HDR_MODE_2_FRAME_HDR || sharedCom->working_mode == RK_AIQ_ISP_HDR_MODE_2_LINE_HDR) { memcpy(adhaz_proc_int->stats.other_stats.short_luma, ispStats->aec_stats.ae_data.chn[0].rawae_big.channelg_xy, sizeof(adhaz_proc_int->stats.other_stats.short_luma)); memcpy(adhaz_proc_int->stats.other_stats.long_luma, ispStats->aec_stats.ae_data.chn[1].rawae_big.channelg_xy, sizeof(adhaz_proc_int->stats.other_stats.long_luma)); } else LOGD("Wrong working mode!!!"); } adhaz_proc_int->pCalibDehaze = sharedCom->calib; comb->adhaz_proc_res = NULL; #ifdef RK_SIMULATOR_HW //nothing todo #endif RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->processing(mProcInParam, mProcOutParam); RKAIQCORE_CHECK_RET(ret, "adhaz algo processing failed"); comb->adhaz_proc_res = (RkAiqAlgoProcResAdhaz*)adhaz_proc_res_int; EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAdhazHandleInt::postProcess() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoPostAdhazInt* adhaz_post_int = (RkAiqAlgoPostAdhazInt*)mPostInParam; RkAiqAlgoPostResAdhazInt* adhaz_post_res_int = (RkAiqAlgoPostResAdhazInt*)mPostOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqPostResComb* comb = &shared->postResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAdhazHandle::postProcess(); if (ret) { comb->adhaz_post_res = NULL; RKAIQCORE_CHECK_RET(ret, "adhaz handle postProcess failed"); return ret; } comb->adhaz_post_res = NULL; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->post_process(mPostInParam, mPostOutParam); RKAIQCORE_CHECK_RET(ret, "adhaz algo post_process failed"); // set result to mAiqCore comb->adhaz_post_res = (RkAiqAlgoPostResAdhaz*)adhaz_post_res_int ; EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAdhazHandleInt::updateConfig(bool needSync) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; if (needSync) mCfgMutex.lock(); // if something changed if (updateAtt) { mCurAtt = mNewAtt; updateAtt = false; // TODO rk_aiq_uapi_adehaze_SetAttrib(mAlgoCtx, mCurAtt, false); sendSignal(); } if (needSync) mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAdhazHandleInt::setSwAttrib(adehaze_sw_s att) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; mCfgMutex.lock(); //TODO // check if there is different between att & mCurAtt // if something changed, set att to mNewAtt, and // the new params will be effective later when updateConfig // called by RkAiqCore // if something changed if (0 != memcmp(&mCurAtt, &att, sizeof(adehaze_sw_s))) { mNewAtt = att; updateAtt = true; waitSignal(); } mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAdhazHandleInt::getSwAttrib(adehaze_sw_s *att) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; rk_aiq_uapi_adehaze_GetAttrib(mAlgoCtx, att); EXIT_ANALYZER_FUNCTION(); return ret; } void RkAiqAmergeHandleInt::init() { ENTER_ANALYZER_FUNCTION(); RkAiqAmergeHandle::deInit(); mConfig = (RkAiqAlgoCom*)(new RkAiqAlgoConfigAmergeInt()); mPreInParam = (RkAiqAlgoCom*)(new RkAiqAlgoPreAmergeInt()); mPreOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoPreResAmergeInt()); mProcInParam = (RkAiqAlgoCom*)(new RkAiqAlgoProcAmergeInt()); mProcOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoProcResAmergeInt()); mPostInParam = (RkAiqAlgoCom*)(new RkAiqAlgoPostAmergeInt()); mPostOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoPostResAmergeInt()); EXIT_ANALYZER_FUNCTION(); } XCamReturn RkAiqAmergeHandleInt::updateConfig(bool needSync) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; if (needSync) mCfgMutex.lock(); // if something changed if (updateAtt) { mCurAtt = mNewAtt; updateAtt = false; rk_aiq_uapi_amerge_SetAttrib(mAlgoCtx, mCurAtt, true); sendSignal(); } if (needSync) mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAmergeHandleInt::setAttrib(amerge_attrib_t att) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; mCfgMutex.lock(); //TODO // check if there is different between att & mCurAtt // if something changed, set att to mNewAtt, and // the new params will be effective later when updateConfig // called by RkAiqCore // if something changed if (0 != memcmp(&mCurAtt, &att, sizeof(amerge_attrib_t))) { mNewAtt = att; updateAtt = true; waitSignal(); } mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAmergeHandleInt::getAttrib(amerge_attrib_t* att) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; rk_aiq_uapi_amerge_GetAttrib(mAlgoCtx, att); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAmergeHandleInt::prepare() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; ret = RkAiqAmergeHandle::prepare(); RKAIQCORE_CHECK_RET(ret, "amerge handle prepare failed"); RkAiqAlgoConfigAmergeInt* amerge_config_int = (RkAiqAlgoConfigAmergeInt*)mConfig; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; //TODO amerge_config_int->rawHeight = sharedCom->snsDes.isp_acq_height; amerge_config_int->rawWidth = sharedCom->snsDes.isp_acq_width; amerge_config_int->working_mode = sharedCom->working_mode; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->prepare(mConfig); RKAIQCORE_CHECK_RET(ret, "amerge algo prepare failed"); EXIT_ANALYZER_FUNCTION(); return XCAM_RETURN_NO_ERROR; } XCamReturn RkAiqAmergeHandleInt::preProcess() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoPreAmergeInt* amerge_pre_int = (RkAiqAlgoPreAmergeInt*)mPreInParam; RkAiqAlgoPreResAmergeInt* amerge_pre_res_int = (RkAiqAlgoPreResAmergeInt*)mPreOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqIspStats* ispStats = shared->ispStats; RkAiqPreResComb* comb = &shared->preResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; ret = RkAiqAmergeHandle::preProcess(); if (ret) { comb->amerge_pre_res = NULL; RKAIQCORE_CHECK_RET(ret, "amerge handle preProcess failed"); } comb->amerge_pre_res = NULL; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->pre_process(mPreInParam, mPreOutParam); RKAIQCORE_CHECK_RET(ret, "amerge algo pre_process failed"); // set result to mAiqCore comb->amerge_pre_res = (RkAiqAlgoPreResAmerge*)amerge_pre_res_int; EXIT_ANALYZER_FUNCTION(); return XCAM_RETURN_NO_ERROR; } XCamReturn RkAiqAmergeHandleInt::processing() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoProcAmergeInt* amerge_proc_int = (RkAiqAlgoProcAmergeInt*)mProcInParam; RkAiqAlgoProcResAmergeInt* amerge_proc_res_int = (RkAiqAlgoProcResAmergeInt*)mProcOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqIspStats* ispStats = shared->ispStats; RkAiqProcResComb* comb = &shared->procResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; ret = RkAiqAmergeHandle::processing(); if (ret) { comb->amerge_proc_res = NULL; RKAIQCORE_CHECK_RET(ret, "amerge handle processing failed"); } comb->amerge_proc_res = NULL; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->processing(mProcInParam, mProcOutParam); RKAIQCORE_CHECK_RET(ret, "amerge algo processing failed"); comb->amerge_proc_res = (RkAiqAlgoProcResAmerge*)amerge_proc_res_int; EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAmergeHandleInt::postProcess() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoPostAmergeInt* amerge_post_int = (RkAiqAlgoPostAmergeInt*)mPostInParam; RkAiqAlgoPostResAmergeInt* amerge_post_res_int = (RkAiqAlgoPostResAmergeInt*)mPostOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqIspStats* ispStats = shared->ispStats; RkAiqPostResComb* comb = &shared->postResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; ret = RkAiqAmergeHandle::postProcess(); if (ret) { comb->amerge_post_res = NULL; RKAIQCORE_CHECK_RET(ret, "amerge handle postProcess failed"); return ret; } comb->amerge_post_res = NULL; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->post_process(mPostInParam, mPostOutParam); RKAIQCORE_CHECK_RET(ret, "amerge algo post_process failed"); // set result to mAiqCore comb->amerge_post_res = (RkAiqAlgoPostResAmerge*)amerge_post_res_int ; EXIT_ANALYZER_FUNCTION(); return ret; } void RkAiqAtmoHandleInt::init() { ENTER_ANALYZER_FUNCTION(); RkAiqAtmoHandle::deInit(); mConfig = (RkAiqAlgoCom*)(new RkAiqAlgoConfigAtmoInt()); mPreInParam = (RkAiqAlgoCom*)(new RkAiqAlgoPreAtmoInt()); mPreOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoPreResAtmoInt()); mProcInParam = (RkAiqAlgoCom*)(new RkAiqAlgoProcAtmoInt()); mProcOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoProcResAtmoInt()); mPostInParam = (RkAiqAlgoCom*)(new RkAiqAlgoPostAtmoInt()); mPostOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoPostResAtmoInt()); EXIT_ANALYZER_FUNCTION(); } XCamReturn RkAiqAtmoHandleInt::updateConfig(bool needSync) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; if (needSync) mCfgMutex.lock(); // if something changed if (updateAtt) { mCurAtt = mNewAtt; updateAtt = false; rk_aiq_uapi_atmo_SetAttrib(mAlgoCtx, mCurAtt, true); sendSignal(); } if (needSync) mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAtmoHandleInt::setAttrib(atmo_attrib_t att) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; mCfgMutex.lock(); //TODO // check if there is different between att & mCurAtt // if something changed, set att to mNewAtt, and // the new params will be effective later when updateConfig // called by RkAiqCore // if something changed if (0 != memcmp(&mCurAtt, &att, sizeof(atmo_attrib_t))) { mNewAtt = att; updateAtt = true; waitSignal(); } mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAtmoHandleInt::getAttrib(atmo_attrib_t* att) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; rk_aiq_uapi_atmo_GetAttrib(mAlgoCtx, att); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAtmoHandleInt::prepare() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; ret = RkAiqAtmoHandle::prepare(); RKAIQCORE_CHECK_RET(ret, "atmo handle prepare failed"); RkAiqAlgoConfigAtmoInt* atmo_config_int = (RkAiqAlgoConfigAtmoInt*)mConfig; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqIspStats* ispStats = shared->ispStats; RkAiqPreResComb* comb = &shared->preResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; //TODO atmo_config_int->rawHeight = sharedCom->snsDes.isp_acq_height; atmo_config_int->rawWidth = sharedCom->snsDes.isp_acq_width; atmo_config_int->working_mode = sharedCom->working_mode; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->prepare(mConfig); RKAIQCORE_CHECK_RET(ret, "atmo algo prepare failed"); EXIT_ANALYZER_FUNCTION(); return XCAM_RETURN_NO_ERROR; } XCamReturn RkAiqAtmoHandleInt::preProcess() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoPreAtmoInt* atmo_pre_int = (RkAiqAlgoPreAtmoInt*)mPreInParam; RkAiqAlgoPreResAtmoInt* atmo_pre_res_int = (RkAiqAlgoPreResAtmoInt*)mPreOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqIspStats* ispStats = shared->ispStats; RkAiqPreResComb* comb = &shared->preResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; ret = RkAiqAtmoHandle::preProcess(); if (ret) { comb->atmo_pre_res = NULL; RKAIQCORE_CHECK_RET(ret, "atmo handle preProcess failed"); } if(!shared->ispStats->atmo_stats_valid && !sharedCom->init) { LOGD("no atmo stats, ignore!"); // TODO: keep last result ? // comb->atmo_proc_res = NULL; // return XCAM_RETURN_BYPASS; } comb->atmo_pre_res = NULL; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->pre_process(mPreInParam, mPreOutParam); RKAIQCORE_CHECK_RET(ret, "ahdr algo pre_process failed"); // set result to mAiqCore comb->atmo_pre_res = (RkAiqAlgoPreResAtmo*)atmo_pre_res_int; EXIT_ANALYZER_FUNCTION(); return XCAM_RETURN_NO_ERROR; } XCamReturn RkAiqAtmoHandleInt::processing() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoProcAtmoInt* atmo_proc_int = (RkAiqAlgoProcAtmoInt*)mProcInParam; RkAiqAlgoProcResAtmoInt* atmo_proc_res_int = (RkAiqAlgoProcResAtmoInt*)mProcOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqIspStats* ispStats = shared->ispStats; RkAiqProcResComb* comb = &shared->procResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; ret = RkAiqAtmoHandle::processing(); if (ret) { comb->atmo_proc_res = NULL; RKAIQCORE_CHECK_RET(ret, "atmo handle processing failed"); } if(!shared->ispStats->atmo_stats_valid && !sharedCom->init) { LOGD("no atmo stats, ignore!"); // TODO: keep last result ? // comb->atmo_proc_res = NULL; // return XCAM_RETURN_BYPASS; } else { memcpy(&atmo_proc_int->ispAtmoStats.tmo_stats, &ispStats->atmo_stats.tmo_stats, sizeof(hdrtmo_stats_t)); memcpy(atmo_proc_int->ispAtmoStats.other_stats.tmo_luma, ispStats->aec_stats.ae_data.extra.rawae_big.channelg_xy, sizeof(atmo_proc_int->ispAtmoStats.other_stats.tmo_luma)); if(sharedCom->working_mode == RK_AIQ_ISP_HDR_MODE_3_FRAME_HDR || sharedCom->working_mode == RK_AIQ_ISP_HDR_MODE_3_LINE_HDR) { memcpy(atmo_proc_int->ispAtmoStats.other_stats.short_luma, ispStats->aec_stats.ae_data.chn[0].rawae_big.channelg_xy, sizeof(atmo_proc_int->ispAtmoStats.other_stats.short_luma)); memcpy(atmo_proc_int->ispAtmoStats.other_stats.middle_luma, ispStats->aec_stats.ae_data.chn[1].rawae_lite.channelg_xy, sizeof(atmo_proc_int->ispAtmoStats.other_stats.middle_luma)); memcpy(atmo_proc_int->ispAtmoStats.other_stats.long_luma, ispStats->aec_stats.ae_data.chn[2].rawae_big.channelg_xy, sizeof(atmo_proc_int->ispAtmoStats.other_stats.long_luma)); } else if(sharedCom->working_mode == RK_AIQ_ISP_HDR_MODE_2_FRAME_HDR || sharedCom->working_mode == RK_AIQ_ISP_HDR_MODE_2_LINE_HDR) { memcpy(atmo_proc_int->ispAtmoStats.other_stats.short_luma, ispStats->aec_stats.ae_data.chn[0].rawae_big.channelg_xy, sizeof(atmo_proc_int->ispAtmoStats.other_stats.short_luma)); memcpy(atmo_proc_int->ispAtmoStats.other_stats.long_luma, ispStats->aec_stats.ae_data.chn[1].rawae_big.channelg_xy, sizeof(atmo_proc_int->ispAtmoStats.other_stats.long_luma)); } else LOGD("Wrong working mode!!!"); } comb->atmo_proc_res = NULL; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->processing(mProcInParam, mProcOutParam); RKAIQCORE_CHECK_RET(ret, "atmo algo processing failed"); comb->atmo_proc_res = (RkAiqAlgoProcResAtmo*)atmo_proc_res_int; EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAtmoHandleInt::postProcess() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoPostAtmoInt* atmo_post_int = (RkAiqAlgoPostAtmoInt*)mPostInParam; RkAiqAlgoPostResAtmoInt* atmo_post_res_int = (RkAiqAlgoPostResAtmoInt*)mPostOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqIspStats* ispStats = shared->ispStats; RkAiqPostResComb* comb = &shared->postResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; ret = RkAiqAtmoHandle::postProcess(); if (ret) { comb->atmo_post_res = NULL; RKAIQCORE_CHECK_RET(ret, "ahdr handle postProcess failed"); return ret; } if(!shared->ispStats->atmo_stats_valid && !sharedCom->init) { LOGD("no atmo stats, ignore!"); // TODO: keep last result ? // comb->ahdr_proc_res = NULL; // return XCAM_RETURN_BYPASS; } comb->atmo_post_res = NULL; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->post_process(mPostInParam, mPostOutParam); RKAIQCORE_CHECK_RET(ret, "atmo algo post_process failed"); // set result to mAiqCore comb->atmo_post_res = (RkAiqAlgoPostResAtmo*)atmo_post_res_int ; EXIT_ANALYZER_FUNCTION(); return ret; } void RkAiqAsdHandleInt::init() { ENTER_ANALYZER_FUNCTION(); RkAiqAsdHandle::deInit(); mConfig = (RkAiqAlgoCom*)(new RkAiqAlgoConfigAsdInt()); mPreInParam = (RkAiqAlgoCom*)(new RkAiqAlgoPreAsdInt()); mPreOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoPreResAsdInt()); mProcInParam = (RkAiqAlgoCom*)(new RkAiqAlgoProcAsdInt()); mProcOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoProcResAsdInt()); mPostInParam = (RkAiqAlgoCom*)(new RkAiqAlgoPostAsdInt()); mPostOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoPostResAsdInt()); EXIT_ANALYZER_FUNCTION(); } XCamReturn RkAiqAsdHandleInt::updateConfig(bool needSync) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; if (needSync) mCfgMutex.lock(); // if something changed if (updateAtt) { mCurAtt = mNewAtt; updateAtt = false; rk_aiq_uapi_asd_SetAttrib(mAlgoCtx, mCurAtt, false); sendSignal(); } if (needSync) mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAsdHandleInt::setAttrib(asd_attrib_t att) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; mCfgMutex.lock(); //TODO // check if there is different between att & mCurAtt // if something changed, set att to mNewAtt, and // the new params will be effective later when updateConfig // called by RkAiqCore // if something changed if (0 != memcmp(&mCurAtt, &att, sizeof(asd_attrib_t))) { mNewAtt = att; updateAtt = true; waitSignal(); } mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAsdHandleInt::getAttrib(asd_attrib_t *att) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; rk_aiq_uapi_asd_GetAttrib(mAlgoCtx, att); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAsdHandleInt::prepare() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; ret = RkAiqAsdHandle::prepare(); RKAIQCORE_CHECK_RET(ret, "asd handle prepare failed"); RkAiqAlgoConfigAsdInt* asd_config_int = (RkAiqAlgoConfigAsdInt*)mConfig; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->prepare(mConfig); RKAIQCORE_CHECK_RET(ret, "asd algo prepare failed"); EXIT_ANALYZER_FUNCTION(); return XCAM_RETURN_NO_ERROR; } XCamReturn RkAiqAsdHandleInt::preProcess() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoPreAsdInt* asd_pre_int = (RkAiqAlgoPreAsdInt*)mPreInParam; RkAiqAlgoPreResAsdInt* asd_pre_res_int = (RkAiqAlgoPreResAsdInt*)mPreOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqPreResComb* comb = &shared->preResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAsdHandle::preProcess(); if (ret) { comb->asd_pre_res = NULL; RKAIQCORE_CHECK_RET(ret, "asd handle preProcess failed"); } comb->asd_pre_res = NULL; asd_pre_int->pre_params.cpsl_mode = sharedCom->cpslCfg.mode; asd_pre_int->pre_params.cpsl_on = sharedCom->cpslCfg.u.m.on; asd_pre_int->pre_params.cpsl_sensitivity = sharedCom->cpslCfg.u.a.sensitivity; asd_pre_int->pre_params.cpsl_sw_interval = sharedCom->cpslCfg.u.a.sw_interval; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->pre_process(mPreInParam, mPreOutParam); RKAIQCORE_CHECK_RET(ret, "asd algo pre_process failed"); // set result to mAiqCore comb->asd_pre_res = (RkAiqAlgoPreResAsd*)asd_pre_res_int; EXIT_ANALYZER_FUNCTION(); return XCAM_RETURN_NO_ERROR; } XCamReturn RkAiqAsdHandleInt::processing() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoProcAsdInt* asd_proc_int = (RkAiqAlgoProcAsdInt*)mProcInParam; RkAiqAlgoProcResAsdInt* asd_proc_res_int = (RkAiqAlgoProcResAsdInt*)mProcOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqProcResComb* comb = &shared->procResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAsdHandle::processing(); if (ret) { comb->asd_proc_res = NULL; RKAIQCORE_CHECK_RET(ret, "asd handle processing failed"); } comb->asd_proc_res = NULL; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->processing(mProcInParam, mProcOutParam); RKAIQCORE_CHECK_RET(ret, "asd algo processing failed"); comb->asd_proc_res = (RkAiqAlgoProcResAsd*)asd_proc_res_int; EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAsdHandleInt::postProcess() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoPostAsdInt* asd_post_int = (RkAiqAlgoPostAsdInt*)mPostInParam; RkAiqAlgoPostResAsdInt* asd_post_res_int = (RkAiqAlgoPostResAsdInt*)mPostOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqPostResComb* comb = &shared->postResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAsdHandle::postProcess(); if (ret) { comb->asd_post_res = NULL; RKAIQCORE_CHECK_RET(ret, "asd handle postProcess failed"); return ret; } comb->asd_post_res = NULL; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->post_process(mPostInParam, mPostOutParam); RKAIQCORE_CHECK_RET(ret, "asd algo post_process failed"); // set result to mAiqCore comb->asd_post_res = (RkAiqAlgoPostResAsd*)asd_post_res_int ; EXIT_ANALYZER_FUNCTION(); return ret; } void RkAiqAcpHandleInt::init() { ENTER_ANALYZER_FUNCTION(); RkAiqAcpHandle::deInit(); mConfig = (RkAiqAlgoCom*)(new RkAiqAlgoConfigAcpInt()); mPreInParam = (RkAiqAlgoCom*)(new RkAiqAlgoPreAcpInt()); mPreOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoPreResAcpInt()); mProcInParam = (RkAiqAlgoCom*)(new RkAiqAlgoProcAcpInt()); mProcOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoProcResAcpInt()); mPostInParam = (RkAiqAlgoCom*)(new RkAiqAlgoPostAcpInt()); mPostOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoPostResAcpInt()); EXIT_ANALYZER_FUNCTION(); } XCamReturn RkAiqAcpHandleInt::updateConfig(bool needSync) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; if (needSync) mCfgMutex.lock(); // if something changed if (updateAtt) { mCurAtt = mNewAtt; updateAtt = false; rk_aiq_uapi_acp_SetAttrib(mAlgoCtx, mCurAtt, false); sendSignal(); } if (needSync) mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAcpHandleInt::setAttrib(acp_attrib_t att) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; mCfgMutex.lock(); // check if there is different between att & mCurAtt // if something changed, set att to mNewAtt, and // the new params will be effective later when updateConfig // called by RkAiqCore if (0 != memcmp(&mCurAtt, &att, sizeof(acp_attrib_t))) { mNewAtt = att; updateAtt = true; waitSignal(); } mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAcpHandleInt::getAttrib(acp_attrib_t *att) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; rk_aiq_uapi_acp_GetAttrib(mAlgoCtx, att); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAcpHandleInt::prepare() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; ret = RkAiqAcpHandle::prepare(); RKAIQCORE_CHECK_RET(ret, "acp handle prepare failed"); RkAiqAlgoConfigAcpInt* acp_config_int = (RkAiqAlgoConfigAcpInt*)mConfig; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->prepare(mConfig); RKAIQCORE_CHECK_RET(ret, "acp algo prepare failed"); EXIT_ANALYZER_FUNCTION(); return XCAM_RETURN_NO_ERROR; } XCamReturn RkAiqAcpHandleInt::preProcess() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoPreAcpInt* acp_pre_int = (RkAiqAlgoPreAcpInt*)mPreInParam; RkAiqAlgoPreResAcpInt* acp_pre_res_int = (RkAiqAlgoPreResAcpInt*)mPreOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqPreResComb* comb = &shared->preResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAcpHandle::preProcess(); if (ret) { comb->acp_pre_res = NULL; RKAIQCORE_CHECK_RET(ret, "acp handle preProcess failed"); } comb->acp_pre_res = NULL; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->pre_process(mPreInParam, mPreOutParam); RKAIQCORE_CHECK_RET(ret, "acp algo pre_process failed"); // set result to mAiqCore comb->acp_pre_res = (RkAiqAlgoPreResAcp*)acp_pre_res_int; EXIT_ANALYZER_FUNCTION(); return XCAM_RETURN_NO_ERROR; } XCamReturn RkAiqAcpHandleInt::processing() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoProcAcpInt* acp_proc_int = (RkAiqAlgoProcAcpInt*)mProcInParam; RkAiqAlgoProcResAcpInt* acp_proc_res_int = (RkAiqAlgoProcResAcpInt*)mProcOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqProcResComb* comb = &shared->procResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAcpHandle::processing(); if (ret) { comb->acp_proc_res = NULL; RKAIQCORE_CHECK_RET(ret, "acp handle processing failed"); } comb->acp_proc_res = NULL; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->processing(mProcInParam, mProcOutParam); RKAIQCORE_CHECK_RET(ret, "acp algo processing failed"); comb->acp_proc_res = (RkAiqAlgoProcResAcp*)acp_proc_res_int; EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAcpHandleInt::postProcess() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoPostAcpInt* acp_post_int = (RkAiqAlgoPostAcpInt*)mPostInParam; RkAiqAlgoPostResAcpInt* acp_post_res_int = (RkAiqAlgoPostResAcpInt*)mPostOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqPostResComb* comb = &shared->postResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAcpHandle::postProcess(); if (ret) { comb->acp_post_res = NULL; RKAIQCORE_CHECK_RET(ret, "acp handle postProcess failed"); return ret; } comb->acp_post_res = NULL; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->post_process(mPostInParam, mPostOutParam); RKAIQCORE_CHECK_RET(ret, "acp algo post_process failed"); // set result to mAiqCore comb->acp_post_res = (RkAiqAlgoPostResAcp*)acp_post_res_int ; EXIT_ANALYZER_FUNCTION(); return ret; } void RkAiqA3dlutHandleInt::init() { ENTER_ANALYZER_FUNCTION(); RkAiqA3dlutHandle::deInit(); mConfig = (RkAiqAlgoCom*)(new RkAiqAlgoConfigA3dlutInt()); mPreInParam = (RkAiqAlgoCom*)(new RkAiqAlgoPreA3dlutInt()); mPreOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoPreResA3dlutInt()); mProcInParam = (RkAiqAlgoCom*)(new RkAiqAlgoProcA3dlutInt()); mProcOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoProcResA3dlutInt()); mPostInParam = (RkAiqAlgoCom*)(new RkAiqAlgoPostA3dlutInt()); mPostOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoPostResA3dlutInt()); EXIT_ANALYZER_FUNCTION(); } XCamReturn RkAiqA3dlutHandleInt::updateConfig(bool needSync) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; if (needSync) mCfgMutex.lock(); // if something changed if (updateAtt) { mCurAtt = mNewAtt; updateAtt = false; // TODO rk_aiq_uapi_a3dlut_SetAttrib(mAlgoCtx, mCurAtt, false); sendSignal(); } if (needSync) mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqA3dlutHandleInt::setAttrib(rk_aiq_lut3d_attrib_t att) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; mCfgMutex.lock(); //TODO // check if there is different between att & mCurAtt // if something changed, set att to mNewAtt, and // the new params will be effective later when updateConfig // called by RkAiqCore // if something changed if (0 != memcmp(&mCurAtt, &att, sizeof(rk_aiq_lut3d_attrib_t))) { mNewAtt = att; updateAtt = true; waitSignal(); } mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqA3dlutHandleInt::getAttrib(rk_aiq_lut3d_attrib_t *att) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; rk_aiq_uapi_a3dlut_GetAttrib(mAlgoCtx, att); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqA3dlutHandleInt::query3dlutInfo(rk_aiq_lut3d_querry_info_t *lut3d_querry_info ) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; rk_aiq_uapi_a3dlut_Query3dlutInfo(mAlgoCtx, lut3d_querry_info); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqA3dlutHandleInt::prepare() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; ret = RkAiqA3dlutHandle::prepare(); RKAIQCORE_CHECK_RET(ret, "a3dlut handle prepare failed"); RkAiqAlgoConfigA3dlutInt* a3dlut_config_int = (RkAiqAlgoConfigA3dlutInt*)mConfig; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->prepare(mConfig); RKAIQCORE_CHECK_RET(ret, "a3dlut algo prepare failed"); EXIT_ANALYZER_FUNCTION(); return XCAM_RETURN_NO_ERROR; } XCamReturn RkAiqA3dlutHandleInt::preProcess() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoPreA3dlutInt* a3dlut_pre_int = (RkAiqAlgoPreA3dlutInt*)mPreInParam; RkAiqAlgoPreResA3dlutInt* a3dlut_pre_res_int = (RkAiqAlgoPreResA3dlutInt*)mPreOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqPreResComb* comb = &shared->preResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqA3dlutHandle::preProcess(); if (ret) { comb->a3dlut_pre_res = NULL; RKAIQCORE_CHECK_RET(ret, "a3dlut handle preProcess failed"); } comb->a3dlut_pre_res = NULL; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->pre_process(mPreInParam, mPreOutParam); RKAIQCORE_CHECK_RET(ret, "a3dlut algo pre_process failed"); // set result to mAiqCore comb->a3dlut_pre_res = (RkAiqAlgoPreResA3dlut*)a3dlut_pre_res_int; EXIT_ANALYZER_FUNCTION(); return XCAM_RETURN_NO_ERROR; } XCamReturn RkAiqA3dlutHandleInt::processing() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoProcA3dlutInt* a3dlut_proc_int = (RkAiqAlgoProcA3dlutInt*)mProcInParam; RkAiqAlgoProcResA3dlutInt* a3dlut_proc_res_int = (RkAiqAlgoProcResA3dlutInt*)mProcOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqProcResComb* comb = &shared->procResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqA3dlutHandle::processing(); if (ret) { comb->a3dlut_proc_res = NULL; RKAIQCORE_CHECK_RET(ret, "a3dlut handle processing failed"); } comb->a3dlut_proc_res = NULL; XCamVideoBuffer* xCamAwbProcRes = shared->res_comb.awb_proc_res; if (xCamAwbProcRes) { RkAiqAlgoProcResAwbInt* awb_res_int = (RkAiqAlgoProcResAwbInt*)xCamAwbProcRes->map(xCamAwbProcRes); RkAiqAlgoProcResAwb* awb_res = &awb_res_int->awb_proc_res_com; if(awb_res) { if(awb_res->awb_gain_algo.grgain < DIVMIN || awb_res->awb_gain_algo.gbgain < DIVMIN ) { LOGE("get wrong awb gain from AWB module ,use default value "); } else { a3dlut_proc_int->awbGain[0] = awb_res->awb_gain_algo.rgain / awb_res->awb_gain_algo.grgain; a3dlut_proc_int->awbGain[1] = awb_res->awb_gain_algo.bgain / awb_res->awb_gain_algo.gbgain; } a3dlut_proc_int->awbIIRDampCoef = awb_res_int->awb_smooth_factor; a3dlut_proc_int->awbConverged = awb_res_int->awbConverged; } else { LOGE("fail to get awb gain form AWB module,use default value "); } } else { LOGE("fail to get awb gain form AWB module,use default value "); } RKAiqAecExpInfo_t *pCurExp = &shared->curExp; if(pCurExp) { if((rk_aiq_working_mode_t)sharedCom->working_mode == RK_AIQ_WORKING_MODE_NORMAL) { a3dlut_proc_int->sensorGain = pCurExp->LinearExp.exp_real_params.analog_gain * pCurExp->LinearExp.exp_real_params.digital_gain * pCurExp->LinearExp.exp_real_params.isp_dgain; } else if((rk_aiq_working_mode_t)sharedCom->working_mode >= RK_AIQ_WORKING_MODE_ISP_HDR2 && (rk_aiq_working_mode_t)sharedCom->working_mode < RK_AIQ_WORKING_MODE_ISP_HDR3) { LOGD("sensor gain choose from second hdr frame for a3dlut"); a3dlut_proc_int->sensorGain = pCurExp->HdrExp[1].exp_real_params.analog_gain * pCurExp->HdrExp[1].exp_real_params.digital_gain * pCurExp->HdrExp[1].exp_real_params.isp_dgain; } else if((rk_aiq_working_mode_t)sharedCom->working_mode >= RK_AIQ_WORKING_MODE_ISP_HDR2 && (rk_aiq_working_mode_t)sharedCom->working_mode >= RK_AIQ_WORKING_MODE_ISP_HDR3) { LOGD("sensor gain choose from third hdr frame for a3dlut"); a3dlut_proc_int->sensorGain = pCurExp->HdrExp[2].exp_real_params.analog_gain * pCurExp->HdrExp[2].exp_real_params.digital_gain * pCurExp->HdrExp[2].exp_real_params.isp_dgain; } else { LOGE("working_mode (%d) is invaild ,fail to get sensor gain form AE module,use default value ", sharedCom->working_mode); } } else { LOGE("fail to get sensor gain form AE module,use default value "); } RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->processing(mProcInParam, mProcOutParam); RKAIQCORE_CHECK_RET(ret, "a3dlut algo processing failed"); comb->a3dlut_proc_res = (RkAiqAlgoProcResA3dlut*)a3dlut_proc_res_int; EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqA3dlutHandleInt::postProcess() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoPostA3dlutInt* a3dlut_post_int = (RkAiqAlgoPostA3dlutInt*)mPostInParam; RkAiqAlgoPostResA3dlutInt* a3dlut_post_res_int = (RkAiqAlgoPostResA3dlutInt*)mPostOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqPostResComb* comb = &shared->postResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqA3dlutHandle::postProcess(); if (ret) { comb->a3dlut_post_res = NULL; RKAIQCORE_CHECK_RET(ret, "a3dlut handle postProcess failed"); return ret; } comb->a3dlut_post_res = NULL; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->post_process(mPostInParam, mPostOutParam); RKAIQCORE_CHECK_RET(ret, "a3dlut algo post_process failed"); // set result to mAiqCore comb->a3dlut_post_res = (RkAiqAlgoPostResA3dlut*)a3dlut_post_res_int ; EXIT_ANALYZER_FUNCTION(); return ret; } void RkAiqAblcHandleInt::init() { ENTER_ANALYZER_FUNCTION(); RkAiqAblcHandle::deInit(); mConfig = (RkAiqAlgoCom*)(new RkAiqAlgoConfigAblcInt()); mPreInParam = (RkAiqAlgoCom*)(new RkAiqAlgoPreAblcInt()); mPreOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoPreResAblcInt()); mProcInParam = (RkAiqAlgoCom*)(new RkAiqAlgoProcAblcInt()); mProcOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoProcResAblcInt()); mPostInParam = (RkAiqAlgoCom*)(new RkAiqAlgoPostAblcInt()); mPostOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoPostResAblcInt()); EXIT_ANALYZER_FUNCTION(); } XCamReturn RkAiqAblcHandleInt::updateConfig(bool needSync) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; if (needSync) mCfgMutex.lock(); // if something changed if (updateAtt) { mCurAtt = mNewAtt; updateAtt = false; // TODO rk_aiq_uapi_ablc_SetAttrib(mAlgoCtx, &mCurAtt, false); sendSignal(); } if (needSync) mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAblcHandleInt::setAttrib(rk_aiq_blc_attrib_t *att) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; mCfgMutex.lock(); //TODO // check if there is different between att & mCurAtt // if something changed, set att to mNewAtt, and // the new params will be effective later when updateConfig // called by RkAiqCore // if something changed if (0 != memcmp(&mCurAtt, att, sizeof(rk_aiq_blc_attrib_t))) { mNewAtt = *att; updateAtt = true; waitSignal(); } mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAblcHandleInt::getAttrib(rk_aiq_blc_attrib_t *att) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; rk_aiq_uapi_ablc_GetAttrib(mAlgoCtx, att); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAblcHandleInt::prepare() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; ret = RkAiqAblcHandle::prepare(); RKAIQCORE_CHECK_RET(ret, "ablc handle prepare failed"); RkAiqAlgoConfigAblcInt* ablc_config_int = (RkAiqAlgoConfigAblcInt*)mConfig; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->prepare(mConfig); RKAIQCORE_CHECK_RET(ret, "ablc algo prepare failed"); EXIT_ANALYZER_FUNCTION(); return XCAM_RETURN_NO_ERROR; } XCamReturn RkAiqAblcHandleInt::preProcess() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoPreAblcInt* ablc_pre_int = (RkAiqAlgoPreAblcInt*)mPreInParam; RkAiqAlgoPreResAblcInt* ablc_pre_res_int = (RkAiqAlgoPreResAblcInt*)mPreOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqPreResComb* comb = &shared->preResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAblcHandle::preProcess(); if (ret) { comb->ablc_pre_res = NULL; RKAIQCORE_CHECK_RET(ret, "ablc handle preProcess failed"); } comb->ablc_pre_res = NULL; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->pre_process(mPreInParam, mPreOutParam); RKAIQCORE_CHECK_RET(ret, "ablc algo pre_process failed"); // set result to mAiqCore comb->ablc_pre_res = (RkAiqAlgoPreResAblc*)ablc_pre_res_int; EXIT_ANALYZER_FUNCTION(); return XCAM_RETURN_NO_ERROR; } XCamReturn RkAiqAblcHandleInt::processing() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoProcAblcInt* ablc_proc_int = (RkAiqAlgoProcAblcInt*)mProcInParam; RkAiqAlgoProcResAblcInt* ablc_proc_res_int = (RkAiqAlgoProcResAblcInt*)mProcOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqProcResComb* comb = &shared->procResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAblcHandle::processing(); if (ret) { comb->ablc_proc_res = NULL; RKAIQCORE_CHECK_RET(ret, "ablc handle processing failed"); } comb->ablc_proc_res = NULL; ablc_proc_int->iso = sharedCom->iso; ablc_proc_int->hdr_mode = sharedCom->working_mode; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->processing(mProcInParam, mProcOutParam); RKAIQCORE_CHECK_RET(ret, "ablc algo processing failed"); comb->ablc_proc_res = (RkAiqAlgoProcResAblc*)ablc_proc_res_int; EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAblcHandleInt::postProcess() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoPostAblcInt* ablc_post_int = (RkAiqAlgoPostAblcInt*)mPostInParam; RkAiqAlgoPostResAblcInt* ablc_post_res_int = (RkAiqAlgoPostResAblcInt*)mPostOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqPostResComb* comb = &shared->postResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAblcHandle::postProcess(); if (ret) { comb->ablc_post_res = NULL; RKAIQCORE_CHECK_RET(ret, "ablc handle postProcess failed"); return ret; } comb->ablc_post_res = NULL; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->post_process(mPostInParam, mPostOutParam); RKAIQCORE_CHECK_RET(ret, "ablc algo post_process failed"); // set result to mAiqCore comb->ablc_post_res = (RkAiqAlgoPostResAblc*)ablc_post_res_int ; EXIT_ANALYZER_FUNCTION(); return ret; } void RkAiqAccmHandleInt::init() { ENTER_ANALYZER_FUNCTION(); RkAiqAccmHandle::deInit(); mConfig = (RkAiqAlgoCom*)(new RkAiqAlgoConfigAccmInt()); mPreInParam = (RkAiqAlgoCom*)(new RkAiqAlgoPreAccmInt()); mPreOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoPreResAccmInt()); mProcInParam = (RkAiqAlgoCom*)(new RkAiqAlgoProcAccmInt()); mProcOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoProcResAccmInt()); mPostInParam = (RkAiqAlgoCom*)(new RkAiqAlgoPostAccmInt()); mPostOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoPostResAccmInt()); EXIT_ANALYZER_FUNCTION(); } XCamReturn RkAiqAccmHandleInt::updateConfig(bool needSync) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; if (needSync) mCfgMutex.lock(); // if something changed if (updateAtt) { mCurAtt = mNewAtt; updateAtt = false; // TODO rk_aiq_uapi_accm_SetAttrib(mAlgoCtx, mCurAtt, false); sendSignal(); } if (needSync) mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAccmHandleInt::setAttrib(rk_aiq_ccm_attrib_t att) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; mCfgMutex.lock(); //TODO // check if there is different between att & mCurAtt // if something changed, set att to mNewAtt, and // the new params will be effective later when updateConfig // called by RkAiqCore // if something changed if (0 != memcmp(&mCurAtt, &att, sizeof(rk_aiq_ccm_attrib_t))) { mNewAtt = att; updateAtt = true; waitSignal(); } mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAccmHandleInt::getAttrib(rk_aiq_ccm_attrib_t *att) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; rk_aiq_uapi_accm_GetAttrib(mAlgoCtx, att); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAccmHandleInt::queryCcmInfo(rk_aiq_ccm_querry_info_t *ccm_querry_info ) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; rk_aiq_uapi_accm_QueryCcmInfo(mAlgoCtx, ccm_querry_info); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAccmHandleInt::prepare() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; ret = RkAiqAccmHandle::prepare(); RKAIQCORE_CHECK_RET(ret, "accm handle prepare failed"); RkAiqAlgoConfigAccmInt* accm_config_int = (RkAiqAlgoConfigAccmInt*)mConfig; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->prepare(mConfig); RKAIQCORE_CHECK_RET(ret, "accm algo prepare failed"); EXIT_ANALYZER_FUNCTION(); return XCAM_RETURN_NO_ERROR; } XCamReturn RkAiqAccmHandleInt::preProcess() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoPreAccmInt* accm_pre_int = (RkAiqAlgoPreAccmInt*)mPreInParam; RkAiqAlgoPreResAccmInt* accm_pre_res_int = (RkAiqAlgoPreResAccmInt*)mPreOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqPreResComb* comb = &shared->preResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAccmHandle::preProcess(); if (ret) { comb->accm_pre_res = NULL; RKAIQCORE_CHECK_RET(ret, "accm handle preProcess failed"); } comb->accm_pre_res = NULL; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->pre_process(mPreInParam, mPreOutParam); RKAIQCORE_CHECK_RET(ret, "accm algo pre_process failed"); // set result to mAiqCore comb->accm_pre_res = (RkAiqAlgoPreResAccm*)accm_pre_res_int; EXIT_ANALYZER_FUNCTION(); return XCAM_RETURN_NO_ERROR; } XCamReturn RkAiqAccmHandleInt::processing() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoProcAccmInt* accm_proc_int = (RkAiqAlgoProcAccmInt*)mProcInParam; RkAiqAlgoProcResAccmInt* accm_proc_res_int = (RkAiqAlgoProcResAccmInt*)mProcOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqProcResComb* comb = &shared->procResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAccmHandle::processing(); if (ret) { comb->accm_proc_res = NULL; RKAIQCORE_CHECK_RET(ret, "accm handle processing failed"); } comb->accm_proc_res = NULL; // TODO should check if the rk awb algo used #if 0 RkAiqAlgoProcResAwb* awb_res = (RkAiqAlgoProcResAwb*)(shared->procResComb.awb_proc_res); RkAiqAlgoProcResAwbInt* awb_res_int = (RkAiqAlgoProcResAwbInt*)(shared->procResComb.awb_proc_res); if(awb_res ) { if(awb_res->awb_gain_algo.grgain < DIVMIN || awb_res->awb_gain_algo.gbgain < DIVMIN ) { LOGE("get wrong awb gain from AWB module ,use default value "); } else { accm_proc_int->accm_sw_info.awbGain[0] = awb_res->awb_gain_algo.rgain / awb_res->awb_gain_algo.grgain; accm_proc_int->accm_sw_info.awbGain[1] = awb_res->awb_gain_algo.bgain / awb_res->awb_gain_algo.gbgain; } accm_proc_int->accm_sw_info.awbIIRDampCoef = awb_res_int->awb_smooth_factor; accm_proc_int->accm_sw_info.varianceLuma = awb_res_int->varianceLuma; accm_proc_int->accm_sw_info.awbConverged = awb_res_int->awbConverged; } else { LOGE("fail to get awb gain form AWB module,use default value "); } RkAiqAlgoPreResAeInt *ae_int = (RkAiqAlgoPreResAeInt*)shared->preResComb.ae_pre_res; if( ae_int) { if(sharedCom->working_mode == RK_AIQ_WORKING_MODE_NORMAL) { accm_proc_int->accm_sw_info.sensorGain = ae_int->ae_pre_res_rk.LinearExp.exp_real_params.analog_gain * ae_int->ae_pre_res_rk.LinearExp.exp_real_params.digital_gain * ae_int->ae_pre_res_rk.LinearExp.exp_real_params.isp_dgain; } else if((rk_aiq_working_mode_t)sharedCom->working_mode >= RK_AIQ_WORKING_MODE_ISP_HDR2 && (rk_aiq_working_mode_t)sharedCom->working_mode < RK_AIQ_WORKING_MODE_ISP_HDR3) { LOGD("%sensor gain choose from second hdr frame for accm"); accm_proc_int->accm_sw_info.sensorGain = ae_int->ae_pre_res_rk.HdrExp[1].exp_real_params.analog_gain * ae_int->ae_pre_res_rk.HdrExp[1].exp_real_params.digital_gain * ae_int->ae_pre_res_rk.HdrExp[1].exp_real_params.isp_dgain; } else if((rk_aiq_working_mode_t)sharedCom->working_mode >= RK_AIQ_WORKING_MODE_ISP_HDR2 && (rk_aiq_working_mode_t)sharedCom->working_mode >= RK_AIQ_WORKING_MODE_ISP_HDR3) { LOGD("sensor gain choose from third hdr frame for accm"); accm_proc_int->accm_sw_info.sensorGain = ae_int->ae_pre_res_rk.HdrExp[2].exp_real_params.analog_gain * ae_int->ae_pre_res_rk.HdrExp[2].exp_real_params.digital_gain * ae_int->ae_pre_res_rk.HdrExp[2].exp_real_params.isp_dgain; } else { LOGE("working_mode (%d) is invaild ,fail to get sensor gain form AE module,use default value ", sharedCom->working_mode); } } else { LOGE("fail to get sensor gain form AE module,use default value "); } #else XCamVideoBuffer* xCamAwbProcRes = shared->res_comb.awb_proc_res; if (xCamAwbProcRes) { RkAiqAlgoProcResAwbInt* awb_res_int = (RkAiqAlgoProcResAwbInt*)xCamAwbProcRes->map(xCamAwbProcRes); RkAiqAlgoProcResAwb* awb_res = &awb_res_int->awb_proc_res_com; if(awb_res) { if(awb_res->awb_gain_algo.grgain < DIVMIN || awb_res->awb_gain_algo.gbgain < DIVMIN ) { LOGE("get wrong awb gain from AWB module ,use default value "); } else { accm_proc_int->accm_sw_info.awbGain[0] = awb_res->awb_gain_algo.rgain / awb_res->awb_gain_algo.grgain; accm_proc_int->accm_sw_info.awbGain[1] = awb_res->awb_gain_algo.bgain / awb_res->awb_gain_algo.gbgain; } accm_proc_int->accm_sw_info.awbIIRDampCoef = awb_res_int->awb_smooth_factor; accm_proc_int->accm_sw_info.varianceLuma = awb_res_int->varianceLuma; accm_proc_int->accm_sw_info.awbConverged = awb_res_int->awbConverged; } else { LOGE("fail to get awb gain form AWB module,use default value "); } } else { LOGE("fail to get awb gain form AWB module,use default value "); } RKAiqAecExpInfo_t *pCurExp = &shared->curExp; if(pCurExp) { if((rk_aiq_working_mode_t)sharedCom->working_mode == RK_AIQ_WORKING_MODE_NORMAL) { accm_proc_int->accm_sw_info.sensorGain = pCurExp->LinearExp.exp_real_params.analog_gain * pCurExp->LinearExp.exp_real_params.digital_gain * pCurExp->LinearExp.exp_real_params.isp_dgain; } else if((rk_aiq_working_mode_t)sharedCom->working_mode >= RK_AIQ_WORKING_MODE_ISP_HDR2 && (rk_aiq_working_mode_t)sharedCom->working_mode < RK_AIQ_WORKING_MODE_ISP_HDR3) { LOGD("sensor gain choose from second hdr frame for accm"); accm_proc_int->accm_sw_info.sensorGain = pCurExp->HdrExp[1].exp_real_params.analog_gain * pCurExp->HdrExp[1].exp_real_params.digital_gain * pCurExp->HdrExp[1].exp_real_params.isp_dgain; } else if((rk_aiq_working_mode_t)sharedCom->working_mode >= RK_AIQ_WORKING_MODE_ISP_HDR2 && (rk_aiq_working_mode_t)sharedCom->working_mode >= RK_AIQ_WORKING_MODE_ISP_HDR3) { LOGD("sensor gain choose from third hdr frame for accm"); accm_proc_int->accm_sw_info.sensorGain = pCurExp->HdrExp[2].exp_real_params.analog_gain * pCurExp->HdrExp[2].exp_real_params.digital_gain * pCurExp->HdrExp[2].exp_real_params.isp_dgain; } else { LOGE("working_mode (%d) is invaild ,fail to get sensor gain form AE module,use default value ", sharedCom->working_mode); } } else { LOGE("fail to get sensor gain form AE module,use default value "); } #endif RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->processing(mProcInParam, mProcOutParam); RKAIQCORE_CHECK_RET(ret, "accm algo processing failed"); comb->accm_proc_res = (RkAiqAlgoProcResAccm*)accm_proc_res_int; EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAccmHandleInt::postProcess() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoPostAccmInt* accm_post_int = (RkAiqAlgoPostAccmInt*)mPostInParam; RkAiqAlgoPostResAccmInt* accm_post_res_int = (RkAiqAlgoPostResAccmInt*)mPostOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqPostResComb* comb = &shared->postResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAccmHandle::postProcess(); if (ret) { comb->accm_post_res = NULL; RKAIQCORE_CHECK_RET(ret, "accm handle postProcess failed"); return ret; } comb->accm_post_res = NULL; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->post_process(mPostInParam, mPostOutParam); RKAIQCORE_CHECK_RET(ret, "accm algo post_process failed"); // set result to mAiqCore comb->accm_post_res = (RkAiqAlgoPostResAccm*)accm_post_res_int ; EXIT_ANALYZER_FUNCTION(); return ret; } void RkAiqAcgcHandleInt::init() { ENTER_ANALYZER_FUNCTION(); RkAiqAcgcHandle::deInit(); mConfig = (RkAiqAlgoCom*)(new RkAiqAlgoConfigAcgcInt()); mPreInParam = (RkAiqAlgoCom*)(new RkAiqAlgoPreAcgcInt()); mPreOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoPreResAcgcInt()); mProcInParam = (RkAiqAlgoCom*)(new RkAiqAlgoProcAcgcInt()); mProcOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoProcResAcgcInt()); mPostInParam = (RkAiqAlgoCom*)(new RkAiqAlgoPostAcgcInt()); mPostOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoPostResAcgcInt()); EXIT_ANALYZER_FUNCTION(); } XCamReturn RkAiqAcgcHandleInt::prepare() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; ret = RkAiqAcgcHandle::prepare(); RKAIQCORE_CHECK_RET(ret, "acgc handle prepare failed"); RkAiqAlgoConfigAcgcInt* acgc_config_int = (RkAiqAlgoConfigAcgcInt*)mConfig; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->prepare(mConfig); RKAIQCORE_CHECK_RET(ret, "acgc algo prepare failed"); EXIT_ANALYZER_FUNCTION(); return XCAM_RETURN_NO_ERROR; } XCamReturn RkAiqAcgcHandleInt::preProcess() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoPreAcgcInt* acgc_pre_int = (RkAiqAlgoPreAcgcInt*)mPreInParam; RkAiqAlgoPreResAcgcInt* acgc_pre_res_int = (RkAiqAlgoPreResAcgcInt*)mPreOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqPreResComb* comb = &shared->preResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAcgcHandle::preProcess(); if (ret) { comb->acgc_pre_res = NULL; RKAIQCORE_CHECK_RET(ret, "acgc handle preProcess failed"); } comb->acgc_pre_res = NULL; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->pre_process(mPreInParam, mPreOutParam); RKAIQCORE_CHECK_RET(ret, "acgc algo pre_process failed"); // set result to mAiqCore comb->acgc_pre_res = (RkAiqAlgoPreResAcgc*)acgc_pre_res_int; EXIT_ANALYZER_FUNCTION(); return XCAM_RETURN_NO_ERROR; } XCamReturn RkAiqAcgcHandleInt::processing() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoProcAcgcInt* acgc_proc_int = (RkAiqAlgoProcAcgcInt*)mProcInParam; RkAiqAlgoProcResAcgcInt* acgc_proc_res_int = (RkAiqAlgoProcResAcgcInt*)mProcOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqProcResComb* comb = &shared->procResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAcgcHandle::processing(); if (ret) { comb->acgc_proc_res = NULL; RKAIQCORE_CHECK_RET(ret, "acgc handle processing failed"); } comb->acgc_proc_res = NULL; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->processing(mProcInParam, mProcOutParam); RKAIQCORE_CHECK_RET(ret, "acgc algo processing failed"); comb->acgc_proc_res = (RkAiqAlgoProcResAcgc*)acgc_proc_res_int; EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAcgcHandleInt::postProcess() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoPostAcgcInt* acgc_post_int = (RkAiqAlgoPostAcgcInt*)mPostInParam; RkAiqAlgoPostResAcgcInt* acgc_post_res_int = (RkAiqAlgoPostResAcgcInt*)mPostOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqPostResComb* comb = &shared->postResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAcgcHandle::postProcess(); if (ret) { comb->acgc_post_res = NULL; RKAIQCORE_CHECK_RET(ret, "acgc handle postProcess failed"); return ret; } comb->acgc_post_res = NULL; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->post_process(mPostInParam, mPostOutParam); RKAIQCORE_CHECK_RET(ret, "acgc algo post_process failed"); // set result to mAiqCore comb->acgc_post_res = (RkAiqAlgoPostResAcgc*)acgc_post_res_int ; EXIT_ANALYZER_FUNCTION(); return ret; } void RkAiqAdebayerHandleInt::init() { ENTER_ANALYZER_FUNCTION(); RkAiqAdebayerHandle::deInit(); mConfig = (RkAiqAlgoCom*)(new RkAiqAlgoConfigAdebayerInt()); mPreInParam = (RkAiqAlgoCom*)(new RkAiqAlgoPreAdebayerInt()); mPreOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoPreResAdebayerInt()); mProcInParam = (RkAiqAlgoCom*)(new RkAiqAlgoProcAdebayerInt()); mProcOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoProcResAdebayerInt()); mPostInParam = (RkAiqAlgoCom*)(new RkAiqAlgoPostAdebayerInt()); mPostOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoPostResAdebayerInt()); EXIT_ANALYZER_FUNCTION(); } XCamReturn RkAiqAdebayerHandleInt::updateConfig(bool needSync) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; if (needSync) mCfgMutex.lock(); // if something changed if (updateAtt) { mCurAtt = mNewAtt; updateAtt = false; rk_aiq_uapi_adebayer_SetAttrib(mAlgoCtx, mCurAtt, false); sendSignal(); } if (needSync) mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAdebayerHandleInt::setAttrib(adebayer_attrib_t att) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; mCfgMutex.lock(); //TODO // check if there is different between att & mCurAtt // if something changed, set att to mNewAtt, and // the new params will be effective later when updateConfig // called by RkAiqCore if (0 != memcmp(&mCurAtt, &att, sizeof(adebayer_attrib_t))) { mNewAtt = att; updateAtt = true; waitSignal(); } mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAdebayerHandleInt::getAttrib(adebayer_attrib_t *att) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; rk_aiq_uapi_adebayer_GetAttrib(mAlgoCtx, att); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAdebayerHandleInt::prepare() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; ret = RkAiqAdebayerHandle::prepare(); RKAIQCORE_CHECK_RET(ret, "adebayer handle prepare failed"); RkAiqAlgoConfigAdebayerInt* adebayer_config_int = (RkAiqAlgoConfigAdebayerInt*)mConfig; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->prepare(mConfig); RKAIQCORE_CHECK_RET(ret, "adebayer algo prepare failed"); EXIT_ANALYZER_FUNCTION(); return XCAM_RETURN_NO_ERROR; } XCamReturn RkAiqAdebayerHandleInt::preProcess() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoPreAdebayerInt* adebayer_pre_int = (RkAiqAlgoPreAdebayerInt*)mPreInParam; RkAiqAlgoPreResAdebayerInt* adebayer_pre_res_int = (RkAiqAlgoPreResAdebayerInt*)mPreOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqPreResComb* comb = &shared->preResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAdebayerHandle::preProcess(); if (ret) { comb->adebayer_pre_res = NULL; RKAIQCORE_CHECK_RET(ret, "adebayer handle preProcess failed"); } comb->adebayer_pre_res = NULL; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->pre_process(mPreInParam, mPreOutParam); RKAIQCORE_CHECK_RET(ret, "adebayer algo pre_process failed"); // set result to mAiqCore comb->adebayer_pre_res = (RkAiqAlgoPreResAdebayer*)adebayer_pre_res_int; EXIT_ANALYZER_FUNCTION(); return XCAM_RETURN_NO_ERROR; } XCamReturn RkAiqAdebayerHandleInt::processing() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoProcAdebayerInt* adebayer_proc_int = (RkAiqAlgoProcAdebayerInt*)mProcInParam; RkAiqAlgoProcResAdebayerInt* adebayer_proc_res_int = (RkAiqAlgoProcResAdebayerInt*)mProcOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqProcResComb* comb = &shared->procResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAdebayerHandle::processing(); if (ret) { comb->adebayer_proc_res = NULL; RKAIQCORE_CHECK_RET(ret, "adebayer handle processing failed"); } comb->adebayer_proc_res = NULL; // TODO: fill procParam adebayer_proc_int->hdr_mode = sharedCom->working_mode; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->processing(mProcInParam, mProcOutParam); RKAIQCORE_CHECK_RET(ret, "adebayer algo processing failed"); comb->adebayer_proc_res = (RkAiqAlgoProcResAdebayer*)adebayer_proc_res_int; EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAdebayerHandleInt::postProcess() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoPostAdebayerInt* adebayer_post_int = (RkAiqAlgoPostAdebayerInt*)mPostInParam; RkAiqAlgoPostResAdebayerInt* adebayer_post_res_int = (RkAiqAlgoPostResAdebayerInt*)mPostOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqPostResComb* comb = &shared->postResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAdebayerHandle::postProcess(); if (ret) { comb->adebayer_post_res = NULL; RKAIQCORE_CHECK_RET(ret, "adebayer handle postProcess failed"); return ret; } comb->adebayer_post_res = NULL; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->post_process(mPostInParam, mPostOutParam); RKAIQCORE_CHECK_RET(ret, "adebayer algo post_process failed"); // set result to mAiqCore comb->adebayer_post_res = (RkAiqAlgoPostResAdebayer*)adebayer_post_res_int ; EXIT_ANALYZER_FUNCTION(); return ret; } void RkAiqAdpccHandleInt::init() { ENTER_ANALYZER_FUNCTION(); RkAiqAdpccHandle::deInit(); mConfig = (RkAiqAlgoCom*)(new RkAiqAlgoConfigAdpccInt()); mPreInParam = (RkAiqAlgoCom*)(new RkAiqAlgoPreAdpccInt()); mPreOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoPreResAdpccInt()); mProcInParam = (RkAiqAlgoCom*)(new RkAiqAlgoProcAdpccInt()); mProcOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoProcResAdpccInt()); mPostInParam = (RkAiqAlgoCom*)(new RkAiqAlgoPostAdpccInt()); mPostOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoPostResAdpccInt()); EXIT_ANALYZER_FUNCTION(); } XCamReturn RkAiqAdpccHandleInt::updateConfig(bool needSync) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; if (needSync) mCfgMutex.lock(); // if something changed if (updateAtt) { mCurAtt = mNewAtt; updateAtt = false; // TODO rk_aiq_uapi_adpcc_SetAttrib(mAlgoCtx, &mCurAtt, false); sendSignal(); } if (needSync) mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAdpccHandleInt::setAttrib(rk_aiq_dpcc_attrib_V20_t *att) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; mCfgMutex.lock(); //TODO // check if there is different between att & mCurAtt // if something changed, set att to mNewAtt, and // the new params will be effective later when updateConfig // called by RkAiqCore // if something changed if (0 != memcmp(&mCurAtt, att, sizeof(rk_aiq_dpcc_attrib_V20_t))) { mNewAtt = *att; updateAtt = true; waitSignal(); } mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAdpccHandleInt::getAttrib(rk_aiq_dpcc_attrib_V20_t *att) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; rk_aiq_uapi_adpcc_GetAttrib(mAlgoCtx, att); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAdpccHandleInt::prepare() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; ret = RkAiqAdpccHandle::prepare(); RKAIQCORE_CHECK_RET(ret, "adpcc handle prepare failed"); RkAiqAlgoConfigAdpccInt* adpcc_config_int = (RkAiqAlgoConfigAdpccInt*)mConfig; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->prepare(mConfig); RKAIQCORE_CHECK_RET(ret, "adpcc algo prepare failed"); EXIT_ANALYZER_FUNCTION(); return XCAM_RETURN_NO_ERROR; } XCamReturn RkAiqAdpccHandleInt::preProcess() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoPreAdpccInt* adpcc_pre_int = (RkAiqAlgoPreAdpccInt*)mPreInParam; RkAiqAlgoPreResAdpccInt* adpcc_pre_res_int = (RkAiqAlgoPreResAdpccInt*)mPreOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqPreResComb* comb = &shared->preResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAdpccHandle::preProcess(); if (ret) { comb->adpcc_pre_res = NULL; RKAIQCORE_CHECK_RET(ret, "adpcc handle preProcess failed"); } comb->adpcc_pre_res = NULL; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->pre_process(mPreInParam, mPreOutParam); RKAIQCORE_CHECK_RET(ret, "adpcc algo pre_process failed"); // set result to mAiqCore comb->adpcc_pre_res = (RkAiqAlgoPreResAdpcc*)adpcc_pre_res_int; EXIT_ANALYZER_FUNCTION(); return XCAM_RETURN_NO_ERROR; } XCamReturn RkAiqAdpccHandleInt::processing() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoProcAdpccInt* adpcc_proc_int = (RkAiqAlgoProcAdpccInt*)mProcInParam; RkAiqAlgoProcResAdpccInt* adpcc_proc_res_int = (RkAiqAlgoProcResAdpccInt*)mProcOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqProcResComb* comb = &shared->procResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAdpccHandle::processing(); if (ret) { comb->adpcc_proc_res = NULL; RKAIQCORE_CHECK_RET(ret, "adpcc handle processing failed"); } comb->adpcc_proc_res = NULL; // TODO: fill procParam adpcc_proc_int->iso = sharedCom->iso; adpcc_proc_int->hdr_mode = sharedCom->working_mode; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->processing(mProcInParam, mProcOutParam); RKAIQCORE_CHECK_RET(ret, "adpcc algo processing failed"); comb->adpcc_proc_res = (RkAiqAlgoProcResAdpcc*)adpcc_proc_res_int; EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAdpccHandleInt::postProcess() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoPostAsdInt* asd_post_int = (RkAiqAlgoPostAsdInt*)mPostInParam; RkAiqAlgoPostResAsdInt* asd_post_res_int = (RkAiqAlgoPostResAsdInt*)mPostOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqPostResComb* comb = &shared->postResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAdpccHandle::postProcess(); if (ret) { comb->asd_post_res = NULL; RKAIQCORE_CHECK_RET(ret, "asd handle postProcess failed"); return ret; } comb->asd_post_res = NULL; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->post_process(mPostInParam, mPostOutParam); RKAIQCORE_CHECK_RET(ret, "asd algo post_process failed"); // set result to mAiqCore comb->asd_post_res = (RkAiqAlgoPostResAsd*)asd_post_res_int ; EXIT_ANALYZER_FUNCTION(); return ret; } void RkAiqAfecHandleInt::init() { ENTER_ANALYZER_FUNCTION(); RkAiqAfecHandle::deInit(); mConfig = (RkAiqAlgoCom*)(new RkAiqAlgoConfigAfecInt()); mPreInParam = (RkAiqAlgoCom*)(new RkAiqAlgoPreAfecInt()); mPreOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoPreResAfecInt()); mProcInParam = (RkAiqAlgoCom*)(new RkAiqAlgoProcAfecInt()); mProcOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoProcResAfecInt()); mPostInParam = (RkAiqAlgoCom*)(new RkAiqAlgoPostAfecInt()); mPostOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoPostResAfecInt()); EXIT_ANALYZER_FUNCTION(); } XCamReturn RkAiqAfecHandleInt::prepare() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; ret = RkAiqAfecHandle::prepare(); RKAIQCORE_CHECK_RET(ret, "afec handle prepare failed"); RkAiqAlgoConfigAfecInt* afec_config_int = (RkAiqAlgoConfigAfecInt*)mConfig; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqIspStats* ispStats = shared->ispStats; /* memcpy(&afec_config_int->afec_calib_cfg, &shared->calib->afec, sizeof(CalibDb_FEC_t)); */ afec_config_int->resource_path = sharedCom->resourcePath; afec_config_int->mem_ops_ptr = mAiqCore->mShareMemOps; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->prepare(mConfig); RKAIQCORE_CHECK_RET(ret, "afec algo prepare failed"); EXIT_ANALYZER_FUNCTION(); return XCAM_RETURN_NO_ERROR; } XCamReturn RkAiqAfecHandleInt::preProcess() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoPreAfecInt* afec_pre_int = (RkAiqAlgoPreAfecInt*)mPreInParam; RkAiqAlgoPreResAfecInt* afec_pre_res_int = (RkAiqAlgoPreResAfecInt*)mPreOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqPreResComb* comb = &shared->preResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAfecHandle::preProcess(); if (ret) { comb->afec_pre_res = NULL; RKAIQCORE_CHECK_RET(ret, "afec handle preProcess failed"); } comb->afec_pre_res = NULL; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->pre_process(mPreInParam, mPreOutParam); RKAIQCORE_CHECK_RET(ret, "afec algo pre_process failed"); // set result to mAiqCore comb->afec_pre_res = (RkAiqAlgoPreResAfec*)afec_pre_res_int; EXIT_ANALYZER_FUNCTION(); return XCAM_RETURN_NO_ERROR; } XCamReturn RkAiqAfecHandleInt::processing() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoProcAfecInt* afec_proc_int = (RkAiqAlgoProcAfecInt*)mProcInParam; RkAiqAlgoProcResAfecInt* afec_proc_res_int = (RkAiqAlgoProcResAfecInt*)mProcOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqProcResComb* comb = &shared->procResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAfecHandle::processing(); if (ret) { comb->afec_proc_res = NULL; RKAIQCORE_CHECK_RET(ret, "afec handle processing failed"); } comb->afec_proc_res = NULL; //fill procParam RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->processing(mProcInParam, mProcOutParam); RKAIQCORE_CHECK_RET(ret, "afec algo processing failed"); comb->afec_proc_res = (RkAiqAlgoProcResAfec*)afec_proc_res_int; EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAfecHandleInt::postProcess() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoPostAfecInt* afec_post_int = (RkAiqAlgoPostAfecInt*)mPostInParam; RkAiqAlgoPostResAfecInt* afec_post_res_int = (RkAiqAlgoPostResAfecInt*)mPostOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqPostResComb* comb = &shared->postResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAfecHandle::postProcess(); if (ret) { comb->afec_post_res = NULL; RKAIQCORE_CHECK_RET(ret, "afec handle postProcess failed"); return ret; } comb->afec_post_res = NULL; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->post_process(mPostInParam, mPostOutParam); RKAIQCORE_CHECK_RET(ret, "afec algo post_process failed"); // set result to mAiqCore comb->afec_post_res = (RkAiqAlgoPostResAfec*)afec_post_res_int ; EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAfecHandleInt::updateConfig(bool needSync) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; if (needSync) mCfgMutex.lock(); // if something changed if (updateAtt) { mCurAtt = mNewAtt; updateAtt = false; // TODO rk_aiq_uapi_afec_SetAttrib(mAlgoCtx, mCurAtt, false); sendSignal(); } if (needSync) mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAfecHandleInt::setAttrib(rk_aiq_fec_attrib_t att) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; mCfgMutex.lock(); //TODO // check if there is different between att & mCurAtt // if something changed, set att to mNewAtt, and // the new params will be effective later when updateConfig // called by RkAiqCore // if something changed if (0 != memcmp(&mCurAtt, &att, sizeof(rk_aiq_fec_attrib_t))) { mNewAtt = att; updateAtt = true; waitSignal(); } mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAfecHandleInt::getAttrib(rk_aiq_fec_attrib_t *att) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; rk_aiq_uapi_afec_GetAttrib(mAlgoCtx, att); EXIT_ANALYZER_FUNCTION(); return ret; } void RkAiqAgammaHandleInt::init() { ENTER_ANALYZER_FUNCTION(); RkAiqAgammaHandle::deInit(); mConfig = (RkAiqAlgoCom*)(new RkAiqAlgoConfigAgammaInt()); mPreInParam = (RkAiqAlgoCom*)(new RkAiqAlgoPreAgammaInt()); mPreOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoPreResAgammaInt()); mProcInParam = (RkAiqAlgoCom*)(new RkAiqAlgoProcAgammaInt()); mProcOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoProcResAgammaInt()); mPostInParam = (RkAiqAlgoCom*)(new RkAiqAlgoPostAgammaInt()); mPostOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoPostResAgammaInt()); EXIT_ANALYZER_FUNCTION(); } XCamReturn RkAiqAgammaHandleInt::updateConfig(bool needSync) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; if (needSync) mCfgMutex.lock(); // if something changed if (updateAtt) { mCurAtt = mNewAtt; updateAtt = false; // TODO rk_aiq_uapi_agamma_SetAttrib(mAlgoCtx, mCurAtt, false); waitSignal(); } if (needSync) mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAgammaHandleInt::setAttrib(rk_aiq_gamma_attrib_V2_t att) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; mCfgMutex.lock(); //TODO // check if there is different between att & mCurAtt // if something changed, set att to mNewAtt, and // the new params will be effective later when updateConfig // called by RkAiqCore // if something changed if (0 != memcmp(&mCurAtt, &att, sizeof(rk_aiq_gamma_attrib_V2_t))) { mNewAtt = att; updateAtt = true; sendSignal(); } mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAgammaHandleInt::getAttrib(rk_aiq_gamma_attrib_V2_t *att) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; rk_aiq_uapi_agamma_GetAttrib(mAlgoCtx, att); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAgammaHandleInt::prepare() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; ret = RkAiqAgammaHandle::prepare(); RKAIQCORE_CHECK_RET(ret, "agamma handle prepare failed"); RkAiqAlgoConfigAgammaInt* agamma_config_int = (RkAiqAlgoConfigAgammaInt*)mConfig; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqIspStats* ispStats = shared->ispStats; agamma_config_int->calib = sharedCom->calib; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->prepare(mConfig); RKAIQCORE_CHECK_RET(ret, "agamma algo prepare failed"); EXIT_ANALYZER_FUNCTION(); return XCAM_RETURN_NO_ERROR; } XCamReturn RkAiqAgammaHandleInt::preProcess() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoPreAgammaInt* agamma_pre_int = (RkAiqAlgoPreAgammaInt*)mPreInParam; RkAiqAlgoPreResAgammaInt* agamma_pre_res_int = (RkAiqAlgoPreResAgammaInt*)mPreOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqPreResComb* comb = &shared->preResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAgammaHandle::preProcess(); if (ret) { comb->agamma_pre_res = NULL; RKAIQCORE_CHECK_RET(ret, "agamma handle preProcess failed"); } comb->agamma_pre_res = NULL; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->pre_process(mPreInParam, mPreOutParam); RKAIQCORE_CHECK_RET(ret, "agamma algo pre_process failed"); // set result to mAiqCore comb->agamma_pre_res = (RkAiqAlgoPreResAgamma*)agamma_pre_res_int; EXIT_ANALYZER_FUNCTION(); return XCAM_RETURN_NO_ERROR; } XCamReturn RkAiqAgammaHandleInt::processing() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoProcAgammaInt* agamma_proc_int = (RkAiqAlgoProcAgammaInt*)mProcInParam; RkAiqAlgoProcResAgammaInt* agamma_proc_res_int = (RkAiqAlgoProcResAgammaInt*)mProcOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqProcResComb* comb = &shared->procResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAgammaHandle::processing(); if (ret) { comb->agamma_proc_res = NULL; RKAIQCORE_CHECK_RET(ret, "agamma handle processing failed"); } comb->agamma_proc_res = NULL; agamma_proc_int->calib = sharedCom->calib; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->processing(mProcInParam, mProcOutParam); RKAIQCORE_CHECK_RET(ret, "agamma algo processing failed"); comb->agamma_proc_res = (RkAiqAlgoProcResAgamma*)agamma_proc_res_int; EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAgammaHandleInt::postProcess() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoPostAgammaInt* agamma_post_int = (RkAiqAlgoPostAgammaInt*)mPostInParam; RkAiqAlgoPostResAgammaInt* agamma_post_res_int = (RkAiqAlgoPostResAgammaInt*)mPostOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqPostResComb* comb = &shared->postResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAgammaHandle::postProcess(); if (ret) { comb->agamma_post_res = NULL; RKAIQCORE_CHECK_RET(ret, "agamma handle postProcess failed"); return ret; } comb->agamma_post_res = NULL; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->post_process(mPostInParam, mPostOutParam); RKAIQCORE_CHECK_RET(ret, "agamma algo post_process failed"); // set result to mAiqCore comb->agamma_post_res = (RkAiqAlgoPostResAgamma*)agamma_post_res_int ; EXIT_ANALYZER_FUNCTION(); return ret; } void RkAiqAdegammaHandleInt::init() { ENTER_ANALYZER_FUNCTION(); RkAiqAdegammaHandle::deInit(); mConfig = (RkAiqAlgoCom*)(new RkAiqAlgoConfigAdegammaInt()); mPreInParam = (RkAiqAlgoCom*)(new RkAiqAlgoPreAdegammaInt()); mPreOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoPreResAdegammaInt()); mProcInParam = (RkAiqAlgoCom*)(new RkAiqAlgoProcAdegammaInt()); mProcOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoProcResAdegammaInt()); mPostInParam = (RkAiqAlgoCom*)(new RkAiqAlgoPostAdegammaInt()); mPostOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoPostResAdegammaInt()); EXIT_ANALYZER_FUNCTION(); } XCamReturn RkAiqAdegammaHandleInt::updateConfig(bool needSync) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; if (needSync) mCfgMutex.lock(); // if something changed if (updateAtt) { mCurAtt = mNewAtt; updateAtt = false; // TODO rk_aiq_uapi_adegamma_SetAttrib(mAlgoCtx, mCurAtt, false); waitSignal(); } if (needSync) mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAdegammaHandleInt::setAttrib(rk_aiq_degamma_attrib_t att) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; mCfgMutex.lock(); //TODO // check if there is different between att & mCurAtt // if something changed, set att to mNewAtt, and // the new params will be effective later when updateConfig // called by RkAiqCore // if something changed if (0 != memcmp(&mCurAtt, &att, sizeof(rk_aiq_degamma_attrib_t))) { mNewAtt = att; updateAtt = true; sendSignal(); } mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAdegammaHandleInt::getAttrib(rk_aiq_degamma_attrib_t *att) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; rk_aiq_uapi_adegamma_GetAttrib(mAlgoCtx, att); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAdegammaHandleInt::prepare() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; ret = RkAiqAdegammaHandle::prepare(); RKAIQCORE_CHECK_RET(ret, "adegamma handle prepare failed"); RkAiqAlgoConfigAdegammaInt* adegamma_config_int = (RkAiqAlgoConfigAdegammaInt*)mConfig; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; adegamma_config_int->calib = sharedCom->calib; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->prepare(mConfig); RKAIQCORE_CHECK_RET(ret, "adegamma algo prepare failed"); EXIT_ANALYZER_FUNCTION(); return XCAM_RETURN_NO_ERROR; } XCamReturn RkAiqAdegammaHandleInt::preProcess() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoPreAdegammaInt* adegamma_pre_int = (RkAiqAlgoPreAdegammaInt*)mPreInParam; RkAiqAlgoPreResAdegammaInt* adegamma_pre_res_int = (RkAiqAlgoPreResAdegammaInt*)mPreOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqPreResComb* comb = &shared->preResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAdegammaHandle::preProcess(); if (ret) { comb->adegamma_pre_res = NULL; RKAIQCORE_CHECK_RET(ret, "adegamma handle preProcess failed"); } comb->adegamma_pre_res = NULL; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->pre_process(mPreInParam, mPreOutParam); RKAIQCORE_CHECK_RET(ret, "adegamma algo pre_process failed"); // set result to mAiqCore comb->adegamma_pre_res = (RkAiqAlgoPreResAdegamma*)adegamma_pre_res_int; EXIT_ANALYZER_FUNCTION(); return XCAM_RETURN_NO_ERROR; } XCamReturn RkAiqAdegammaHandleInt::processing() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoProcAdegammaInt* adegamma_proc_int = (RkAiqAlgoProcAdegammaInt*)mProcInParam; RkAiqAlgoProcResAdegammaInt* adegamma_proc_res_int = (RkAiqAlgoProcResAdegammaInt*)mProcOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqProcResComb* comb = &shared->procResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAdegammaHandle::processing(); if (ret) { comb->adegamma_proc_res = NULL; RKAIQCORE_CHECK_RET(ret, "adegamma handle processing failed"); } comb->adegamma_proc_res = NULL; adegamma_proc_int->calib = sharedCom->calib; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->processing(mProcInParam, mProcOutParam); RKAIQCORE_CHECK_RET(ret, "adegamma algo processing failed"); comb->adegamma_proc_res = (RkAiqAlgoProcResAdegamma*)adegamma_proc_res_int; EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAdegammaHandleInt::postProcess() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoPostAdegammaInt* adegamma_post_int = (RkAiqAlgoPostAdegammaInt*)mPostInParam; RkAiqAlgoPostResAdegammaInt* adegamma_post_res_int = (RkAiqAlgoPostResAdegammaInt*)mPostOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqPostResComb* comb = &shared->postResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAdegammaHandle::postProcess(); if (ret) { comb->adegamma_post_res = NULL; RKAIQCORE_CHECK_RET(ret, "adegamma handle postProcess failed"); return ret; } comb->adegamma_post_res = NULL; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->post_process(mPostInParam, mPostOutParam); RKAIQCORE_CHECK_RET(ret, "agamma algo post_process failed"); // set result to mAiqCore comb->adegamma_post_res = (RkAiqAlgoPostResAdegamma*)adegamma_post_res_int ; EXIT_ANALYZER_FUNCTION(); return ret; } void RkAiqAgicHandleInt::init() { ENTER_ANALYZER_FUNCTION(); RkAiqAgicHandle::deInit(); mConfig = (RkAiqAlgoCom*)(new RkAiqAlgoConfigAgicInt()); mPreInParam = (RkAiqAlgoCom*)(new RkAiqAlgoPreAgicInt()); mPreOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoPreResAgicInt()); mProcInParam = (RkAiqAlgoCom*)(new RkAiqAlgoProcAgicInt()); mProcOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoProcResAgicInt()); mPostInParam = (RkAiqAlgoCom*)(new RkAiqAlgoPostAgicInt()); mPostOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoPostResAgicInt()); EXIT_ANALYZER_FUNCTION(); } XCamReturn RkAiqAgicHandleInt::updateConfig(bool needSync) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; if (needSync) mCfgMutex.lock(); // if something changed if (updateAtt) { mCurAtt = mNewAtt; updateAtt = false; rk_aiq_uapi_agic_SetAttrib(mAlgoCtx, mCurAtt, false); sendSignal(); } if (needSync) mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAgicHandleInt::setAttrib(agic_attrib_t att) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; mCfgMutex.lock(); //TODO // check if there is different between att & mCurAtt // if something changed, set att to mNewAtt, and // the new params will be effective later when updateConfig // called by RkAiqCore if (0 != memcmp(&mCurAtt, &att, sizeof(agic_attrib_t))) { mNewAtt = att; updateAtt = true; waitSignal(); } mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAgicHandleInt::getAttrib(agic_attrib_t *att) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; rk_aiq_uapi_agic_GetAttrib(mAlgoCtx, att); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAgicHandleInt::prepare() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; ret = RkAiqAgicHandle::prepare(); RKAIQCORE_CHECK_RET(ret, "agic handle prepare failed"); RkAiqAlgoConfigAgicInt* agic_config_int = (RkAiqAlgoConfigAgicInt*)mConfig; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->prepare(mConfig); RKAIQCORE_CHECK_RET(ret, "agic algo prepare failed"); EXIT_ANALYZER_FUNCTION(); return XCAM_RETURN_NO_ERROR; } XCamReturn RkAiqAgicHandleInt::preProcess() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoPreAgicInt* agic_pre_int = (RkAiqAlgoPreAgicInt*)mPreInParam; RkAiqAlgoPreResAgicInt* agic_pre_res_int = (RkAiqAlgoPreResAgicInt*)mPreOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqPreResComb* comb = &shared->preResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAgicHandle::preProcess(); if (ret) { comb->agic_pre_res = NULL; RKAIQCORE_CHECK_RET(ret, "agic handle preProcess failed"); } comb->agic_pre_res = NULL; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->pre_process(mPreInParam, mPreOutParam); RKAIQCORE_CHECK_RET(ret, "agic algo pre_process failed"); // set result to mAiqCore comb->agic_pre_res = (RkAiqAlgoPreResAgic*)agic_pre_res_int; EXIT_ANALYZER_FUNCTION(); return XCAM_RETURN_NO_ERROR; } XCamReturn RkAiqAgicHandleInt::processing() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoProcAgicInt* agic_proc_int = (RkAiqAlgoProcAgicInt*)mProcInParam; RkAiqAlgoProcResAgicInt* agic_proc_res_int = (RkAiqAlgoProcResAgicInt*)mProcOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqProcResComb* comb = &shared->procResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAgicHandle::processing(); if (ret) { comb->agic_proc_res = NULL; RKAIQCORE_CHECK_RET(ret, "agic handle processing failed"); } comb->agic_proc_res = NULL; agic_proc_int->hdr_mode = sharedCom->working_mode; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->processing(mProcInParam, mProcOutParam); RKAIQCORE_CHECK_RET(ret, "agic algo processing failed"); comb->agic_proc_res = (RkAiqAlgoProcResAgic*)agic_proc_res_int; EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAgicHandleInt::postProcess() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoPostAgicInt* agic_post_int = (RkAiqAlgoPostAgicInt*)mPostInParam; RkAiqAlgoPostResAgicInt* agic_post_res_int = (RkAiqAlgoPostResAgicInt*)mPostOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqPostResComb* comb = &shared->postResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAgicHandle::postProcess(); if (ret) { comb->agic_post_res = NULL; RKAIQCORE_CHECK_RET(ret, "agic handle postProcess failed"); return ret; } comb->agic_post_res = NULL; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->post_process(mPostInParam, mPostOutParam); RKAIQCORE_CHECK_RET(ret, "agic algo post_process failed"); // set result to mAiqCore comb->agic_post_res = (RkAiqAlgoPostResAgic*)agic_post_res_int ; EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAieHandleInt::updateConfig(bool needSync) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; if (needSync) mCfgMutex.lock(); // if something changed if (updateAtt) { mCurAtt = mNewAtt; updateAtt = false; rk_aiq_uapi_aie_SetAttrib(mAlgoCtx, mCurAtt, false); sendSignal(); } if (needSync) mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAieHandleInt::setAttrib(aie_attrib_t att) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; mCfgMutex.lock(); // check if there is different between att & mCurAtt // if something changed, set att to mNewAtt, and // the new params will be effective later when updateConfig // called by RkAiqCore if (0 != memcmp(&mCurAtt, &att, sizeof(aie_attrib_t))) { mNewAtt = att; updateAtt = true; waitSignal(); } mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAieHandleInt::getAttrib(aie_attrib_t *att) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; rk_aiq_uapi_aie_GetAttrib(mAlgoCtx, att); EXIT_ANALYZER_FUNCTION(); return ret; } void RkAiqAieHandleInt::init() { ENTER_ANALYZER_FUNCTION(); RkAiqAieHandle::deInit(); mConfig = (RkAiqAlgoCom*)(new RkAiqAlgoConfigAieInt()); mPreInParam = (RkAiqAlgoCom*)(new RkAiqAlgoPreAieInt()); mPreOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoPreResAieInt()); mProcInParam = (RkAiqAlgoCom*)(new RkAiqAlgoProcAieInt()); mProcOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoProcResAieInt()); mPostInParam = (RkAiqAlgoCom*)(new RkAiqAlgoPostAieInt()); mPostOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoPostResAieInt()); EXIT_ANALYZER_FUNCTION(); } XCamReturn RkAiqAieHandleInt::prepare() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; ret = RkAiqAieHandle::prepare(); RKAIQCORE_CHECK_RET(ret, "aie handle prepare failed"); RkAiqAlgoConfigAieInt* aie_config_int = (RkAiqAlgoConfigAieInt*)mConfig; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->prepare(mConfig); RKAIQCORE_CHECK_RET(ret, "aie algo prepare failed"); EXIT_ANALYZER_FUNCTION(); return XCAM_RETURN_NO_ERROR; } XCamReturn RkAiqAieHandleInt::preProcess() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoPreAieInt* aie_pre_int = (RkAiqAlgoPreAieInt*)mPreInParam; RkAiqAlgoPreResAieInt* aie_pre_res_int = (RkAiqAlgoPreResAieInt*)mPreOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqPreResComb* comb = &shared->preResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAieHandle::preProcess(); if (ret) { comb->aie_pre_res = NULL; RKAIQCORE_CHECK_RET(ret, "aie handle preProcess failed"); } comb->aie_pre_res = NULL; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->pre_process(mPreInParam, mPreOutParam); RKAIQCORE_CHECK_RET(ret, "aie algo pre_process failed"); // set result to mAiqCore comb->aie_pre_res = (RkAiqAlgoPreResAie*)aie_pre_res_int; EXIT_ANALYZER_FUNCTION(); return XCAM_RETURN_NO_ERROR; } XCamReturn RkAiqAieHandleInt::processing() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoProcAieInt* aie_proc_int = (RkAiqAlgoProcAieInt*)mProcInParam; RkAiqAlgoProcResAieInt* aie_proc_res_int = (RkAiqAlgoProcResAieInt*)mProcOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqProcResComb* comb = &shared->procResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAieHandle::processing(); if (ret) { comb->aie_proc_res = NULL; RKAIQCORE_CHECK_RET(ret, "aie handle processing failed"); } comb->aie_proc_res = NULL; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->processing(mProcInParam, mProcOutParam); RKAIQCORE_CHECK_RET(ret, "aie algo processing failed"); comb->aie_proc_res = (RkAiqAlgoProcResAie*)aie_proc_res_int; EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAieHandleInt::postProcess() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoPostAieInt* aie_post_int = (RkAiqAlgoPostAieInt*)mPostInParam; RkAiqAlgoPostResAieInt* aie_post_res_int = (RkAiqAlgoPostResAieInt*)mPostOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqPostResComb* comb = &shared->postResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAieHandle::postProcess(); if (ret) { comb->aie_post_res = NULL; RKAIQCORE_CHECK_RET(ret, "aie handle postProcess failed"); return ret; } comb->aie_post_res = NULL; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->post_process(mPostInParam, mPostOutParam); RKAIQCORE_CHECK_RET(ret, "aie algo post_process failed"); // set result to mAiqCore comb->aie_post_res = (RkAiqAlgoPostResAie*)aie_post_res_int ; EXIT_ANALYZER_FUNCTION(); return ret; } void RkAiqAldchHandleInt::init() { ENTER_ANALYZER_FUNCTION(); RkAiqAldchHandle::deInit(); mConfig = (RkAiqAlgoCom*)(new RkAiqAlgoConfigAldchInt()); mPreInParam = (RkAiqAlgoCom*)(new RkAiqAlgoPreAldchInt()); mPreOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoPreResAldchInt()); mProcInParam = (RkAiqAlgoCom*)(new RkAiqAlgoProcAldchInt()); mProcOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoProcResAldchInt()); mPostInParam = (RkAiqAlgoCom*)(new RkAiqAlgoPostAldchInt()); mPostOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoPostResAldchInt()); EXIT_ANALYZER_FUNCTION(); } XCamReturn RkAiqAldchHandleInt::prepare() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; ret = RkAiqAldchHandle::prepare(); RKAIQCORE_CHECK_RET(ret, "aldch handle prepare failed"); RkAiqAlgoConfigAldchInt* aldch_config_int = (RkAiqAlgoConfigAldchInt*)mConfig; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; // memcpy(&aldch_config_int->aldch_calib_cfg, &shared->calib->aldch, sizeof(CalibDb_LDCH_t)); aldch_config_int->resource_path = sharedCom->resourcePath; aldch_config_int->mem_ops_ptr = mAiqCore->mShareMemOps; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->prepare(mConfig); RKAIQCORE_CHECK_RET(ret, "aldch algo prepare failed"); EXIT_ANALYZER_FUNCTION(); return XCAM_RETURN_NO_ERROR; } XCamReturn RkAiqAldchHandleInt::preProcess() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoPreAldchInt* aldch_pre_int = (RkAiqAlgoPreAldchInt*)mPreInParam; RkAiqAlgoPreResAldchInt* aldch_pre_res_int = (RkAiqAlgoPreResAldchInt*)mPreOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqPreResComb* comb = &shared->preResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAldchHandle::preProcess(); if (ret) { comb->aldch_pre_res = NULL; RKAIQCORE_CHECK_RET(ret, "aldch handle preProcess failed"); } comb->aldch_pre_res = NULL; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->pre_process(mPreInParam, mPreOutParam); RKAIQCORE_CHECK_RET(ret, "aldch algo pre_process failed"); // set result to mAiqCore comb->aldch_pre_res = (RkAiqAlgoPreResAldch*)aldch_pre_res_int; EXIT_ANALYZER_FUNCTION(); return XCAM_RETURN_NO_ERROR; } XCamReturn RkAiqAldchHandleInt::processing() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoProcAldchInt* aldch_proc_int = (RkAiqAlgoProcAldchInt*)mProcInParam; RkAiqAlgoProcResAldchInt* aldch_proc_res_int = (RkAiqAlgoProcResAldchInt*)mProcOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqProcResComb* comb = &shared->procResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAldchHandle::processing(); if (ret) { comb->aldch_proc_res = NULL; RKAIQCORE_CHECK_RET(ret, "aldch handle processing failed"); } comb->aldch_proc_res = NULL; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->processing(mProcInParam, mProcOutParam); RKAIQCORE_CHECK_RET(ret, "aldch algo processing failed"); comb->aldch_proc_res = (RkAiqAlgoProcResAldch*)aldch_proc_res_int; EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAldchHandleInt::postProcess() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoPostAldchInt* aldch_post_int = (RkAiqAlgoPostAldchInt*)mPostInParam; RkAiqAlgoPostResAldchInt* aldch_post_res_int = (RkAiqAlgoPostResAldchInt*)mPostOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqPostResComb* comb = &shared->postResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAldchHandle::postProcess(); if (ret) { comb->aldch_post_res = NULL; RKAIQCORE_CHECK_RET(ret, "aldch handle postProcess failed"); return ret; } comb->aldch_post_res = NULL; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->post_process(mPostInParam, mPostOutParam); RKAIQCORE_CHECK_RET(ret, "aldch algo post_process failed"); // set result to mAiqCore comb->aldch_post_res = (RkAiqAlgoPostResAldch*)aldch_post_res_int ; EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAldchHandleInt::updateConfig(bool needSync) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; if (needSync) mCfgMutex.lock(); // if something changed if (updateAtt) { mCurAtt = mNewAtt; updateAtt = false; // TODO rk_aiq_uapi_aldch_SetAttrib(mAlgoCtx, mCurAtt, false); sendSignal(); } if (needSync) mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAldchHandleInt::setAttrib(rk_aiq_ldch_attrib_t att) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; mCfgMutex.lock(); //TODO // check if there is different between att & mCurAtt // if something changed, set att to mNewAtt, and // the new params will be efldchtive later when updateConfig // called by RkAiqCore // if something changed if (0 != memcmp(&mCurAtt, &att, sizeof(rk_aiq_ldch_attrib_t))) { mNewAtt = att; updateAtt = true; waitSignal(); } mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAldchHandleInt::getAttrib(rk_aiq_ldch_attrib_t *att) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; rk_aiq_uapi_aldch_GetAttrib(mAlgoCtx, att); EXIT_ANALYZER_FUNCTION(); return ret; } void RkAiqAlscHandleInt::init() { ENTER_ANALYZER_FUNCTION(); RkAiqAlscHandle::deInit(); mConfig = (RkAiqAlgoCom*)(new RkAiqAlgoConfigAlscInt()); mPreInParam = (RkAiqAlgoCom*)(new RkAiqAlgoPreAlscInt()); mPreOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoPreResAlscInt()); mProcInParam = (RkAiqAlgoCom*)(new RkAiqAlgoProcAlscInt()); mProcOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoProcResAlscInt()); mPostInParam = (RkAiqAlgoCom*)(new RkAiqAlgoPostAlscInt()); mPostOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoPostResAlscInt()); EXIT_ANALYZER_FUNCTION(); } XCamReturn RkAiqAlscHandleInt::updateConfig(bool needSync) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; if (needSync) mCfgMutex.lock(); // if something changed if (updateAtt) { mCurAtt = mNewAtt; updateAtt = false; // TODO rk_aiq_uapi_alsc_SetAttrib(mAlgoCtx, mCurAtt, false); sendSignal(); } if (needSync) mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAlscHandleInt::setAttrib(rk_aiq_lsc_attrib_t att) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; mCfgMutex.lock(); //TODO // check if there is different between att & mCurAtt // if something changed, set att to mNewAtt, and // the new params will be effective later when updateConfig // called by RkAiqCore // if something changed if (0 != memcmp(&mCurAtt, &att, sizeof(rk_aiq_lsc_attrib_t))) { mNewAtt = att; updateAtt = true; waitSignal(); } mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAlscHandleInt::getAttrib(rk_aiq_lsc_attrib_t *att) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; rk_aiq_uapi_alsc_GetAttrib(mAlgoCtx, att); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAlscHandleInt::queryLscInfo(rk_aiq_lsc_querry_info_t *lsc_querry_info ) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; rk_aiq_uapi_alsc_QueryLscInfo(mAlgoCtx, lsc_querry_info); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAlscHandleInt::prepare() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; ret = RkAiqAlscHandle::prepare(); RKAIQCORE_CHECK_RET(ret, "alsc handle prepare failed"); RkAiqAlgoConfigAlscInt* alsc_config_int = (RkAiqAlgoConfigAlscInt*)mConfig; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->prepare(mConfig); RKAIQCORE_CHECK_RET(ret, "alsc algo prepare failed"); EXIT_ANALYZER_FUNCTION(); return XCAM_RETURN_NO_ERROR; } XCamReturn RkAiqAlscHandleInt::preProcess() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoPreAlscInt* alsc_pre_int = (RkAiqAlgoPreAlscInt*)mPreInParam; RkAiqAlgoPreResAlscInt* alsc_pre_res_int = (RkAiqAlgoPreResAlscInt*)mPreOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqPreResComb* comb = &shared->preResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAlscHandle::preProcess(); if (ret) { comb->alsc_pre_res = NULL; RKAIQCORE_CHECK_RET(ret, "alsc handle preProcess failed"); } comb->alsc_pre_res = NULL; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->pre_process(mPreInParam, mPreOutParam); RKAIQCORE_CHECK_RET(ret, "alsc algo pre_process failed"); // set result to mAiqCore comb->alsc_pre_res = (RkAiqAlgoPreResAlsc*)alsc_pre_res_int; EXIT_ANALYZER_FUNCTION(); return XCAM_RETURN_NO_ERROR; } XCamReturn RkAiqAlscHandleInt::processing() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoProcAlscInt* alsc_proc_int = (RkAiqAlgoProcAlscInt*)mProcInParam; RkAiqAlgoProcResAlscInt* alsc_proc_res_int = (RkAiqAlgoProcResAlscInt*)mProcOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqProcResComb* comb = &shared->procResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAlscHandle::processing(); if (ret) { comb->alsc_proc_res = NULL; RKAIQCORE_CHECK_RET(ret, "alsc handle processing failed"); } comb->alsc_proc_res = NULL; // TODO should check if the rk awb algo used #if 0 RkAiqAlgoProcResAwb* awb_res = (RkAiqAlgoProcResAwb*)(shared->procResComb.awb_proc_res); RkAiqAlgoProcResAwbInt* awb_res_int = (RkAiqAlgoProcResAwbInt*)(shared->procResComb.awb_proc_res); if(awb_res) { if(awb_res->awb_gain_algo.grgain < DIVMIN || awb_res->awb_gain_algo.gbgain < DIVMIN ) { LOGE("get wrong awb gain from AWB module ,use default value "); } else { alsc_proc_int->alsc_sw_info.awbGain[0] = awb_res->awb_gain_algo.rgain / awb_res->awb_gain_algo.grgain; alsc_proc_int->alsc_sw_info.awbGain[1] = awb_res->awb_gain_algo.bgain / awb_res->awb_gain_algo.gbgain; } alsc_proc_int->alsc_sw_info.awbIIRDampCoef = awb_res_int->awb_smooth_factor; alsc_proc_int->alsc_sw_info.varianceLuma = awb_res_int->varianceLuma; alsc_proc_int->alsc_sw_info.awbConverged = awb_res_int->awbConverged; } else { LOGE("fail to get awb gain form AWB module,use default value "); } RkAiqAlgoPreResAeInt *ae_int = (RkAiqAlgoPreResAeInt*)shared->preResComb.ae_pre_res; if( ae_int) { if((rk_aiq_working_mode_t)sharedCom->working_mode == RK_AIQ_WORKING_MODE_NORMAL) { alsc_proc_int->alsc_sw_info.sensorGain = ae_int->ae_pre_res_rk.LinearExp.exp_real_params.analog_gain * ae_int->ae_pre_res_rk.LinearExp.exp_real_params.digital_gain * ae_int->ae_pre_res_rk.LinearExp.exp_real_params.isp_dgain; } else if((rk_aiq_working_mode_t)sharedCom->working_mode >= RK_AIQ_WORKING_MODE_ISP_HDR2 && (rk_aiq_working_mode_t)sharedCom->working_mode < RK_AIQ_WORKING_MODE_ISP_HDR3) { LOGD("sensor gain choose from second hdr frame for alsc"); alsc_proc_int->alsc_sw_info.sensorGain = ae_int->ae_pre_res_rk.HdrExp[1].exp_real_params.analog_gain * ae_int->ae_pre_res_rk.HdrExp[1].exp_real_params.digital_gain * ae_int->ae_pre_res_rk.HdrExp[1].exp_real_params.isp_dgain; } else if((rk_aiq_working_mode_t)sharedCom->working_mode >= RK_AIQ_WORKING_MODE_ISP_HDR2 && (rk_aiq_working_mode_t)sharedCom->working_mode >= RK_AIQ_WORKING_MODE_ISP_HDR3) { LOGD("sensor gain choose from third hdr frame for alsc"); alsc_proc_int->alsc_sw_info.sensorGain = ae_int->ae_pre_res_rk.HdrExp[2].exp_real_params.analog_gain * ae_int->ae_pre_res_rk.HdrExp[2].exp_real_params.digital_gain * ae_int->ae_pre_res_rk.HdrExp[2].exp_real_params.isp_dgain; } else { LOGE("working_mode (%d) is invaild ,fail to get sensor gain form AE module,use default value ", sharedCom->working_mode); } } else { LOGE("fail to get sensor gain form AE module,use default value "); } #else alsc_proc_int->tx = shared->tx; XCamVideoBuffer* awb_proc_res = shared->res_comb.awb_proc_res; if (awb_proc_res) { RkAiqAlgoProcResAwbInt* awb_res_int = (RkAiqAlgoProcResAwbInt*)awb_proc_res->map(awb_proc_res); RkAiqAlgoProcResAwb* awb_res = &awb_res_int->awb_proc_res_com; if(awb_res) { if(awb_res->awb_gain_algo.grgain < DIVMIN || awb_res->awb_gain_algo.gbgain < DIVMIN ) { LOGE("get wrong awb gain from AWB module ,use default value "); } else { alsc_proc_int->alsc_sw_info.awbGain[0] = awb_res->awb_gain_algo.rgain / awb_res->awb_gain_algo.grgain; alsc_proc_int->alsc_sw_info.awbGain[1] = awb_res->awb_gain_algo.bgain / awb_res->awb_gain_algo.gbgain; } alsc_proc_int->alsc_sw_info.awbIIRDampCoef = awb_res_int->awb_smooth_factor; alsc_proc_int->alsc_sw_info.varianceLuma = awb_res_int->varianceLuma; alsc_proc_int->alsc_sw_info.awbConverged = awb_res_int->awbConverged; } else { LOGE("fail to get awb gain form AWB module,use default value "); } } else { LOGE("fail to get awb gain form AWB module,use default value "); } RKAiqAecExpInfo_t *pCurExp = &shared->curExp; if(pCurExp) { if((rk_aiq_working_mode_t)sharedCom->working_mode == RK_AIQ_WORKING_MODE_NORMAL) { alsc_proc_int->alsc_sw_info.sensorGain = pCurExp->LinearExp.exp_real_params.analog_gain * pCurExp->LinearExp.exp_real_params.digital_gain * pCurExp->LinearExp.exp_real_params.isp_dgain; } else if((rk_aiq_working_mode_t)sharedCom->working_mode >= RK_AIQ_WORKING_MODE_ISP_HDR2 && (rk_aiq_working_mode_t)sharedCom->working_mode < RK_AIQ_WORKING_MODE_ISP_HDR3) { LOGD("sensor gain choose from second hdr frame for alsc"); alsc_proc_int->alsc_sw_info.sensorGain = pCurExp->HdrExp[1].exp_real_params.analog_gain * pCurExp->HdrExp[1].exp_real_params.digital_gain * pCurExp->HdrExp[1].exp_real_params.isp_dgain; } else if((rk_aiq_working_mode_t)sharedCom->working_mode >= RK_AIQ_WORKING_MODE_ISP_HDR2 && (rk_aiq_working_mode_t)sharedCom->working_mode >= RK_AIQ_WORKING_MODE_ISP_HDR3) { LOGD("sensor gain choose from third hdr frame for alsc"); alsc_proc_int->alsc_sw_info.sensorGain = pCurExp->HdrExp[2].exp_real_params.analog_gain * pCurExp->HdrExp[2].exp_real_params.digital_gain * pCurExp->HdrExp[2].exp_real_params.isp_dgain; } else { LOGE("working_mode (%d) is invaild ,fail to get sensor gain form AE module,use default value ", sharedCom->working_mode); } } else { LOGE("fail to get sensor gain form AE module,use default value "); } #endif RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->processing(mProcInParam, mProcOutParam); RKAIQCORE_CHECK_RET(ret, "alsc algo processing failed"); comb->alsc_proc_res = (RkAiqAlgoProcResAlsc*)alsc_proc_res_int; EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAlscHandleInt::postProcess() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoPostAlscInt* alsc_post_int = (RkAiqAlgoPostAlscInt*)mPostInParam; RkAiqAlgoPostResAlscInt* alsc_post_res_int = (RkAiqAlgoPostResAlscInt*)mPostOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqPostResComb* comb = &shared->postResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAlscHandle::postProcess(); if (ret) { comb->alsc_post_res = NULL; RKAIQCORE_CHECK_RET(ret, "alsc handle postProcess failed"); return ret; } comb->alsc_post_res = NULL; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->post_process(mPostInParam, mPostOutParam); RKAIQCORE_CHECK_RET(ret, "alsc algo post_process failed"); // set result to mAiqCore comb->alsc_post_res = (RkAiqAlgoPostResAlsc*)alsc_post_res_int ; EXIT_ANALYZER_FUNCTION(); return ret; } void RkAiqAr2yHandleInt::init() { ENTER_ANALYZER_FUNCTION(); RkAiqAr2yHandle::deInit(); mConfig = (RkAiqAlgoCom*)(new RkAiqAlgoConfigAr2yInt()); mPreInParam = (RkAiqAlgoCom*)(new RkAiqAlgoPreAr2yInt()); mPreOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoPreResAr2yInt()); mProcInParam = (RkAiqAlgoCom*)(new RkAiqAlgoProcAr2yInt()); mProcOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoProcResAr2yInt()); mPostInParam = (RkAiqAlgoCom*)(new RkAiqAlgoPostAr2yInt()); mPostOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoPostResAr2yInt()); EXIT_ANALYZER_FUNCTION(); } XCamReturn RkAiqAr2yHandleInt::prepare() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; ret = RkAiqAr2yHandle::prepare(); RKAIQCORE_CHECK_RET(ret, "ar2y handle prepare failed"); RkAiqAlgoConfigAr2yInt* ar2y_config_int = (RkAiqAlgoConfigAr2yInt*)mConfig; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->prepare(mConfig); RKAIQCORE_CHECK_RET(ret, "ar2y algo prepare failed"); EXIT_ANALYZER_FUNCTION(); return XCAM_RETURN_NO_ERROR; } XCamReturn RkAiqAr2yHandleInt::preProcess() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoPreAr2yInt* ar2y_pre_int = (RkAiqAlgoPreAr2yInt*)mPreInParam; RkAiqAlgoPreResAr2yInt* ar2y_pre_res_int = (RkAiqAlgoPreResAr2yInt*)mPreOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqPreResComb* comb = &shared->preResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAr2yHandle::preProcess(); if (ret) { comb->ar2y_pre_res = NULL; RKAIQCORE_CHECK_RET(ret, "ar2y handle preProcess failed"); } comb->ar2y_pre_res = NULL; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->pre_process(mPreInParam, mPreOutParam); RKAIQCORE_CHECK_RET(ret, "ar2y algo pre_process failed"); // set result to mAiqCore comb->ar2y_pre_res = (RkAiqAlgoPreResAr2y*)ar2y_pre_res_int; EXIT_ANALYZER_FUNCTION(); return XCAM_RETURN_NO_ERROR; } XCamReturn RkAiqAr2yHandleInt::processing() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoProcAr2yInt* ar2y_proc_int = (RkAiqAlgoProcAr2yInt*)mProcInParam; RkAiqAlgoProcResAr2yInt* ar2y_proc_res_int = (RkAiqAlgoProcResAr2yInt*)mProcOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqProcResComb* comb = &shared->procResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAr2yHandle::processing(); if (ret) { comb->ar2y_proc_res = NULL; RKAIQCORE_CHECK_RET(ret, "ar2y handle processing failed"); } comb->ar2y_proc_res = NULL; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->processing(mProcInParam, mProcOutParam); RKAIQCORE_CHECK_RET(ret, "ar2y algo processing failed"); comb->ar2y_proc_res = (RkAiqAlgoProcResAr2y*)ar2y_proc_res_int; EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAr2yHandleInt::postProcess() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoPostAr2yInt* ar2y_post_int = (RkAiqAlgoPostAr2yInt*)mPostInParam; RkAiqAlgoPostResAr2yInt* ar2y_post_res_int = (RkAiqAlgoPostResAr2yInt*)mPostOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqPostResComb* comb = &shared->postResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAr2yHandle::postProcess(); if (ret) { comb->ar2y_post_res = NULL; RKAIQCORE_CHECK_RET(ret, "ar2y handle postProcess failed"); return ret; } comb->ar2y_post_res = NULL; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->post_process(mPostInParam, mPostOutParam); RKAIQCORE_CHECK_RET(ret, "ar2y algo post_process failed"); // set result to mAiqCore comb->ar2y_post_res = (RkAiqAlgoPostResAr2y*)ar2y_post_res_int ; EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAwdrHandleInt::prepare() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; ret = RkAiqAwdrHandle::prepare(); RKAIQCORE_CHECK_RET(ret, "awdr handle prepare failed"); RkAiqAlgoConfigAwdrInt* awdr_config_int = (RkAiqAlgoConfigAwdrInt*)mConfig; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->prepare(mConfig); RKAIQCORE_CHECK_RET(ret, "awdr algo prepare failed"); EXIT_ANALYZER_FUNCTION(); return XCAM_RETURN_NO_ERROR; } void RkAiqAwdrHandleInt::init() { ENTER_ANALYZER_FUNCTION(); RkAiqAwdrHandle::deInit(); mConfig = (RkAiqAlgoCom*)(new RkAiqAlgoConfigAwdrInt()); mPreInParam = (RkAiqAlgoCom*)(new RkAiqAlgoPreAwdrInt()); mPreOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoPreResAwdrInt()); mProcInParam = (RkAiqAlgoCom*)(new RkAiqAlgoProcAwdrInt()); mProcOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoProcResAwdrInt()); mPostInParam = (RkAiqAlgoCom*)(new RkAiqAlgoPostAwdrInt()); mPostOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoPostResAwdrInt()); EXIT_ANALYZER_FUNCTION(); } XCamReturn RkAiqAwdrHandleInt::preProcess() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoPreAwdrInt* awdr_pre_int = (RkAiqAlgoPreAwdrInt*)mPreInParam; RkAiqAlgoPreResAwdrInt* awdr_pre_res_int = (RkAiqAlgoPreResAwdrInt*)mPreOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqPreResComb* comb = &shared->preResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAwdrHandle::preProcess(); if (ret) { comb->awdr_pre_res = NULL; RKAIQCORE_CHECK_RET(ret, "awdr handle preProcess failed"); } comb->awdr_pre_res = NULL; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->pre_process(mPreInParam, mPreOutParam); RKAIQCORE_CHECK_RET(ret, "awdr algo pre_process failed"); // set result to mAiqCore comb->awdr_pre_res = (RkAiqAlgoPreResAwdr*)awdr_pre_res_int; EXIT_ANALYZER_FUNCTION(); return XCAM_RETURN_NO_ERROR; } XCamReturn RkAiqAwdrHandleInt::processing() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoProcAwdrInt* awdr_proc_int = (RkAiqAlgoProcAwdrInt*)mProcInParam; RkAiqAlgoProcResAwdrInt* awdr_proc_res_int = (RkAiqAlgoProcResAwdrInt*)mProcOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqProcResComb* comb = &shared->procResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAwdrHandle::processing(); if (ret) { comb->awdr_proc_res = NULL; RKAIQCORE_CHECK_RET(ret, "awdr handle processing failed"); } comb->awdr_proc_res = NULL; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->processing(mProcInParam, mProcOutParam); RKAIQCORE_CHECK_RET(ret, "awdr algo processing failed"); comb->awdr_proc_res = (RkAiqAlgoProcResAwdr*)awdr_proc_res_int; EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAwdrHandleInt::postProcess() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoPostAwdrInt* awdr_post_int = (RkAiqAlgoPostAwdrInt*)mPostInParam; RkAiqAlgoPostResAwdrInt* awdr_post_res_int = (RkAiqAlgoPostResAwdrInt*)mPostOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqPostResComb* comb = &shared->postResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAwdrHandle::postProcess(); if (ret) { comb->awdr_post_res = NULL; RKAIQCORE_CHECK_RET(ret, "awdr handle postProcess failed"); return ret; } comb->awdr_post_res = NULL; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->post_process(mPostInParam, mPostOutParam); RKAIQCORE_CHECK_RET(ret, "awdr algo post_process failed"); // set result to mAiqCore comb->awdr_post_res = (RkAiqAlgoPostResAwdr*)awdr_post_res_int ; EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAdrcHandleInt::prepare() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; ret = RkAiqAdrcHandle::prepare(); RKAIQCORE_CHECK_RET(ret, "adrc handle prepare failed"); RkAiqAlgoConfigAdrcInt* adrc_config_int = (RkAiqAlgoConfigAdrcInt*)mConfig; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; adrc_config_int->rawHeight = sharedCom->snsDes.isp_acq_height; adrc_config_int->rawWidth = sharedCom->snsDes.isp_acq_width; adrc_config_int->working_mode = sharedCom->working_mode; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->prepare(mConfig); RKAIQCORE_CHECK_RET(ret, "adrc algo prepare failed"); EXIT_ANALYZER_FUNCTION(); return XCAM_RETURN_NO_ERROR; } void RkAiqAdrcHandleInt::init() { ENTER_ANALYZER_FUNCTION(); RkAiqAdrcHandle::deInit(); mConfig = (RkAiqAlgoCom*)(new RkAiqAlgoConfigAdrcInt()); mPreInParam = (RkAiqAlgoCom*)(new RkAiqAlgoPreAdrcInt()); mPreOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoPreResAdrcInt()); mProcInParam = (RkAiqAlgoCom*)(new RkAiqAlgoProcAdrcInt()); mProcOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoProcResAdrcInt()); mPostInParam = (RkAiqAlgoCom*)(new RkAiqAlgoPostAdrcInt()); mPostOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoPostResAdrcInt()); EXIT_ANALYZER_FUNCTION(); } XCamReturn RkAiqAdrcHandleInt::updateConfig(bool needSync) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; if (needSync) mCfgMutex.lock(); // if something changed if (updateAtt) { mCurAtt = mNewAtt; updateAtt = false; rk_aiq_uapi_adrc_SetAttrib(mAlgoCtx, mCurAtt, true); sendSignal(); } if (needSync) mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAdrcHandleInt::setAttrib(drc_attrib_t att) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; mCfgMutex.lock(); //TODO // check if there is different between att & mCurAtt // if something changed, set att to mNewAtt, and // the new params will be effective later when updateConfig // called by RkAiqCore // if something changed if (0 != memcmp(&mCurAtt, &att, sizeof(drc_attrib_t))) { mNewAtt = att; updateAtt = true; waitSignal(); } mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAdrcHandleInt::getAttrib(drc_attrib_t* att) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; rk_aiq_uapi_adrc_GetAttrib(mAlgoCtx, att); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAdrcHandleInt::preProcess() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoPreAdrcInt* adrc_pre_int = (RkAiqAlgoPreAdrcInt*)mPreInParam; RkAiqAlgoPreResAdrcInt* adrc_pre_res_int = (RkAiqAlgoPreResAdrcInt*)mPreOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqPreResComb* comb = &shared->preResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAdrcHandle::preProcess(); if (ret) { comb->adrc_pre_res = NULL; RKAIQCORE_CHECK_RET(ret, "adrc handle preProcess failed"); } comb->adrc_pre_res = NULL; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->pre_process(mPreInParam, mPreOutParam); RKAIQCORE_CHECK_RET(ret, "adrc algo pre_process failed"); // set result to mAiqCore comb->adrc_pre_res = (RkAiqAlgoPreResAdrc*)adrc_pre_res_int; EXIT_ANALYZER_FUNCTION(); return XCAM_RETURN_NO_ERROR; } XCamReturn RkAiqAdrcHandleInt::processing() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoProcAdrcInt* adrc_proc_int = (RkAiqAlgoProcAdrcInt*)mProcInParam; RkAiqAlgoProcResAdrcInt* adrc_proc_res_int = (RkAiqAlgoProcResAdrcInt*)mProcOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqProcResComb* comb = &shared->procResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAdrcHandle::processing(); if (ret) { comb->adrc_proc_res = NULL; RKAIQCORE_CHECK_RET(ret, "adrc handle processing failed"); } comb->adrc_proc_res = NULL; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->processing(mProcInParam, mProcOutParam); RKAIQCORE_CHECK_RET(ret, "adrc algo processing failed"); comb->adrc_proc_res = (RkAiqAlgoProcResAdrc*)adrc_proc_res_int; EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAdrcHandleInt::postProcess() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoPostAdrcInt* adrc_post_int = (RkAiqAlgoPostAdrcInt*)mPostInParam; RkAiqAlgoPostResAdrcInt* adrc_post_res_int = (RkAiqAlgoPostResAdrcInt*)mPostOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqPostResComb* comb = &shared->postResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAdrcHandle::postProcess(); if (ret) { comb->adrc_post_res = NULL; RKAIQCORE_CHECK_RET(ret, "adrc handle postProcess failed"); return ret; } comb->adrc_post_res = NULL; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->post_process(mPostInParam, mPostOutParam); RKAIQCORE_CHECK_RET(ret, "adrc algo post_process failed"); // set result to mAiqCore comb->adrc_post_res = (RkAiqAlgoPostResAdrc*)adrc_post_res_int ; EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAmdHandleInt::prepare() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; ret = RkAiqAmdHandle::prepare(); RKAIQCORE_CHECK_RET(ret, "amd handle prepare failed"); RkAiqAlgoConfigAmdInt* amd_config_int = (RkAiqAlgoConfigAmdInt*)mConfig; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; amd_config_int->amd_config_com.spWidth = sharedCom->spWidth; amd_config_int->amd_config_com.spHeight = sharedCom->spHeight; amd_config_int->amd_config_com.spAlignedW = sharedCom->spAlignedWidth; amd_config_int->amd_config_com.spAlignedH = sharedCom->spAlignedHeight; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->prepare(mConfig); RKAIQCORE_CHECK_RET(ret, "amd algo prepare failed"); EXIT_ANALYZER_FUNCTION(); return XCAM_RETURN_NO_ERROR; } void RkAiqAmdHandleInt::init() { ENTER_ANALYZER_FUNCTION(); RkAiqAmdHandle::deInit(); mConfig = (RkAiqAlgoCom*)(new RkAiqAlgoConfigAmdInt()); mPreInParam = (RkAiqAlgoCom*)(new RkAiqAlgoPreAmdInt()); mPreOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoPreResAmdInt()); mProcInParam = (RkAiqAlgoCom*)(new RkAiqAlgoProcAmdInt()); // mProcOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoProcResAmdInt()); mPostInParam = (RkAiqAlgoCom*)(new RkAiqAlgoPostAmdInt()); mPostOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoPostResAmdInt()); EXIT_ANALYZER_FUNCTION(); } XCamReturn RkAiqAmdHandleInt::updateConfig(bool needSync) { return XCAM_RETURN_NO_ERROR; } XCamReturn RkAiqAmdHandleInt::preProcess() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoPreAmdInt* amd_pre_int = (RkAiqAlgoPreAmdInt*)mPreInParam; RkAiqAlgoPreResAmdInt* amd_pre_res_int = (RkAiqAlgoPreResAmdInt*)mPreOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqPreResComb* comb = &shared->preResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAmdHandle::preProcess(); if (ret) { comb->amd_pre_res = NULL; RKAIQCORE_CHECK_RET(ret, "amd handle preProcess failed"); } comb->amd_pre_res = NULL; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->pre_process(mPreInParam, mPreOutParam); RKAIQCORE_CHECK_RET(ret, "amd algo pre_process failed"); // set result to mAiqCore comb->amd_pre_res = (RkAiqAlgoPreResAmd*)amd_pre_res_int; EXIT_ANALYZER_FUNCTION(); return XCAM_RETURN_NO_ERROR; } XCamReturn RkAiqAmdHandleInt::processing() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoProcAmdInt* amd_proc_int = (RkAiqAlgoProcAmdInt*)mProcInParam; mProcResShared = new RkAiqAlgoProcResAmdIntShared(); if (!mProcResShared.ptr()) { LOGE("new amd mProcOutParam failed, bypass!"); return XCAM_RETURN_BYPASS; } RkAiqAlgoProcResAmdInt* amd_proc_res_int = &mProcResShared->result; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqProcResComb* comb = &shared->procResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAmdHandle::processing(); if (ret) { comb->amd_proc_res = NULL; RKAIQCORE_CHECK_RET(ret, "amd handle processing failed"); } comb->amd_proc_res = NULL; memset(&amd_proc_res_int->amd_proc_res_com.amd_proc_res, 0, sizeof(amd_proc_res_int->amd_proc_res_com.amd_proc_res)); amd_proc_int->stats.spImage = shared->sp; amd_proc_int->stats.ispGain = shared->ispGain; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->processing(mProcInParam, (RkAiqAlgoResCom*)amd_proc_res_int); RKAIQCORE_CHECK_RET(ret, "amd algo processing failed"); comb->amd_proc_res = (RkAiqAlgoProcResAmd*)amd_proc_res_int; MediaBuffer_t *mbuf = amd_proc_res_int->amd_proc_res_com.amd_proc_res.st_ratio; if (mbuf) { MotionBufMetaData_t *metadata = (MotionBufMetaData_t *)mbuf->pMetaData; SmartPtr msg = new RkAiqCoreVdBufMsg(XCAM_MESSAGE_AMD_PROC_RES_OK, metadata->frame_id, mProcResShared); mAiqCore->post_message(msg); } EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAmdHandleInt::postProcess() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoPostAmdInt* amd_post_int = (RkAiqAlgoPostAmdInt*)mPostInParam; RkAiqAlgoPostResAmdInt* amd_post_res_int = (RkAiqAlgoPostResAmdInt*)mPostOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqPostResComb* comb = &shared->postResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; ret = RkAiqAmdHandle::postProcess(); if (ret) { comb->amd_post_res = NULL; RKAIQCORE_CHECK_RET(ret, "amd handle postProcess failed"); return ret; } comb->amd_post_res = NULL; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->post_process(mPostInParam, mPostOutParam); RKAIQCORE_CHECK_RET(ret, "amd algo post_process failed"); // set result to mAiqCore comb->amd_post_res = (RkAiqAlgoPostResAmd*)amd_post_res_int ; EXIT_ANALYZER_FUNCTION(); return ret; } void RkAiqArawnrHandleInt::init() { ENTER_ANALYZER_FUNCTION(); RkAiqArawnrHandle::deInit(); mConfig = (RkAiqAlgoCom*)(new RkAiqAlgoConfigArawnrInt()); mPreInParam = (RkAiqAlgoCom*)(new RkAiqAlgoPreArawnrInt()); mPreOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoPreResArawnrInt()); mProcInParam = (RkAiqAlgoCom*)(new RkAiqAlgoProcArawnrInt()); mProcOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoProcResArawnrInt()); mPostInParam = (RkAiqAlgoCom*)(new RkAiqAlgoPostArawnrInt()); mPostOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoPostResArawnrInt()); EXIT_ANALYZER_FUNCTION(); } XCamReturn RkAiqArawnrHandleInt::updateConfig(bool needSync) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; if (needSync) mCfgMutex.lock(); // if something changed if (updateAtt) { mCurAtt = mNewAtt; updateAtt = false; rk_aiq_uapi_abayernr_SetAttrib_v1(mAlgoCtx, &mCurAtt, false); sendSignal(); } if(updateIQpara) { mCurIQPara = mNewIQPara; updateIQpara = false; // TODO rk_aiq_uapi_abayernr_SetIQPara_v1(mAlgoCtx, &mCurIQPara, false); sendSignal(); } if(updateJsonpara) { mCurJsonPara = mNewJsonPara; updateJsonpara = false; // TODO rk_aiq_uapi_abayernr_SetJsonPara_v1(mAlgoCtx, &mCurJsonPara, false); sendSignal(); } if (needSync) mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqArawnrHandleInt::setAttrib(rk_aiq_bayernr_attrib_v1_t *att) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; mCfgMutex.lock(); //TODO // check if there is different between att & mCurAtt // if something changed, set att to mNewAtt, and // the new params will be effective later when updateConfig // called by RkAiqCore // if something changed if (0 != memcmp(&mCurAtt, att, sizeof(rk_aiq_bayernr_attrib_v1_t))) { mNewAtt = *att; updateAtt = true; waitSignal(); } mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqArawnrHandleInt::getAttrib(rk_aiq_bayernr_attrib_v1_t *att) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; rk_aiq_uapi_abayernr_GetAttrib_v1(mAlgoCtx, att); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqArawnrHandleInt::setIQPara(rk_aiq_bayernr_IQPara_V1_t *para) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; mCfgMutex.lock(); //TODO // check if there is different between att & mCurAtt // if something changed, set att to mNewAtt, and // the new params will be effective later when updateConfig // called by RkAiqCore // if something changed if (0 != memcmp(&mCurIQPara, para, sizeof(rk_aiq_bayernr_IQPara_V1_t))) { mNewIQPara = *para; updateIQpara = true; waitSignal(); } mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqArawnrHandleInt::getIQPara(rk_aiq_bayernr_IQPara_V1_t *para) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; printf("rawnr get iq para enter\n"); rk_aiq_uapi_abayernr_GetIQPara_v1(mAlgoCtx, para); printf("rawnr get iq para exit\n"); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqArawnrHandleInt::setJsonPara(rk_aiq_bayernr_JsonPara_V1_t *para) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; mCfgMutex.lock(); //TODO // check if there is different between att & mCurAtt // if something changed, set att to mNewAtt, and // the new params will be effective later when updateConfig // called by RkAiqCore // if something changed if (0 != memcmp(&mCurIQPara, para, sizeof(rk_aiq_bayernr_JsonPara_V1_t))) { mNewJsonPara = *para; updateJsonpara = true; waitSignal(); } mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqArawnrHandleInt::getJsonPara(rk_aiq_bayernr_JsonPara_V1_t *para) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; rk_aiq_uapi_abayernr_GetJsonPara_v1(mAlgoCtx, para); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqArawnrHandleInt::setStrength(float fPercent) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; rk_aiq_uapi_abayernr_SetRawnrSFStrength_v1(mAlgoCtx, fPercent); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqArawnrHandleInt::getStrength(float *pPercent) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; rk_aiq_uapi_abayernr_GetRawnrSFStrength_v1(mAlgoCtx, pPercent); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqArawnrHandleInt::prepare() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; ret = RkAiqArawnrHandle::prepare(); RKAIQCORE_CHECK_RET(ret, "arawnr handle prepare failed"); RkAiqAlgoConfigArawnrInt* aynr_config_int = (RkAiqAlgoConfigArawnrInt*)mConfig; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->prepare(mConfig); RKAIQCORE_CHECK_RET(ret, "arawnr algo prepare failed"); EXIT_ANALYZER_FUNCTION(); return XCAM_RETURN_NO_ERROR; } XCamReturn RkAiqArawnrHandleInt::preProcess() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoPreArawnrInt* arawnr_pre_int = (RkAiqAlgoPreArawnrInt*)mPreInParam; RkAiqAlgoPreResArawnrInt* arawnr_pre_res_int = (RkAiqAlgoPreResArawnrInt*)mPreOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqPreResComb* comb = &shared->preResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqArawnrHandle::preProcess(); if (ret) { comb->arawnr_pre_res = NULL; RKAIQCORE_CHECK_RET(ret, "arawnr handle preProcess failed"); } comb->arawnr_pre_res = NULL; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->pre_process(mPreInParam, mPreOutParam); RKAIQCORE_CHECK_RET(ret, "arawnr algo pre_process failed"); // set result to mAiqCore comb->arawnr_pre_res = (RkAiqAlgoPreResArawnr*)arawnr_pre_res_int; EXIT_ANALYZER_FUNCTION(); return XCAM_RETURN_NO_ERROR; } XCamReturn RkAiqArawnrHandleInt::processing() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoProcArawnrInt* arawnr_proc_int = (RkAiqAlgoProcArawnrInt*)mProcInParam; RkAiqAlgoProcResArawnrInt* arawnr_proc_res_int = (RkAiqAlgoProcResArawnrInt*)mProcOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqProcResComb* comb = &shared->procResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; static int arawnr_proc_framecnt = 0; arawnr_proc_framecnt++; ret = RkAiqArawnrHandle::processing(); if (ret) { comb->arawnr_proc_res = NULL; RKAIQCORE_CHECK_RET(ret, "aynr handle processing failed"); } comb->arawnr_proc_res = NULL; // TODO: fill procParam arawnr_proc_int->iso = sharedCom->iso; arawnr_proc_int->hdr_mode = sharedCom->working_mode; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->processing(mProcInParam, mProcOutParam); RKAIQCORE_CHECK_RET(ret, "aynr algo processing failed"); comb->arawnr_proc_res = (RkAiqAlgoProcResArawnr*)arawnr_proc_res_int; EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqArawnrHandleInt::postProcess() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoPostArawnrInt* arawnr_post_int = (RkAiqAlgoPostArawnrInt*)mPostInParam; RkAiqAlgoPostResArawnrInt* arawnr_post_res_int = (RkAiqAlgoPostResArawnrInt*)mPostOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqPostResComb* comb = &shared->postResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqArawnrHandle::postProcess(); if (ret) { comb->aynr_post_res = NULL; RKAIQCORE_CHECK_RET(ret, "arawnr handle postProcess failed"); return ret; } comb->aynr_post_res = NULL; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->post_process(mPostInParam, mPostOutParam); RKAIQCORE_CHECK_RET(ret, "arawnr algo post_process failed"); // set result to mAiqCore comb->arawnr_post_res = (RkAiqAlgoPostResArawnr*)arawnr_post_res_int ; EXIT_ANALYZER_FUNCTION(); return ret; } void RkAiqAynrHandleInt::init() { ENTER_ANALYZER_FUNCTION(); RkAiqAynrHandle::deInit(); mConfig = (RkAiqAlgoCom*)(new RkAiqAlgoConfigAynrInt()); mPreInParam = (RkAiqAlgoCom*)(new RkAiqAlgoPreAynrInt()); mPreOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoPreResAynrInt()); mProcInParam = (RkAiqAlgoCom*)(new RkAiqAlgoProcAynrInt()); mProcOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoProcResAynrInt()); mPostInParam = (RkAiqAlgoCom*)(new RkAiqAlgoPostAynrInt()); mPostOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoPostResAynrInt()); EXIT_ANALYZER_FUNCTION(); } XCamReturn RkAiqAynrHandleInt::updateConfig(bool needSync) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; if (needSync) mCfgMutex.lock(); // if something changed if (updateAtt) { mCurAtt = mNewAtt; updateAtt = false; // TODO rk_aiq_uapi_aynr_SetAttrib_v1(mAlgoCtx, &mCurAtt, false); sendSignal(); } if(updateIQpara) { mCurIQPara = mNewIQPara; updateIQpara = false; // TODO rk_aiq_uapi_aynr_SetIQPara_v1(mAlgoCtx, &mCurIQPara, false); sendSignal(); } if(updateJsonpara) { mCurJsonPara = mNewJsonPara; updateJsonpara = false; // TODO rk_aiq_uapi_aynr_SetJsonPara_v1(mAlgoCtx, &mCurJsonPara, false); sendSignal(); } if (needSync) mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAynrHandleInt::setAttrib(rk_aiq_ynr_attrib_v1_t *att) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; mCfgMutex.lock(); //TODO // check if there is different between att & mCurAtt // if something changed, set att to mNewAtt, and // the new params will be effective later when updateConfig // called by RkAiqCore // if something changed if (0 != memcmp(&mCurAtt, att, sizeof(rk_aiq_ynr_attrib_v1_t))) { mNewAtt = *att; updateAtt = true; waitSignal(); } mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAynrHandleInt::getAttrib(rk_aiq_ynr_attrib_v1_t *att) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; rk_aiq_uapi_aynr_GetAttrib_v1(mAlgoCtx, att); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAynrHandleInt::setIQPara(rk_aiq_ynr_IQPara_V1_t *para) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; mCfgMutex.lock(); //TODO // check if there is different between att & mCurAtt // if something changed, set att to mNewAtt, and // the new params will be effective later when updateConfig // called by RkAiqCore // if something changed if (0 != memcmp(&mCurIQPara, para, sizeof(rk_aiq_ynr_IQPara_V1_t))) { mNewIQPara = *para; updateIQpara = true; waitSignal(); } mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAynrHandleInt::getIQPara(rk_aiq_ynr_IQPara_V1_t *para) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; rk_aiq_uapi_aynr_GetIQPara_v1(mAlgoCtx, para); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAynrHandleInt::setJsonPara(rk_aiq_ynr_JsonPara_V1_t *para) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; mCfgMutex.lock(); //TODO // check if there is different between att & mCurAtt // if something changed, set att to mNewAtt, and // the new params will be effective later when updateConfig // called by RkAiqCore // if something changed if (0 != memcmp(&mCurIQPara, para, sizeof(rk_aiq_ynr_JsonPara_V1_t))) { mNewJsonPara = *para; updateJsonpara = true; waitSignal(); } mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAynrHandleInt::getJsonPara(rk_aiq_ynr_JsonPara_V1_t *para) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; rk_aiq_uapi_aynr_GetJsonPara_v1(mAlgoCtx, para); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAynrHandleInt::setStrength(float fPercent) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; rk_aiq_uapi_aynr_SetLumaSFStrength_v1(mAlgoCtx, fPercent); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAynrHandleInt::getStrength(float *pPercent) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; rk_aiq_uapi_aynr_GetLumaSFStrength_v1(mAlgoCtx, pPercent); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAynrHandleInt::prepare() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; ret = RkAiqAynrHandle::prepare(); RKAIQCORE_CHECK_RET(ret, "aynr handle prepare failed"); RkAiqAlgoConfigAynrInt* aynr_config_int = (RkAiqAlgoConfigAynrInt*)mConfig; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->prepare(mConfig); RKAIQCORE_CHECK_RET(ret, "aynr algo prepare failed"); EXIT_ANALYZER_FUNCTION(); return XCAM_RETURN_NO_ERROR; } XCamReturn RkAiqAynrHandleInt::preProcess() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoPreAynrInt* aynr_pre_int = (RkAiqAlgoPreAynrInt*)mPreInParam; RkAiqAlgoPreResAynrInt* aynr_pre_res_int = (RkAiqAlgoPreResAynrInt*)mPreOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqPreResComb* comb = &shared->preResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAynrHandle::preProcess(); if (ret) { comb->aynr_pre_res = NULL; RKAIQCORE_CHECK_RET(ret, "aynr handle preProcess failed"); } comb->aynr_pre_res = NULL; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->pre_process(mPreInParam, mPreOutParam); RKAIQCORE_CHECK_RET(ret, "aynr algo pre_process failed"); // set result to mAiqCore comb->aynr_pre_res = (RkAiqAlgoPreResAynr*)aynr_pre_res_int; EXIT_ANALYZER_FUNCTION(); return XCAM_RETURN_NO_ERROR; } XCamReturn RkAiqAynrHandleInt::processing() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoProcAynrInt* aynr_proc_int = (RkAiqAlgoProcAynrInt*)mProcInParam; RkAiqAlgoProcResAynrInt* aynr_proc_res_int = (RkAiqAlgoProcResAynrInt*)mProcOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqProcResComb* comb = &shared->procResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; static int aynr_proc_framecnt = 0; aynr_proc_framecnt++; ret = RkAiqAynrHandle::processing(); if (ret) { comb->aynr_proc_res = NULL; RKAIQCORE_CHECK_RET(ret, "aynr handle processing failed"); } comb->aynr_proc_res = NULL; // TODO: fill procParam aynr_proc_int->iso = sharedCom->iso; aynr_proc_int->hdr_mode = sharedCom->working_mode; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->processing(mProcInParam, mProcOutParam); RKAIQCORE_CHECK_RET(ret, "aynr algo processing failed"); comb->aynr_proc_res = (RkAiqAlgoProcResAynr*)aynr_proc_res_int; EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAynrHandleInt::postProcess() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoPostAynrInt* aynr_post_int = (RkAiqAlgoPostAynrInt*)mPostInParam; RkAiqAlgoPostResAynrInt* aynr_post_res_int = (RkAiqAlgoPostResAynrInt*)mPostOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqPostResComb* comb = &shared->postResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAynrHandle::postProcess(); if (ret) { comb->aynr_post_res = NULL; RKAIQCORE_CHECK_RET(ret, "aynr handle postProcess failed"); return ret; } comb->aynr_post_res = NULL; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->post_process(mPostInParam, mPostOutParam); RKAIQCORE_CHECK_RET(ret, "aynr algo post_process failed"); // set result to mAiqCore comb->aynr_post_res = (RkAiqAlgoPostResAynr*)aynr_post_res_int ; EXIT_ANALYZER_FUNCTION(); return ret; } //uvnr void RkAiqAcnrHandleInt::init() { ENTER_ANALYZER_FUNCTION(); RkAiqAcnrHandle::deInit(); mConfig = (RkAiqAlgoCom*)(new RkAiqAlgoConfigAcnrInt()); mPreInParam = (RkAiqAlgoCom*)(new RkAiqAlgoPreAcnrInt()); mPreOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoPreResAcnrInt()); mProcInParam = (RkAiqAlgoCom*)(new RkAiqAlgoProcAcnrInt()); mProcOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoProcResAcnrInt()); mPostInParam = (RkAiqAlgoCom*)(new RkAiqAlgoPostAcnrInt()); mPostOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoPostResAcnrInt()); EXIT_ANALYZER_FUNCTION(); } XCamReturn RkAiqAcnrHandleInt::updateConfig(bool needSync) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; if (needSync) mCfgMutex.lock(); // if something changed if (updateAtt) { mCurAtt = mNewAtt; updateAtt = false; // TODO rk_aiq_uapi_auvnr_SetAttrib(mAlgoCtx, &mCurAtt, false); sendSignal(); } if(updateIQpara) { mCurIQPara = mNewIQPara; updateIQpara = false; // TODO rk_aiq_uapi_auvnr_SetIQPara(mAlgoCtx, &mCurIQPara, false); sendSignal(); } if(updateJsonpara) { mCurJsonPara = mNewJsonPara; updateJsonpara = false; // TODO rk_aiq_uapi_auvnr_SetJsonPara(mAlgoCtx, &mCurJsonPara, false); sendSignal(); } if (needSync) mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAcnrHandleInt::setAttrib(rk_aiq_uvnr_attrib_v1_t *att) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; mCfgMutex.lock(); //TODO // check if there is different between att & mCurAtt // if something changed, set att to mNewAtt, and // the new params will be effective later when updateConfig // called by RkAiqCore // if something changed if (0 != memcmp(&mCurAtt, att, sizeof(rk_aiq_uvnr_attrib_v1_t))) { mNewAtt = *att; updateAtt = true; waitSignal(); } mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAcnrHandleInt::getAttrib(rk_aiq_uvnr_attrib_v1_t *att) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; rk_aiq_uapi_auvnr_GetAttrib(mAlgoCtx, att); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAcnrHandleInt::setIQPara(rk_aiq_uvnr_IQPara_v1_t *para) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; mCfgMutex.lock(); //TODO // check if there is different between att & mCurAtt // if something changed, set att to mNewAtt, and // the new params will be effective later when updateConfig // called by RkAiqCore // if something changed if (0 != memcmp(&mCurIQPara, para, sizeof(rk_aiq_uvnr_IQPara_v1_t))) { mNewIQPara = *para; updateIQpara = true; waitSignal(); } mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAcnrHandleInt::getIQPara(rk_aiq_uvnr_IQPara_v1_t *para) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; rk_aiq_uapi_auvnr_GetIQPara(mAlgoCtx, para); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAcnrHandleInt::setJsonPara(rk_aiq_uvnr_JsonPara_v1_t *para) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; mCfgMutex.lock(); //TODO // check if there is different between att & mCurAtt // if something changed, set att to mNewAtt, and // the new params will be effective later when updateConfig // called by RkAiqCore // if something changed if (0 != memcmp(&mCurIQPara, para, sizeof(rk_aiq_uvnr_JsonPara_v1_t))) { mNewJsonPara = *para; updateJsonpara = true; waitSignal(); } mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAcnrHandleInt::getJsonPara(rk_aiq_uvnr_JsonPara_v1_t *para) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; rk_aiq_uapi_auvnr_GetJsonPara(mAlgoCtx, para); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAcnrHandleInt::setStrength(float fPercent) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; //rk_aiq_uapi_asharp_SetStrength(mAlgoCtx, fPercent); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAcnrHandleInt::getStrength(float *pPercent) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; //rk_aiq_uapi_asharp_GetStrength(mAlgoCtx, pPercent); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAcnrHandleInt::prepare() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; ret = RkAiqAcnrHandle::prepare(); RKAIQCORE_CHECK_RET(ret, "auvnr handle prepare failed"); RkAiqAlgoConfigAcnrInt* auvnr_config_int = (RkAiqAlgoConfigAcnrInt*)mConfig; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->prepare(mConfig); RKAIQCORE_CHECK_RET(ret, "auvnr algo prepare failed"); EXIT_ANALYZER_FUNCTION(); return XCAM_RETURN_NO_ERROR; } XCamReturn RkAiqAcnrHandleInt::preProcess() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoPreAcnrInt* auvnr_pre_int = (RkAiqAlgoPreAcnrInt*)mPreInParam; RkAiqAlgoPreResAcnrInt* auvnr_pre_res_int = (RkAiqAlgoPreResAcnrInt*)mPreOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqPreResComb* comb = &shared->preResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAcnrHandle::preProcess(); if (ret) { comb->acnr_pre_res = NULL; RKAIQCORE_CHECK_RET(ret, "auvnr handle preProcess failed"); } comb->acnr_pre_res = NULL; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->pre_process(mPreInParam, mPreOutParam); RKAIQCORE_CHECK_RET(ret, "auvnr algo pre_process failed"); // set result to mAiqCore comb->acnr_pre_res = (RkAiqAlgoPreResAcnr*)auvnr_pre_res_int; EXIT_ANALYZER_FUNCTION(); return XCAM_RETURN_NO_ERROR; } XCamReturn RkAiqAcnrHandleInt::processing() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoProcAcnrInt* auvnr_proc_int = (RkAiqAlgoProcAcnrInt*)mProcInParam; RkAiqAlgoProcResAcnrInt* auvnr_proc_res_int = (RkAiqAlgoProcResAcnrInt*)mProcOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqProcResComb* comb = &shared->procResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; static int auvnr_proc_framecnt = 0; auvnr_proc_framecnt++; ret = RkAiqAcnrHandle::processing(); if (ret) { comb->acnr_proc_res = NULL; RKAIQCORE_CHECK_RET(ret, "auvnr handle processing failed"); } comb->acnr_proc_res = NULL; // TODO: fill procParam auvnr_proc_int->iso = sharedCom->iso; auvnr_proc_int->hdr_mode = sharedCom->working_mode; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->processing(mProcInParam, mProcOutParam); RKAIQCORE_CHECK_RET(ret, "aynr algo processing failed"); comb->acnr_proc_res = (RkAiqAlgoProcResAcnr*)auvnr_proc_res_int; EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAcnrHandleInt::postProcess() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoPostAcnrInt* auvnr_post_int = (RkAiqAlgoPostAcnrInt*)mPostInParam; RkAiqAlgoPostResAcnrInt* auvnr_post_res_int = (RkAiqAlgoPostResAcnrInt*)mPostOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqPostResComb* comb = &shared->postResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAcnrHandle::postProcess(); if (ret) { comb->acnr_post_res = NULL; RKAIQCORE_CHECK_RET(ret, "auvnr handle postProcess failed"); return ret; } comb->acnr_post_res = NULL; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->post_process(mPostInParam, mPostOutParam); RKAIQCORE_CHECK_RET(ret, "auvnr algo post_process failed"); // set result to mAiqCore comb->acnr_post_res = (RkAiqAlgoPostResAcnr*)auvnr_post_res_int ; EXIT_ANALYZER_FUNCTION(); return ret; } void RkAiqAmfnrHandleInt::init() { ENTER_ANALYZER_FUNCTION(); RkAiqAmfnrHandle::deInit(); mConfig = (RkAiqAlgoCom*)(new RkAiqAlgoConfigAmfnrInt()); mPreInParam = (RkAiqAlgoCom*)(new RkAiqAlgoPreAmfnrInt()); mPreOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoPreResAmfnrInt()); mProcInParam = (RkAiqAlgoCom*)(new RkAiqAlgoProcAmfnrInt()); mProcOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoProcResAmfnrInt()); mPostInParam = (RkAiqAlgoCom*)(new RkAiqAlgoPostAmfnrInt()); mPostOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoPostResAmfnrInt()); EXIT_ANALYZER_FUNCTION(); } XCamReturn RkAiqAmfnrHandleInt::updateConfig(bool needSync) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; if (needSync) mCfgMutex.lock(); // if something changed if (updateAtt) { mCurAtt = mNewAtt; updateAtt = false; // TODO rk_aiq_uapi_amfnr_SetAttrib_v1(mAlgoCtx, &mCurAtt, false); sendSignal(); } if(updateIQpara) { mCurIQPara = mNewIQPara; updateIQpara = false; // TODO rk_aiq_uapi_amfnr_SetIQPara_v1(mAlgoCtx, &mCurIQPara, false); sendSignal(); } if(updateJsonpara) { mCurJsonPara = mNewJsonPara; updateJsonpara = false; // TODO rk_aiq_uapi_amfnr_SetJsonPara_v1(mAlgoCtx, &mCurJsonPara, false); sendSignal(); } if (needSync) mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAmfnrHandleInt::setAttrib(rk_aiq_mfnr_attrib_v1_t *att) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; mCfgMutex.lock(); //TODO // check if there is different between att & mCurAtt // if something changed, set att to mNewAtt, and // the new params will be effective later when updateConfig // called by RkAiqCore // if something changed if (0 != memcmp(&mCurAtt, att, sizeof(rk_aiq_mfnr_attrib_v1_t))) { mNewAtt = *att; updateAtt = true; waitSignal(); } mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAmfnrHandleInt::getAttrib(rk_aiq_mfnr_attrib_v1_t *att) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; rk_aiq_uapi_amfnr_GetAttrib_v1(mAlgoCtx, att); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAmfnrHandleInt::setIQPara(rk_aiq_mfnr_IQPara_V1_t *para) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; mCfgMutex.lock(); //TODO // check if there is different between att & mCurAtt // if something changed, set att to mNewAtt, and // the new params will be effective later when updateConfig // called by RkAiqCore // if something changed if (0 != memcmp(&mCurIQPara, para, sizeof(rk_aiq_mfnr_IQPara_V1_t))) { mNewIQPara = *para; updateIQpara = true; waitSignal(); } mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAmfnrHandleInt::getIQPara(rk_aiq_mfnr_IQPara_V1_t *para) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; rk_aiq_uapi_amfnr_GetIQPara_v1(mAlgoCtx, para); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAmfnrHandleInt::setJsonPara(rk_aiq_mfnr_JsonPara_V1_t *para) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; mCfgMutex.lock(); //TODO // check if there is different between att & mCurAtt // if something changed, set att to mNewAtt, and // the new params will be effective later when updateConfig // called by RkAiqCore // if something changed if (0 != memcmp(&mCurIQPara, para, sizeof(rk_aiq_mfnr_JsonPara_V1_t))) { mNewJsonPara = *para; updateJsonpara = true; waitSignal(); } mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAmfnrHandleInt::getJsonPara(rk_aiq_mfnr_JsonPara_V1_t *para) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; rk_aiq_uapi_amfnr_GetJsonPara_v1(mAlgoCtx, para); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAmfnrHandleInt::setLumaStrength(float fPercent) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; rk_aiq_uapi_amfnr_SetLumaTFStrength_v1(mAlgoCtx, fPercent); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAmfnrHandleInt::getLumaStrength(float *pPercent) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; rk_aiq_uapi_amfnr_GetLumaTFStrength_v1(mAlgoCtx, pPercent); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAmfnrHandleInt::setChromaStrength(float fPercent) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; rk_aiq_uapi_amfnr_SetChromaTFStrength_v1(mAlgoCtx, fPercent); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAmfnrHandleInt::getChromaStrength(float *pPercent) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; rk_aiq_uapi_amfnr_GetChromaTFStrength_v1(mAlgoCtx, pPercent); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAmfnrHandleInt::prepare() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; ret = RkAiqAmfnrHandle::prepare(); RKAIQCORE_CHECK_RET(ret, "amfnr handle prepare failed"); RkAiqAlgoConfigAmfnrInt* amfnr_config_int = (RkAiqAlgoConfigAmfnrInt*)mConfig; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->prepare(mConfig); RKAIQCORE_CHECK_RET(ret, "amfnr algo prepare failed"); EXIT_ANALYZER_FUNCTION(); return XCAM_RETURN_NO_ERROR; } XCamReturn RkAiqAmfnrHandleInt::preProcess() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoPreAmfnrInt* amfnr_pre_int = (RkAiqAlgoPreAmfnrInt*)mPreInParam; RkAiqAlgoPreResAmfnrInt* amfnr_pre_res_int = (RkAiqAlgoPreResAmfnrInt*)mPreOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqPreResComb* comb = &shared->preResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAmfnrHandle::preProcess(); if (ret) { comb->amfnr_pre_res = NULL; RKAIQCORE_CHECK_RET(ret, "amfnr handle preProcess failed"); } comb->amfnr_pre_res = NULL; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->pre_process(mPreInParam, mPreOutParam); RKAIQCORE_CHECK_RET(ret, "amfnr algo pre_process failed"); // set result to mAiqCore comb->amfnr_pre_res = (RkAiqAlgoPreResAmfnr*)amfnr_pre_res_int; EXIT_ANALYZER_FUNCTION(); return XCAM_RETURN_NO_ERROR; } XCamReturn RkAiqAmfnrHandleInt::processing() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoProcAmfnrInt* amfnr_proc_int = (RkAiqAlgoProcAmfnrInt*)mProcInParam; RkAiqAlgoProcResAmfnrInt* amfnr_proc_res_int = (RkAiqAlgoProcResAmfnrInt*)mProcOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqProcResComb* comb = &shared->procResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAmfnrHandle::processing(); if (ret) { comb->amfnr_proc_res = NULL; RKAIQCORE_CHECK_RET(ret, "amfnr handle processing failed"); } comb->amfnr_proc_res = NULL; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->processing(mProcInParam, mProcOutParam); RKAIQCORE_CHECK_RET(ret, "amfnr algo processing failed"); comb->amfnr_proc_res = (RkAiqAlgoProcResAmfnr*)amfnr_proc_res_int; EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAmfnrHandleInt::postProcess() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoPostAmfnrInt* amfnr_post_int = (RkAiqAlgoPostAmfnrInt*)mPostInParam; RkAiqAlgoPostResAmfnrInt* amfnr_post_res_int = (RkAiqAlgoPostResAmfnrInt*)mPostOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqPostResComb* comb = &shared->postResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAmfnrHandle::postProcess(); if (ret) { comb->amfnr_post_res = NULL; RKAIQCORE_CHECK_RET(ret, "amfnr handle postProcess failed"); return ret; } comb->amfnr_post_res = NULL; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->post_process(mPostInParam, mPostOutParam); RKAIQCORE_CHECK_RET(ret, "amfnr algo post_process failed"); // set result to mAiqCore comb->amfnr_post_res = (RkAiqAlgoPostResAmfnr*)amfnr_post_res_int ; EXIT_ANALYZER_FUNCTION(); return ret; } void RkAiqAgainHandleInt::init() { ENTER_ANALYZER_FUNCTION(); RkAiqAgainHandle::deInit(); mConfig = (RkAiqAlgoCom*)(new RkAiqAlgoConfigAgainInt()); mPreInParam = (RkAiqAlgoCom*)(new RkAiqAlgoPreAgainInt()); mPreOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoPreResAgainInt()); mProcInParam = (RkAiqAlgoCom*)(new RkAiqAlgoProcAgainInt()); mProcOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoProcResAgainInt()); mPostInParam = (RkAiqAlgoCom*)(new RkAiqAlgoPostAgainInt()); mPostOutParam = (RkAiqAlgoResCom*)(new RkAiqAlgoPostResAgainInt()); EXIT_ANALYZER_FUNCTION(); } XCamReturn RkAiqAgainHandleInt::updateConfig(bool needSync) { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; if (needSync) mCfgMutex.lock(); if (needSync) mCfgMutex.unlock(); EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAgainHandleInt::prepare() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; ret = RkAiqAgainHandle::prepare(); RKAIQCORE_CHECK_RET(ret, "again handle prepare failed"); RkAiqAlgoConfigAgainInt* again_config_int = (RkAiqAlgoConfigAgainInt*)mConfig; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->prepare(mConfig); RKAIQCORE_CHECK_RET(ret, "again algo prepare failed"); EXIT_ANALYZER_FUNCTION(); return XCAM_RETURN_NO_ERROR; } XCamReturn RkAiqAgainHandleInt::preProcess() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoPreAgainInt* again_pre_int = (RkAiqAlgoPreAgainInt*)mPreInParam; RkAiqAlgoPreResAgainInt* again_pre_res_int = (RkAiqAlgoPreResAgainInt*)mPreOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqPreResComb* comb = &shared->preResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAgainHandle::preProcess(); if (ret) { comb->again_pre_res = NULL; RKAIQCORE_CHECK_RET(ret, "again handle preProcess failed"); } comb->again_pre_res = NULL; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->pre_process(mPreInParam, mPreOutParam); RKAIQCORE_CHECK_RET(ret, "again algo pre_process failed"); // set result to mAiqCore comb->again_pre_res = (RkAiqAlgoPreResAgain*)again_pre_res_int; EXIT_ANALYZER_FUNCTION(); return XCAM_RETURN_NO_ERROR; } XCamReturn RkAiqAgainHandleInt::processing() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoProcAgainInt* again_proc_int = (RkAiqAlgoProcAgainInt*)mProcInParam; RkAiqAlgoProcResAgainInt* again_proc_res_int = (RkAiqAlgoProcResAgainInt*)mProcOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqProcResComb* comb = &shared->procResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; static int auvnr_proc_framecnt = 0; auvnr_proc_framecnt++; ret = RkAiqAgainHandle::processing(); if (ret) { comb->again_proc_res = NULL; RKAIQCORE_CHECK_RET(ret, "again handle processing failed"); } comb->again_proc_res = NULL; // TODO: fill procParam again_proc_int->iso = sharedCom->iso; again_proc_int->hdr_mode = sharedCom->working_mode; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->processing(mProcInParam, mProcOutParam); RKAIQCORE_CHECK_RET(ret, "again algo processing failed"); comb->again_proc_res = (RkAiqAlgoProcResAgain*)again_proc_res_int; EXIT_ANALYZER_FUNCTION(); return ret; } XCamReturn RkAiqAgainHandleInt::postProcess() { ENTER_ANALYZER_FUNCTION(); XCamReturn ret = XCAM_RETURN_NO_ERROR; RkAiqAlgoPostAgainInt* again_post_int = (RkAiqAlgoPostAgainInt*)mPostInParam; RkAiqAlgoPostResAgainInt* again_post_res_int = (RkAiqAlgoPostResAgainInt*)mPostOutParam; RkAiqCore::RkAiqAlgosGroupShared_t* shared = (RkAiqCore::RkAiqAlgosGroupShared_t*)(getGroupShared()); RkAiqPostResComb* comb = &shared->postResComb; RkAiqCore::RkAiqAlgosComShared_t* sharedCom = &mAiqCore->mAlogsComSharedParams; RkAiqIspStats* ispStats = shared->ispStats; ret = RkAiqAgainHandle::postProcess(); if (ret) { comb->again_post_res = NULL; RKAIQCORE_CHECK_RET(ret, "auvnr handle postProcess failed"); return ret; } comb->again_post_res = NULL; RkAiqAlgoDescription* des = (RkAiqAlgoDescription*)mDes; ret = des->post_process(mPostInParam, mPostOutParam); RKAIQCORE_CHECK_RET(ret, "auvnr algo post_process failed"); // set result to mAiqCore comb->again_post_res = (RkAiqAlgoPostResAgain*)again_post_res_int ; EXIT_ANALYZER_FUNCTION(); return ret; } }; //namespace RkCam