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