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.

123 lines
4.7 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 _AIQ_MANUAL_PARAMS_MANAGER_C_H_
#define _AIQ_MANUAL_PARAMS_MANAGER_C_H_
#include "rk_aiq_comm.h"
#include "aiq_mutex.h"
#include "common/rk_aiq_types_priv_c.h"
#include "uAPI2/rk_aiq_user_api_common.h"
#include "ipc/socket_client.h"
RKAIQ_BEGIN_DECLARE
// paramsManager
// Mode: Full Manual, Non Full Manual
// Full Manual: allocate and init module params (only part of manual, same as
// result buf)
// Non Full: module params buf are from calib ctx (contains maunual and auto
// params buf)
// ops: get/set/query by app; get/set/clear by handler
// opMode/en/bypass update
// auto/manual params update
// aec,awb,af
// hw: stats_cfg(path,win,weight), sw: algos
// global struct for part of xx_api_attrib, manage everythings
// except for params Auto
typedef struct rk_aiq_global_params_wrap_s {
// input & output params
rk_aiq_op_mode_t opMode;
bool en;
bool bypass;
// input params
int type;
int man_param_size;
void* man_param_ptr;
int aut_param_size;
void* aut_param_ptr;
} rk_aiq_global_params_wrap_t;
typedef struct rk_aiq_global_params_ptr_wrap_s {
rk_aiq_op_mode_t* opMode;
bool* en;
bool* bypass;
void* man_param_ptr;
void* aut_param_ptr;
} rk_aiq_global_params_ptr_wrap_t;
typedef struct AiqManager_s AiqManager_t;
typedef struct GlobalParamsManager_s {
// current
rk_aiq_global_params_ptr_wrap_t mGlobalParams[RESULT_TYPE_MAX_PARAM];
// storage for full manual params
AiqFullParams_t* mFullManualParamsProxy;
// for fast access
aiq_params_base_t* mFullManualParamsProxyArray[RESULT_TYPE_MAX_PARAM];
// mutex between set attrib and algo processing
AiqMutex_t mAlgoMutex[RESULT_TYPE_MAX_PARAM];
AiqMutex_t mMutex;
bool mIsHold;
bool mFullManualMode;
CamCalibDbV2Context_t* mCalibDb;
uint64_t mIsGlobalModulesUpdateBits;
AiqManager_t* rkAiqManager;
SocketClientCtx_t* _socket;
btnr_pixDomain_mode_t mBtnrPixDomainMode;
#if RKAIQ_HAVE_YUVME
bool yme_init_enable;
#endif
#if defined(ISP_HW_V33) || defined(ISP_HW_V35)
bool btnr_init_enable;
#endif
} GlobalParamsManager_t;
XCamReturn GlobalParamsManager_init(GlobalParamsManager_t* pMan, bool isFullManMode, CamCalibDbV2Context_t* calibDb);
void GlobalParamsManager_deinit(GlobalParamsManager_t* pMan);
XCamReturn GlobalParamsManager_switchCalibDb(GlobalParamsManager_t* pMan, CamCalibDbV2Context_t* calibDb, bool need_check);
XCamReturn GlobalParamsManager_set(GlobalParamsManager_t* pMan, rk_aiq_global_params_wrap_t* params);
XCamReturn GlobalParamsManager_get(GlobalParamsManager_t* pMan, rk_aiq_global_params_wrap_t* params);
XCamReturn GlobalParamsManager_getAndClearPending(GlobalParamsManager_t* pMan, rk_aiq_global_params_wrap_t* params);
XCamReturn GlobalParamsManager_getAndClearPendingLocked(GlobalParamsManager_t* pMan, rk_aiq_global_params_wrap_t* params);
aiq_params_base_t* GlobalParamsManager_getAndClearPending2(GlobalParamsManager_t* pMan, int type);
bool GlobalParamsManager_isManual(GlobalParamsManager_t* pMan, int type);
bool GlobalParamsManager_isManualLocked(GlobalParamsManager_t* pMan, int type);
void GlobalParamsManager_hold(GlobalParamsManager_t* pMan, bool hold);
bool GlobalParamsManager_isFullManualMode(GlobalParamsManager_t* pMan);
AiqFullParams_t* GlobalParamsManager_getFullManParamsProxy(GlobalParamsManager_t* pMan);
void GlobalParamsManager_lockAlgoParam(GlobalParamsManager_t* pMan, int type);
void GlobalParamsManager_unlockAlgoParam(GlobalParamsManager_t* pMan, int type);
bool GlobalParamsManager_getAndClearAlgoParamUpdateFlagLocked(GlobalParamsManager_t* pMan, int type);
XCamReturn GlobalParamsManager_checkAlgoEnableBypass(GlobalParamsManager_t* pMan, int type, bool* en, bool* bypass);
#define GlobalParamsManager_setManager(pMan, pRkAiqManager) \
(pMan)->rkAiqManager = pRkAiqManager
#define GlobalParamsManager_setSocket(pMan, socket) \
(pMan)->_socket = socket
XCamReturn GlobalParamsManager_get_ModuleEn(GlobalParamsManager_t* pMan, rk_aiq_module_list_t* mod);
XCamReturn GlobalParamsManager_set_ModuleEn(GlobalParamsManager_t* pMan, rk_aiq_module_list_t* mod);
RKAIQ_END_DECLARE
#endif