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