You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
151 lines
5.4 KiB
151 lines
5.4 KiB
/*
|
|
* Copyright (c) 2024 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.
|
|
*
|
|
*/
|
|
|
|
#ifndef _RK_AIQ_MANAGER_C_H_
|
|
#define _RK_AIQ_MANAGER_C_H_
|
|
|
|
#include "hwi_c/aiq_CamHwBase.h"
|
|
#include "aiq_core_c/aiq_core.h"
|
|
#include "RkAiqGlobalParamsManager_c.h"
|
|
#include "RkAibnrManager.h"
|
|
#include "RknnManager.h"
|
|
|
|
RKAIQ_BEGIN_DECLARE
|
|
|
|
typedef enum aiq_state_e {
|
|
AIQ_STATE_INVALID,
|
|
AIQ_STATE_INITED,
|
|
AIQ_STATE_PREPARED,
|
|
AIQ_STATE_STARTED,
|
|
AIQ_STATE_STOPED,
|
|
} aiq_state_t;
|
|
|
|
typedef struct AiqManager_s {
|
|
uint32_t sensor_output_width;
|
|
uint32_t sensor_output_height;
|
|
// post aiisp status
|
|
bool ainr_status;
|
|
AiqCamHwBase_t* mCamHw;
|
|
AiqCore_t* mRkAiqAnalyzer;
|
|
rk_aiq_error_cb mErrCb;
|
|
rk_aiq_metas_cb mMetasCb;
|
|
rk_aiq_hwevt_cb mHwEvtCb;
|
|
rk_aiq_aiispCtx_t mAiispCtx;
|
|
void* mHwEvtCbCtx;
|
|
AiqAnalyzerCb_t mAnalyzeCb;
|
|
AiqHwResListener_t mHwResCb;
|
|
const char* mSnsEntName;
|
|
rk_aiq_tb_info_t mTbInfo;
|
|
CamCalibDbV2Context_t* mCalibDbV2;
|
|
CamCalibDbV2Context_t* tuningCalib;
|
|
bool mNeedFreeCalib;
|
|
rk_aiq_working_mode_t mWorkingMode;
|
|
rk_aiq_working_mode_t mOldWkModeForGray;
|
|
bool mWkSwitching;
|
|
uint32_t mWidth;
|
|
uint32_t mHeight;
|
|
int _state;
|
|
bool mCurMirror;
|
|
bool mCurFlip;
|
|
int mCamPhyId;
|
|
#ifdef RKAIQ_ENABLE_CAMGROUP
|
|
AiqCamGroupManager_t* mCamGroupCoreManager;
|
|
#endif
|
|
bool mIsMain;
|
|
int mTBStatsCnt;
|
|
uint32_t mLastAweekId;
|
|
GlobalParamsManager_t mGlobalParamsManager;
|
|
/* aiq_params_base_t* */
|
|
AiqList_t* mParamsList;
|
|
#if RKAIQ_HAVE_AIBNR
|
|
AibnrManager_t mAibnrManager;
|
|
#endif
|
|
RknnManager_t mRknnManager;
|
|
|
|
#if RKAIQ_HAVE_DUMPSYS
|
|
int (*dump_mods)(void* self, st_string* result, int argc, void* argv[]);
|
|
int (*dump_raw)(void* self, st_string* result, int argc, void* argv[]);
|
|
#endif
|
|
} AiqManager_t;
|
|
|
|
XCamReturn AiqManager_init(AiqManager_t* pAiqManager, const char* sns_ent_name, rk_aiq_error_cb err_cb, rk_aiq_metas_cb metas_cb);
|
|
XCamReturn AiqManager_deinit(AiqManager_t* pAiqManager);
|
|
XCamReturn AiqManager_prepare(AiqManager_t* pAiqManager, uint32_t width, uint32_t height, rk_aiq_working_mode_t mode);
|
|
XCamReturn AiqManager_start(AiqManager_t* pAiqManager);
|
|
XCamReturn AiqManager_stop(AiqManager_t* pAiqManager, bool keep_ext_hw_st);
|
|
|
|
#define AiqManager_setHwEvtCb(pAiqManager, hwevt_cb, evt_cb_ctx) \
|
|
pAiqManager->mHwEvtCbCtx = evt_cb_ctx; \
|
|
pAiqManager->mHwEvtCb = hwevt_cb
|
|
|
|
void AiqManager_setAiqCalibDb(AiqManager_t* pAiqManager, const CamCalibDbV2Context_t* calibDb);
|
|
|
|
#define AiqManager_unsetTuningCalibDb(pAiqManager, isNeedFreeCalib) \
|
|
pAiqManager->mNeedFreeCalib = isNeedFreeCalib
|
|
|
|
#define AiqManager_setAiispCb(pAiqManager, aiispCtx) \
|
|
pAiqManager->mAiispCtx = aiispCtx
|
|
|
|
#define AiqManager_setTbInfo(pAiqManager, tbinfo) \
|
|
pAiqManager->mTbInfo = *tbinfo
|
|
|
|
#define AiqManager_setCamPhyId(pAiqManager, phyId) \
|
|
pAiqManager->mCamPhyId = phyId
|
|
|
|
#define AiqManager_getCamPhyId(pAiqManager) \
|
|
pAiqManager->mCamPhyId
|
|
|
|
XCamReturn AiqManager_updateCalibDb(AiqManager_t* pAiqManager, const CamCalibDbV2Context_t* newCalibDb);
|
|
XCamReturn AiqManager_syncSofEvt(AiqManager_t* pAiqManager, AiqHwEvt_t* hwres);
|
|
#define AiqManager_rkAiqCalcDone(pAiqManager, results) \
|
|
AiqManager_applyAnalyzerResult(pAiqManager, results, false)
|
|
|
|
XCamReturn AiqManager_setModuleCtl(AiqManager_t* pAiqManager, rk_aiq_module_id_t mId, bool mod_en);
|
|
XCamReturn AiqManager_getModuleCtl(AiqManager_t* pAiqManager, rk_aiq_module_id_t mId, bool* mod_en);
|
|
XCamReturn AiqManager_enqueueRawBuffer(AiqManager_t* pAiqManager, void *rawdata, bool sync);
|
|
XCamReturn AiqManager_enqueueRawFile(AiqManager_t* pAiqManager, const char *path);
|
|
XCamReturn AiqManager_registRawdataCb(AiqManager_t* pAiqManager, void (*callback)(void *));
|
|
XCamReturn AiqManager_rawdataPrepare(AiqManager_t* pAiqManager, rk_aiq_raw_prop_t prop);
|
|
XCamReturn AiqManager_setMirrorFlip(AiqManager_t* pAiqManager, bool mirror, bool flip, int skip_frm_cnt);
|
|
XCamReturn AiqManager_getMirrorFlip(AiqManager_t* pAiqManager, bool* mirror, bool* flip);
|
|
void AiqManager_setMulCamConc(AiqManager_t* pAiqManager, bool cc);
|
|
|
|
#define AiqManager_getCurrentCalibDBV2(pAiqManager) \
|
|
pAiqManager->mCalibDbV2
|
|
|
|
XCamReturn AiqManager_calibTuning(AiqManager_t* pAiqManager, CamCalibDbV2Context_t* aiqCalib,
|
|
TuningCalib* change_list);
|
|
XCamReturn AiqManager_setVicapStreamMode(AiqManager_t* pAiqManager, int on, bool isSingleMode);
|
|
#ifdef RKAIQ_ENABLE_CAMGROUP
|
|
|
|
#define AiqManager_setCamGroupManager(pAiqManager, cam_group_manager, isMain) \
|
|
(pAiqManager)->mCamGroupCoreManager = cam_group_manager; (pAiqManager)->mIsMain = isMain
|
|
|
|
#endif
|
|
|
|
#define AiqManager_getAiqState(pAiqManager) \
|
|
pAiqManager->_state
|
|
|
|
#define AiqManager_getWorkingMode(pAiqManager) \
|
|
pAiqManager->mWorkingMode
|
|
|
|
XCamReturn AiqManager_applyAnalyzerResult(AiqManager_t* pAiqManager, AiqFullParams_t* results, bool ignoreIsUpdate);
|
|
|
|
RKAIQ_END_DECLARE
|
|
|
|
#endif
|