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