xref: /OK3568_Linux_fs/external/camera_engine_rkaiq/rkaiq/hwi/CamHwBase.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 _CAM_HW_BASE_H_
19 #define _CAM_HW_BASE_H_
20 
21 //#include <map>
22 #include <string>
23 #include "xcam_thread.h"
24 #include "ICamHw.h"
25 #include "v4l2_device.h"
26 #include "fake_v4l2_device.h"
27 #include "poll_thread.h"
28 #ifndef RK_SIMULATOR_HW
29 #include "FlashLight.h"
30 #endif
31 
32 #include "rk_aiq.h"
33 
34 using namespace XCam;
35 
36 namespace RkCam {
37 
38 class CamHwBase
39     : public ICamHw
40     , public PollCallback {
41 public:
42     explicit CamHwBase();
43     virtual ~CamHwBase();
44     // from ICamHw
45     virtual XCamReturn init(const char* sns_ent_name);
46     virtual XCamReturn deInit();
47 #ifdef RKAIQ_ENABLE_PARSER_V1
setCalib(const CamCalibDbContext_t * calib)48     virtual void setCalib(const CamCalibDbContext_t* calib) {
49         mCalibDb = calib;
50     }
51 #endif
setCalib(const CamCalibDbV2Context_t * calibv2)52     virtual void setCalib(const CamCalibDbV2Context_t* calibv2) {
53         mCalibDbV2 = calibv2;
54     }
55     virtual XCamReturn prepare(uint32_t width, uint32_t height, int mode, int t_dealy, int g_delay);
56     virtual XCamReturn start();
57     virtual XCamReturn stop();
58     virtual XCamReturn pause();
59     virtual XCamReturn resume();
swWorkingModeDyn(int mode)60     virtual XCamReturn swWorkingModeDyn(int mode) {
61         return XCAM_RETURN_NO_ERROR;
62     };
keepHwStAtStop(bool ks)63     virtual void keepHwStAtStop(bool ks) {
64         mKpHwSt = ks;
65     };
66     virtual XCamReturn getSensorModeData(const char* sns_ent_name,
67                                          rk_aiq_exposure_sensor_descriptor& sns_des);
68     virtual XCamReturn setHwResListener(HwResListener* resListener);
setHdrProcessCount(rk_aiq_luma_params_t luma_params)69     virtual XCamReturn setHdrProcessCount(rk_aiq_luma_params_t luma_params) {
70         return XCAM_RETURN_ERROR_FAILED;
71     };
applyAnalyzerResult(SmartPtr<SharedItemBase> base,bool sync)72     virtual XCamReturn applyAnalyzerResult(SmartPtr<SharedItemBase> base, bool sync) {
73         return  XCAM_RETURN_ERROR_FAILED;
74     };
applyAnalyzerResult(cam3aResultList & list)75     virtual XCamReturn applyAnalyzerResult(cam3aResultList& list) {
76         return  XCAM_RETURN_ERROR_FAILED;
77     }
78     // from PollCallback
79     virtual XCamReturn poll_buffer_ready (SmartPtr<VideoBuffer> &buf, int type);
80     virtual XCamReturn poll_buffer_failed (int64_t timestamp, const char *msg);
81     virtual XCamReturn poll_event_ready (uint32_t sequence, int type);
82     virtual XCamReturn poll_event_failed (int64_t timestamp, const char *msg);
83     virtual XCamReturn poll_buffer_ready (SmartPtr<VideoBuffer> &buf);
poll_buffer_ready(SmartPtr<V4l2BufferProxy> & buf,int dev_index)84     virtual XCamReturn poll_buffer_ready (SmartPtr<V4l2BufferProxy> &buf, int dev_index) { return XCAM_RETURN_ERROR_FAILED; };
85 
notify_capture_raw()86     virtual XCamReturn notify_capture_raw() {
87         return  XCAM_RETURN_ERROR_FAILED;
88     }
89     virtual XCamReturn capture_raw_ctl(capture_raw_t type, int count = 0,
90                                        const char* capture_dir = nullptr, \
91                                        char* output_dir = nullptr) {
92         return  XCAM_RETURN_ERROR_FAILED;
93     }
enqueueRawBuffer(void * vbuf,bool sync)94     virtual XCamReturn enqueueRawBuffer(void *vbuf, bool sync) {
95         return  XCAM_RETURN_ERROR_FAILED;
96     }
enqueueRawFile(const char * path)97     virtual XCamReturn enqueueRawFile(const char *path) {
98         return  XCAM_RETURN_ERROR_FAILED;
99     }
registRawdataCb(void (* callback)(void *))100     virtual XCamReturn registRawdataCb(void (*callback)(void *)) {
101         return  XCAM_RETURN_ERROR_FAILED;
102     }
rawdataPrepare(rk_aiq_raw_prop_t prop)103     virtual XCamReturn rawdataPrepare(rk_aiq_raw_prop_t prop) {
104         return  XCAM_RETURN_ERROR_FAILED;
105     }
setSensorFlip(bool mirror,bool flip,int skip_frm_cnt)106     virtual XCamReturn setSensorFlip(bool mirror, bool flip, int skip_frm_cnt) {
107         return  XCAM_RETURN_ERROR_FAILED;
108     }
getSensorFlip(bool & mirror,bool & flip)109     virtual XCamReturn getSensorFlip(bool& mirror, bool& flip) {
110         return  XCAM_RETURN_ERROR_FAILED;
111     }
getZoomPosition(int & position)112     virtual XCamReturn getZoomPosition(int& position) {
113         return  XCAM_RETURN_ERROR_FAILED;
114     }
setLensVcmCfg(rk_aiq_lens_vcmcfg & lens_cfg)115     virtual XCamReturn setLensVcmCfg(rk_aiq_lens_vcmcfg& lens_cfg) {
116         return  XCAM_RETURN_ERROR_FAILED;
117     }
getLensVcmCfg(rk_aiq_lens_vcmcfg & lens_cfg)118     virtual XCamReturn getLensVcmCfg(rk_aiq_lens_vcmcfg& lens_cfg) {
119         return  XCAM_RETURN_ERROR_FAILED;
120     }
FocusCorrection()121     virtual XCamReturn FocusCorrection() {
122         return  XCAM_RETURN_ERROR_FAILED;
123     }
ZoomCorrection()124     virtual XCamReturn ZoomCorrection() {
125         return  XCAM_RETURN_ERROR_FAILED;
126     }
setAngleZ(float angleZ)127     virtual XCamReturn setAngleZ(float angleZ) {
128         return  XCAM_RETURN_ERROR_FAILED;
129     }
getShareMemOps(isp_drv_share_mem_ops_t ** mem_ops)130     virtual void getShareMemOps(isp_drv_share_mem_ops_t** mem_ops) {};
getEffectiveIspParams(rkisp_effect_params_v20 & ispParams,uint32_t frame_id)131     virtual XCamReturn getEffectiveIspParams(rkisp_effect_params_v20& ispParams, uint32_t frame_id) {
132         return  XCAM_RETURN_ERROR_FAILED;
133     };
getIspModuleEnState()134     uint64_t getIspModuleEnState() {
135         return true;
136     };
setIspStreamMode(rk_isp_stream_mode_t mode)137     virtual XCamReturn setIspStreamMode(rk_isp_stream_mode_t mode) {
138         return XCAM_RETURN_ERROR_FAILED;
139     }
getIspStreamMode()140     virtual rk_isp_stream_mode_t getIspStreamMode() {
141         return RK_ISP_STREAM_MODE_INVALID;
142     }
setCamPhyId(int phyId)143     virtual void setCamPhyId(int phyId) {
144         mCamPhyId = phyId;
145     }
getCamPhyId()146     virtual int getCamPhyId() { return mCamPhyId;}
setGroupMode(bool bGroup,bool bMain)147     virtual void setGroupMode(bool bGroup, bool bMain) { mIsGroupMode = bGroup; mIsMain = bMain;}
setTbInfo(rk_aiq_tb_info_t & info)148     virtual void setTbInfo(rk_aiq_tb_info_t& info) {
149         mTbInfo = info;
150     }
setDevBufCnt(const std::map<std::string,int> & dev_buf_cnt_map)151     virtual void setDevBufCnt(const std::map<std::string, int>& dev_buf_cnt_map) {
152         mDevBufCntMap = dev_buf_cnt_map;
153     }
reset_hardware()154     virtual XCamReturn reset_hardware() {
155         return XCAM_RETURN_ERROR_FAILED;
156     };
rawReproc_genIspParams(uint32_t sequence,rk_aiq_frame_info_t * offline_finfo,int mode)157     virtual XCamReturn rawReproc_genIspParams (uint32_t sequence, rk_aiq_frame_info_t *offline_finfo, int mode) {
158         return XCAM_RETURN_ERROR_FAILED;
159     }
rawReProc_prepare(uint32_t sequence,rk_aiq_frame_info_t * offline_finfo)160     virtual XCamReturn rawReProc_prepare (uint32_t sequence, rk_aiq_frame_info_t *offline_finfo) {
161         return XCAM_RETURN_ERROR_FAILED;
162     }
setUserSensorFormat(uint16_t width,uint16_t height,uint16_t code)163     virtual void setUserSensorFormat(uint16_t width, uint16_t height, uint16_t code) { }
164     HwResListener* mHwResLintener;
165 
166 protected:
167     SmartPtr<V4l2Device> mIsppFecParamsDev;
168     SmartPtr<V4l2Device> mIspLumaDev;
169     SmartPtr<V4l2Device> mIspStatsDev;
170     SmartPtr<V4l2Device> mIspParamsDev;
171     SmartPtr<V4l2SubDevice> mIspCoreDev;
172     SmartPtr<V4l2SubDevice> mSensorDev;
173     SmartPtr<V4l2SubDevice> mLensDev;
174     SmartPtr<V4l2SubDevice> mIrcutDev;
175     SmartPtr<V4l2Device> mIspSpDev;
176 #ifndef RK_SIMULATOR_HW
177     SmartPtr<FlashLightHw> mFlashLight;
178     SmartPtr<FlashLightHw> mFlashLightIr;
179 #endif
180     int mWorkingMode;
181     const CamCalibDbContext_t* mCalibDb;
182     const CamCalibDbV2Context_t* mCalibDbV2;
183     bool mKpHwSt;
184     int mCamPhyId;
185     bool mIsGroupMode;
186     bool mIsMain;
187     rk_aiq_tb_info_t mTbInfo;
188     std::map<std::string, int> mDevBufCntMap;
189 
190  private:
191     XCAM_DEAD_COPY (CamHwBase);
192 };
193 
194 } //namespace RkCam
195 
196 #endif
197