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.

99 lines
3.3 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_AIBNR_MANAGER_H_
#define _RK_AIBNR_MANAGER_H_
#include "hwi_c/aiq_CamHwBase.h"
#include "rk-aiisp-config.h"
#include "c_base/aiq_mutex.h"
RKAIQ_BEGIN_DECLARE
#define AIBNR_IIR_BUF_CNT 3
#define AIBNR_GAIN_BUF_CNT 4
#define AIBNR_AIPRE_BUF_CNT 3
#define AIBNR_VPSL_BUF_CNT 3
#define AIBNR_AIISP_BUF_CNT 3
#define AIBNR_ISP_BUF_MAX AIBNR_GAIN_BUF_CNT
#define AIBNR_AIISP_MODE BOTHEVENT_TO_AIQ
#if RKAIQ_HAVE_AIBNR
typedef struct ispbuf_addr_s {
char *iir_addr;
char *gain_addr;
char *aipre_addr;
char *vpsl_addr;
char *aiisp_addr;
} ispbuf_addr_t;
typedef struct AibnrModelBuf_s {
bool valid;
char model_file[AIBNR_ISO_STEP_MAX][AIBNR_MODEL_PATH_LEN];
char *model_buf[AIBNR_ISO_STEP_MAX];
} AibnrModelBuf_t;
typedef struct AibnrManager_s AibnrManager_t;
typedef struct AibnrManager_s {
bool is_enable;
bool is_bypass;
bool is_start;
bool is_param_update;
bool is_parambuf_prepare;
int dump_raw_num;
uint32_t model_max_runcnt;
uint32_t isp_acq_width;
uint32_t isp_acq_height;
rk_aiq_isp_aibnr_params_t last_aibnr_params;
struct rkaiisp_param_info param_info;
struct rkaiisp_ispbuf_info ispbuf_info;
struct rkisp_aiisp_st isp_out;
struct rkisp_aiisp_st isp_in;
struct rkisp_aiisp_cfg mAibnrCfg;
AibnrModelBuf_t mAibnrModelBuf;
RkAiqAibnrModelInfo_t mAibnrModelInfo;
CamCalibDbV2Context_t* pCalibDbV2;
AiqCamHwBase_t* pCamHw;
ispbuf_addr_t ispbuf_addr[AIBNR_ISP_BUF_MAX];
bool aiisp_idx_pool[AIBNR_AIISP_BUF_CNT];
AiqMutex_t idx_pool_mutex;
AiqMutex_t iq_param_mutex;
AiqMutex_t model_buf_mutex;
} AibnrManager_t;
XCamReturn AibnrManager_init(AibnrManager_t* pAibnrManager);
XCamReturn AibnrManager_setCalib(AibnrManager_t* pAibnrManager, CamCalibDbV2Context_t* pCalibDbV2);
XCamReturn AibnrManager_deinit(AibnrManager_t* pAibnrManager);
XCamReturn AibnrManager_prepare(AibnrManager_t* pAibnrManager, AiqCamHwBase_t* pCamHw, CamCalibDbV2Context_t* pCalibDbV2,
uint32_t isp_acq_width, uint32_t isp_acq_height);
XCamReturn AibnrManager_start(AibnrManager_t* pAibnrManager);
XCamReturn AibnrManager_stop(AibnrManager_t* pAibnrManager);
XCamReturn AibnrManager_updateParams(AibnrManager_t* pAibnrManager, rk_aiq_isp_aibnr_params_t *aibnr_params, uint32_t frame_id);
XCamReturn AibnrManager_hdlEvent(AibnrManager_t* pAibnrManager, AiqHwAinnEvt_t *event);
XCamReturn AibnrManager_setCalib(AibnrManager_t* pAibnrManager, CamCalibDbV2Context_t* pCalibDbV2);
bool AibnrManager_isNeedRknn(AibnrManager_t* pAibnrManager);
int AibnrManager_dumpRaw(AibnrManager_t* pAibnrManager, int dump_raw_num);
#endif
RKAIQ_END_DECLARE
#endif