xref: /OK3568_Linux_fs/external/camera_engine_rkaiq/rkaiq/hwi/ICamHw.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  *  Copyright (c) 2019 Rockchip Corporation
3*4882a593Smuzhiyun  *
4*4882a593Smuzhiyun  * Licensed under the Apache License, Version 2.0 (the "License");
5*4882a593Smuzhiyun  * you may not use this file except in compliance with the License.
6*4882a593Smuzhiyun  * You may obtain a copy of the License at
7*4882a593Smuzhiyun  *
8*4882a593Smuzhiyun  *      http://www.apache.org/licenses/LICENSE-2.0
9*4882a593Smuzhiyun  *
10*4882a593Smuzhiyun  * Unless required by applicable law or agreed to in writing, software
11*4882a593Smuzhiyun  * distributed under the License is distributed on an "AS IS" BASIS,
12*4882a593Smuzhiyun  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*4882a593Smuzhiyun  * See the License for the specific language governing permissions and
14*4882a593Smuzhiyun  * limitations under the License.
15*4882a593Smuzhiyun  *
16*4882a593Smuzhiyun  */
17*4882a593Smuzhiyun 
18*4882a593Smuzhiyun #ifndef _ICAMHW_H_
19*4882a593Smuzhiyun #define _ICAMHW_H_
20*4882a593Smuzhiyun 
21*4882a593Smuzhiyun #include "video_buffer.h"
22*4882a593Smuzhiyun #include "smartptr.h"
23*4882a593Smuzhiyun #include "rk_aiq_types.h"
24*4882a593Smuzhiyun #include "rk_aiq_pool.h"
25*4882a593Smuzhiyun #include "RkAiqCalibDbV2Helper.h"
26*4882a593Smuzhiyun #include "rk_aiq.h"
27*4882a593Smuzhiyun #include "rk_aiq_offline_raw.h"
28*4882a593Smuzhiyun namespace RkCam {
29*4882a593Smuzhiyun 
30*4882a593Smuzhiyun using namespace XCam;
31*4882a593Smuzhiyun 
32*4882a593Smuzhiyun typedef struct ispHwEvt_s {
~ispHwEvt_sispHwEvt_s33*4882a593Smuzhiyun     virtual ~ispHwEvt_s() {};
34*4882a593Smuzhiyun     int evt_code;
35*4882a593Smuzhiyun     union {
36*4882a593Smuzhiyun         uint32_t frame_id;
37*4882a593Smuzhiyun     } msg;
38*4882a593Smuzhiyun } ispHwEvt_t;
39*4882a593Smuzhiyun 
40*4882a593Smuzhiyun class IsppStatsListener {
41*4882a593Smuzhiyun public:
IsppStatsListener()42*4882a593Smuzhiyun     IsppStatsListener() {};
~IsppStatsListener()43*4882a593Smuzhiyun     virtual ~IsppStatsListener() {};
44*4882a593Smuzhiyun     virtual XCamReturn isppStatsCb(SmartPtr<VideoBuffer>& isppStats) = 0;
45*4882a593Smuzhiyun private:
46*4882a593Smuzhiyun     XCAM_DEAD_COPY (IsppStatsListener);
47*4882a593Smuzhiyun };
48*4882a593Smuzhiyun 
49*4882a593Smuzhiyun class IspLumaListener {
50*4882a593Smuzhiyun public:
IspLumaListener()51*4882a593Smuzhiyun     IspLumaListener() {};
~IspLumaListener()52*4882a593Smuzhiyun     virtual ~IspLumaListener() {};
53*4882a593Smuzhiyun     virtual XCamReturn ispLumaCb(SmartPtr<VideoBuffer>& ispLuma) = 0;
54*4882a593Smuzhiyun private:
55*4882a593Smuzhiyun     XCAM_DEAD_COPY (IspLumaListener);
56*4882a593Smuzhiyun };
57*4882a593Smuzhiyun 
58*4882a593Smuzhiyun class IspStatsListener {
59*4882a593Smuzhiyun public:
IspStatsListener()60*4882a593Smuzhiyun     IspStatsListener() {};
~IspStatsListener()61*4882a593Smuzhiyun     virtual ~IspStatsListener() {};
62*4882a593Smuzhiyun     virtual XCamReturn ispStatsCb(SmartPtr<VideoBuffer>& ispStats) = 0;
63*4882a593Smuzhiyun private:
64*4882a593Smuzhiyun     XCAM_DEAD_COPY (IspStatsListener);
65*4882a593Smuzhiyun };
66*4882a593Smuzhiyun 
67*4882a593Smuzhiyun class IspEvtsListener {
68*4882a593Smuzhiyun public:
IspEvtsListener()69*4882a593Smuzhiyun     IspEvtsListener() {};
~IspEvtsListener()70*4882a593Smuzhiyun     virtual ~IspEvtsListener() {};
71*4882a593Smuzhiyun     virtual XCamReturn ispEvtsCb(SmartPtr<ispHwEvt_t> evt) = 0;
72*4882a593Smuzhiyun private:
73*4882a593Smuzhiyun     XCAM_DEAD_COPY (IspEvtsListener);
74*4882a593Smuzhiyun };
75*4882a593Smuzhiyun 
76*4882a593Smuzhiyun class HwResListener {
77*4882a593Smuzhiyun public:
HwResListener()78*4882a593Smuzhiyun     HwResListener() {};
~HwResListener()79*4882a593Smuzhiyun     virtual ~HwResListener() {};
80*4882a593Smuzhiyun     virtual XCamReturn hwResCb(SmartPtr<VideoBuffer>& resources) = 0;
81*4882a593Smuzhiyun private:
82*4882a593Smuzhiyun     XCAM_DEAD_COPY (HwResListener);
83*4882a593Smuzhiyun };
84*4882a593Smuzhiyun 
85*4882a593Smuzhiyun class ICamHw {
86*4882a593Smuzhiyun public:
ICamHw()87*4882a593Smuzhiyun     ICamHw() {};
~ICamHw()88*4882a593Smuzhiyun     virtual ~ICamHw() {};
89*4882a593Smuzhiyun     virtual XCamReturn init(const char* sns_ent_name) = 0;
90*4882a593Smuzhiyun     virtual XCamReturn deInit() = 0;
91*4882a593Smuzhiyun #ifdef RKAIQ_ENABLE_PARSER_V1
92*4882a593Smuzhiyun     virtual void setCalib(const CamCalibDbContext_t* calib) = 0;
93*4882a593Smuzhiyun #endif
94*4882a593Smuzhiyun     virtual void setCalib(const CamCalibDbV2Context_t* calibv2) = 0;
95*4882a593Smuzhiyun     virtual XCamReturn prepare(uint32_t width, uint32_t height, int mode, int t_delay, int g_delay) = 0;
96*4882a593Smuzhiyun     virtual XCamReturn start() = 0;
97*4882a593Smuzhiyun     virtual XCamReturn stop() = 0;
98*4882a593Smuzhiyun     virtual XCamReturn pause() = 0;
99*4882a593Smuzhiyun     virtual XCamReturn resume() = 0;
100*4882a593Smuzhiyun     virtual void keepHwStAtStop(bool ks) = 0;
101*4882a593Smuzhiyun     virtual XCamReturn swWorkingModeDyn(int mode) = 0;
102*4882a593Smuzhiyun     virtual XCamReturn setIspStreamMode(rk_isp_stream_mode_t mode) = 0;
103*4882a593Smuzhiyun     virtual rk_isp_stream_mode_t getIspStreamMode() = 0;
104*4882a593Smuzhiyun     virtual XCamReturn getSensorModeData(const char* sns_ent_name,
105*4882a593Smuzhiyun                                          rk_aiq_exposure_sensor_descriptor& sns_des) = 0;
106*4882a593Smuzhiyun     virtual XCamReturn setHdrProcessCount(rk_aiq_luma_params_t luma_params) = 0;
107*4882a593Smuzhiyun     virtual XCamReturn applyAnalyzerResult(SmartPtr<SharedItemBase> base, bool sync) = 0;
108*4882a593Smuzhiyun     virtual XCamReturn applyAnalyzerResult(cam3aResultList& list) = 0;
109*4882a593Smuzhiyun     virtual XCamReturn setHwResListener(HwResListener* resListener) = 0;
110*4882a593Smuzhiyun     virtual XCamReturn setModuleCtl(rk_aiq_module_id_t mId, bool mod_en) = 0;
111*4882a593Smuzhiyun     virtual XCamReturn getModuleCtl(rk_aiq_module_id_t mId, bool& mod_en) = 0;
112*4882a593Smuzhiyun     virtual XCamReturn notify_capture_raw() = 0;
113*4882a593Smuzhiyun     virtual XCamReturn capture_raw_ctl(capture_raw_t type, int count = 0,
114*4882a593Smuzhiyun                                        const char* capture_dir = nullptr,
115*4882a593Smuzhiyun                                        char* output_dir = nullptr) = 0;
116*4882a593Smuzhiyun     virtual XCamReturn enqueueRawBuffer(void *vbuf, bool sync) = 0;
117*4882a593Smuzhiyun     virtual XCamReturn enqueueRawFile(const char *path) = 0;
118*4882a593Smuzhiyun     virtual XCamReturn registRawdataCb(void (*callback)(void *)) = 0;
119*4882a593Smuzhiyun     virtual XCamReturn rawdataPrepare(rk_aiq_raw_prop_t prop) = 0;
120*4882a593Smuzhiyun     virtual XCamReturn setSensorFlip(bool mirror, bool flip, int skip_frm_cnt) = 0;
121*4882a593Smuzhiyun     virtual XCamReturn getSensorFlip(bool& mirror, bool& flip) = 0;
122*4882a593Smuzhiyun     virtual XCamReturn getSensorCrop(rk_aiq_rect_t& rect) = 0;
123*4882a593Smuzhiyun     virtual XCamReturn setSensorCrop(rk_aiq_rect_t& rect) = 0;
124*4882a593Smuzhiyun     virtual XCamReturn getZoomPosition(int& position) = 0;
125*4882a593Smuzhiyun     virtual XCamReturn getLensVcmCfg(rk_aiq_lens_vcmcfg& lens_cfg) = 0;
126*4882a593Smuzhiyun     virtual XCamReturn setLensVcmCfg(rk_aiq_lens_vcmcfg& lens_cfg) = 0;
127*4882a593Smuzhiyun     virtual XCamReturn FocusCorrection() = 0;
128*4882a593Smuzhiyun     virtual XCamReturn ZoomCorrection() = 0;
129*4882a593Smuzhiyun     virtual XCamReturn setAngleZ(float angleZ) = 0;
130*4882a593Smuzhiyun     virtual void getShareMemOps(isp_drv_share_mem_ops_t** mem_ops) = 0;
131*4882a593Smuzhiyun     virtual XCamReturn getEffectiveIspParams(rkisp_effect_params_v20& ispParams, uint32_t frame_id) = 0;
132*4882a593Smuzhiyun     virtual uint64_t getIspModuleEnState() = 0;
133*4882a593Smuzhiyun     virtual XCamReturn get_sp_resolution(int &width, int &height, int &aligned_w, int &aligned_h) = 0;
134*4882a593Smuzhiyun     virtual void setCamPhyId(int phyId) = 0;
135*4882a593Smuzhiyun     virtual int getCamPhyId() = 0;
136*4882a593Smuzhiyun     virtual void setGroupMode(bool bGroup, bool bMain) = 0;
137*4882a593Smuzhiyun #if RKAIQ_HAVE_PDAF
138*4882a593Smuzhiyun     virtual bool get_pdaf_support() = 0;
139*4882a593Smuzhiyun #endif
140*4882a593Smuzhiyun     virtual void setTbInfo(rk_aiq_tb_info_t& info) = 0;
141*4882a593Smuzhiyun     virtual void setDevBufCnt(const std::map<std::string, int>& dev_buf_cnt_map) = 0;
142*4882a593Smuzhiyun     virtual XCamReturn reset_hardware() = 0;
143*4882a593Smuzhiyun     virtual XCamReturn rawReproc_genIspParams (uint32_t sequence, rk_aiq_frame_info_t *offline_finfo, int mode) = 0;
144*4882a593Smuzhiyun     virtual XCamReturn rawReProc_prepare (uint32_t sequence, rk_aiq_frame_info_t *offline_finfo) = 0;
145*4882a593Smuzhiyun     virtual void setUserSensorFormat(uint16_t width, uint16_t height, uint16_t code) = 0;
146*4882a593Smuzhiyun private:
147*4882a593Smuzhiyun     XCAM_DEAD_COPY (ICamHw);
148*4882a593Smuzhiyun };
149*4882a593Smuzhiyun 
150*4882a593Smuzhiyun } //namespace RkCam
151*4882a593Smuzhiyun 
152*4882a593Smuzhiyun #endif
153