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