1*4882a593Smuzhiyun 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * Copyright (c) 2019 Rockchip Corporation 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * Licensed under the Apache License, Version 2.0 (the "License"); 6*4882a593Smuzhiyun * you may not use this file except in compliance with the License. 7*4882a593Smuzhiyun * You may obtain a copy of the License at 8*4882a593Smuzhiyun * 9*4882a593Smuzhiyun * http://www.apache.org/licenses/LICENSE-2.0 10*4882a593Smuzhiyun * 11*4882a593Smuzhiyun * Unless required by applicable law or agreed to in writing, software 12*4882a593Smuzhiyun * distributed under the License is distributed on an "AS IS" BASIS, 13*4882a593Smuzhiyun * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14*4882a593Smuzhiyun * See the License for the specific language governing permissions and 15*4882a593Smuzhiyun * limitations under the License. 16*4882a593Smuzhiyun * 17*4882a593Smuzhiyun */ 18*4882a593Smuzhiyun 19*4882a593Smuzhiyun #ifndef _CAM_HW_ISP20_H_ 20*4882a593Smuzhiyun #define _CAM_HW_ISP20_H_ 21*4882a593Smuzhiyun 22*4882a593Smuzhiyun #include <linux/rk-video-format.h> 23*4882a593Smuzhiyun #include "CamHwBase.h" 24*4882a593Smuzhiyun #include "Isp20Params.h" 25*4882a593Smuzhiyun #include "SensorHw.h" 26*4882a593Smuzhiyun #include "LensHw.h" 27*4882a593Smuzhiyun #include "Isp20StatsBuffer.h" 28*4882a593Smuzhiyun #include "Stream.h" 29*4882a593Smuzhiyun #include "RawStreamCapUnit.h" 30*4882a593Smuzhiyun #include "RawStreamProcUnit.h" 31*4882a593Smuzhiyun #include "SPStreamProcUnit.h" 32*4882a593Smuzhiyun #include "PdafStreamProcUnit.h" 33*4882a593Smuzhiyun #ifdef ISP_HW_V20 34*4882a593Smuzhiyun #include "TnrStreamProcUnit.h" 35*4882a593Smuzhiyun #include "NrStreamProcUnit.h" 36*4882a593Smuzhiyun #include "FecParamStream.h" 37*4882a593Smuzhiyun #endif 38*4882a593Smuzhiyun #include "thumbnails.h" 39*4882a593Smuzhiyun #include "CifScaleStream.h" 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun #include <unordered_map> 42*4882a593Smuzhiyun 43*4882a593Smuzhiyun struct media_device; 44*4882a593Smuzhiyun 45*4882a593Smuzhiyun /* 46*4882a593Smuzhiyun * [sub modules]: use bits 4-11 to define the sub modules of each module, the 47*4882a593Smuzhiyun * specific meaning of each bit is decided by the module itself. These bits 48*4882a593Smuzhiyun * is designed to implement the sub module's log switch. 49*4882a593Smuzhiyun 50*4882a593Smuzhiyun * ---------------------------- 51*4882a593Smuzhiyun * | sub modules | bits | 52*4882a593Smuzhiyun * ---------------------------- 53*4882a593Smuzhiyun * | ISP20HW_SUBM | 0x01 | 54*4882a593Smuzhiyun * ---------------------------- 55*4882a593Smuzhiyun * | ISP20PARAM_SUBM | 0x02 | 56*4882a593Smuzhiyun * ---------------------------- 57*4882a593Smuzhiyun * | SENSOR_SUBM | 0x04 | 58*4882a593Smuzhiyun * ---------------------------- 59*4882a593Smuzhiyun * | FL_SUBM | 0x08 | 60*4882a593Smuzhiyun * ---------------------------- 61*4882a593Smuzhiyun * | LENS_SUBM | 0x10 | 62*4882a593Smuzhiyun * ---------------------------- 63*4882a593Smuzhiyun * | CAPTURERAW_SUBM | 0x80 | 64*4882a593Smuzhiyun * ---------------------------- 65*4882a593Smuzhiyun */ 66*4882a593Smuzhiyun 67*4882a593Smuzhiyun namespace RkCam { 68*4882a593Smuzhiyun 69*4882a593Smuzhiyun class IspParamsSplitter; 70*4882a593Smuzhiyun 71*4882a593Smuzhiyun #define ISP20HW_SUBM (0x1) 72*4882a593Smuzhiyun 73*4882a593Smuzhiyun #define MAX_PARAMS_QUEUE_SIZE 5 74*4882a593Smuzhiyun #define ISP_PARAMS_EFFECT_DELAY_CNT 2 75*4882a593Smuzhiyun #define CAM_INDEX_FOR_1608 8 76*4882a593Smuzhiyun 77*4882a593Smuzhiyun #define DISABLE_PARAMS_POLL_THREAD 78*4882a593Smuzhiyun // FIXME: share 1608 data ptr(aiq/rawdata) 79*4882a593Smuzhiyun typedef struct sensor_info_share_s { 80*4882a593Smuzhiyun RawStreamProcUnit* raw_proc_unit[CAM_INDEX_FOR_1608]; // bind rx by camId 81*4882a593Smuzhiyun SmartPtr<RawStreamCapUnit> raw_cap_unit; // save 1st tx obj addr 82*4882a593Smuzhiyun char reference_name[64]; // save vicap name(for 1608) 83*4882a593Smuzhiyun rk_aiq_cif_info_t* reference_mipi_cif; // vicap inf (for 1608) 84*4882a593Smuzhiyun // us: union_stream 85*4882a593Smuzhiyun int us_open_cnt; // for hwi open(1608) 86*4882a593Smuzhiyun int us_prepare_cnt; // for rawCap buffer manage(1608). 87*4882a593Smuzhiyun int us_stream_cnt; // mark cnt. on: ++, off: -- 88*4882a593Smuzhiyun int us_stop_cnt; // last sensor stop 89*4882a593Smuzhiyun // tracking opened sensor num 90*4882a593Smuzhiyun int en_sns_num; // Record the number of open sensors 91*4882a593Smuzhiyun int first_en[CAM_INDEX_FOR_1608]; // set/get fmt for 1608 sensor 92*4882a593Smuzhiyun } sensor_info_share_t; 93*4882a593Smuzhiyun 94*4882a593Smuzhiyun class CamHwIsp20 95*4882a593Smuzhiyun : public CamHwBase, virtual public Isp20Params, public V4l2Device 96*4882a593Smuzhiyun , public isp_drv_share_mem_ops_t { 97*4882a593Smuzhiyun public: 98*4882a593Smuzhiyun friend class RawStreamProcUnit; 99*4882a593Smuzhiyun explicit CamHwIsp20(); 100*4882a593Smuzhiyun virtual ~CamHwIsp20(); 101*4882a593Smuzhiyun 102*4882a593Smuzhiyun // from ICamHw 103*4882a593Smuzhiyun virtual XCamReturn init(const char* sns_ent_name) override; 104*4882a593Smuzhiyun virtual XCamReturn deInit() override; 105*4882a593Smuzhiyun virtual XCamReturn prepare(uint32_t width, uint32_t height, int mode, int t_delay, int g_delay) override; 106*4882a593Smuzhiyun virtual XCamReturn start() override; 107*4882a593Smuzhiyun virtual XCamReturn stop() override; 108*4882a593Smuzhiyun virtual XCamReturn pause() override; 109*4882a593Smuzhiyun virtual XCamReturn resume() override; 110*4882a593Smuzhiyun virtual XCamReturn swWorkingModeDyn(int mode) override; 111*4882a593Smuzhiyun virtual XCamReturn getSensorModeData(const char* sns_ent_name, 112*4882a593Smuzhiyun rk_aiq_exposure_sensor_descriptor& sns_des) override; 113*4882a593Smuzhiyun virtual void setCalib(const CamCalibDbV2Context_t* calibv2) override; 114*4882a593Smuzhiyun virtual XCamReturn applyAnalyzerResult(SmartPtr<SharedItemBase> base, bool sync) override; 115*4882a593Smuzhiyun virtual XCamReturn applyAnalyzerResult(cam3aResultList& list) override; 116*4882a593Smuzhiyun XCamReturn setModuleCtl(rk_aiq_module_id_t moduleId, bool en) override; 117*4882a593Smuzhiyun XCamReturn getModuleCtl(rk_aiq_module_id_t moduleId, bool& en) override; 118*4882a593Smuzhiyun XCamReturn notify_capture_raw() override; 119*4882a593Smuzhiyun XCamReturn capture_raw_ctl(capture_raw_t type, int count = 0, const char* capture_dir = nullptr, char* output_dir = nullptr) override; 120*4882a593Smuzhiyun XCamReturn getSensorCrop(rk_aiq_rect_t& rect) override; 121*4882a593Smuzhiyun XCamReturn setSensorCrop(rk_aiq_rect_t& rect) override; 122*4882a593Smuzhiyun XCamReturn setSensorFlip(bool mirror, bool flip, int skip_frm_cnt) override; 123*4882a593Smuzhiyun XCamReturn getSensorFlip(bool& mirror, bool& flip) override; 124*4882a593Smuzhiyun void setMulCamConc(bool cc); 125*4882a593Smuzhiyun XCamReturn getZoomPosition(int& position) override; 126*4882a593Smuzhiyun XCamReturn getIrisParams(SmartPtr<RkAiqIrisParamsProxy>& irisPar, CalibDb_IrisTypeV2_t irisType); 127*4882a593Smuzhiyun XCamReturn getLensVcmCfg(rk_aiq_lens_vcmcfg& lens_cfg) override; 128*4882a593Smuzhiyun XCamReturn setLensVcmCfg(rk_aiq_lens_vcmcfg& lens_cfg) override; 129*4882a593Smuzhiyun XCamReturn setLensVcmCfg(struct rkmodule_inf& mod_info); 130*4882a593Smuzhiyun XCamReturn FocusCorrection() override; 131*4882a593Smuzhiyun XCamReturn ZoomCorrection() override; 132*4882a593Smuzhiyun XCamReturn setAngleZ(float angleZ) override; 133*4882a593Smuzhiyun virtual void getShareMemOps(isp_drv_share_mem_ops_t** mem_ops) override; 134*4882a593Smuzhiyun uint64_t getIspModuleEnState() override; 135*4882a593Smuzhiyun 136*4882a593Smuzhiyun static rk_aiq_static_info_t* getStaticCamHwInfo(const char* sns_ent_name, uint16_t index = 0); 137*4882a593Smuzhiyun static rk_aiq_static_info_t* getStaticCamHwInfoByPhyId(const char* sns_ent_name, uint16_t index = 0); 138*4882a593Smuzhiyun static XCamReturn clearStaticCamHwInfo(); 139*4882a593Smuzhiyun static XCamReturn initCamHwInfos(); 140*4882a593Smuzhiyun static XCamReturn selectIqFile(const char* sns_ent_name, char* iqfile_name); 141*4882a593Smuzhiyun static const char* getBindedSnsEntNmByVd(const char* vd); 142*4882a593Smuzhiyun 143*4882a593Smuzhiyun // from PollCallback 144*4882a593Smuzhiyun virtual XCamReturn poll_event_ready (uint32_t sequence, int type) override; 145*4882a593Smuzhiyun virtual XCamReturn poll_event_failed (int64_t timestamp, const char *msg) override; 146*4882a593Smuzhiyun XCamReturn rawReproc_genIspParams (uint32_t sequence, rk_aiq_frame_info_t *offline_finfo, int mode) override; 147*4882a593Smuzhiyun XCamReturn rawReProc_prepare (uint32_t sequence, rk_aiq_frame_info_t *offline_finfo) override; 148*4882a593Smuzhiyun //fake sensor 149*4882a593Smuzhiyun static const char* rawReproc_preInit(const char* isp_driver, const char* offline_sns_ent_name); 150*4882a593Smuzhiyun XCamReturn rawReproc_deInit (const char* fakeSensor); 151*4882a593Smuzhiyun 152*4882a593Smuzhiyun XCamReturn getEffectiveIspParams(rkisp_effect_params_v20& ispParams, uint32_t frame_id) override; 153*4882a593Smuzhiyun void setHdrGlobalTmoMode(uint32_t frame_id, bool mode); setSharpFbcRotation(rk_aiq_rotation_t rot)154*4882a593Smuzhiyun XCamReturn setSharpFbcRotation(rk_aiq_rotation_t rot) { 155*4882a593Smuzhiyun _sharp_fbc_rotation = rot; 156*4882a593Smuzhiyun return XCAM_RETURN_NO_ERROR; 157*4882a593Smuzhiyun } 158*4882a593Smuzhiyun XCamReturn notify_sof(SmartPtr<VideoBuffer>& buf); 159*4882a593Smuzhiyun SmartPtr<ispHwEvt_t> make_ispHwEvt (uint32_t sequence, int type, int64_t timestamp); get_workingg_mode()160*4882a593Smuzhiyun int get_workingg_mode() { 161*4882a593Smuzhiyun return _hdr_mode; 162*4882a593Smuzhiyun } 163*4882a593Smuzhiyun //should be called after prepare 164*4882a593Smuzhiyun XCamReturn get_stream_format(rkaiq_stream_type_t type, struct v4l2_format &format); 165*4882a593Smuzhiyun XCamReturn get_sp_resolution(int &width, int &height, int &aligned_w, int &aligned_h) override; 166*4882a593Smuzhiyun XCamReturn showOtpPdafData(struct rkmodule_pdaf_inf *otp_pdaf); 167*4882a593Smuzhiyun XCamReturn showOtpAfData(struct rkmodule_af_inf *otp_af); 168*4882a593Smuzhiyun #if RKAIQ_HAVE_PDAF 169*4882a593Smuzhiyun bool get_pdaf_support() override; 170*4882a593Smuzhiyun #endif setIspStreamMode(rk_isp_stream_mode_t mode)171*4882a593Smuzhiyun virtual XCamReturn setIspStreamMode(rk_isp_stream_mode_t mode) override { 172*4882a593Smuzhiyun if (mode == RK_ISP_STREAM_MODE_ONLNIE) { 173*4882a593Smuzhiyun mNoReadBack = true; 174*4882a593Smuzhiyun } else if (mode == RK_ISP_STREAM_MODE_OFFLNIE) { 175*4882a593Smuzhiyun mNoReadBack = false; 176*4882a593Smuzhiyun } else { 177*4882a593Smuzhiyun return XCAM_RETURN_ERROR_FAILED; 178*4882a593Smuzhiyun } 179*4882a593Smuzhiyun return XCAM_RETURN_NO_ERROR; 180*4882a593Smuzhiyun } getIspStreamMode()181*4882a593Smuzhiyun virtual rk_isp_stream_mode_t getIspStreamMode() override { 182*4882a593Smuzhiyun if (true == mNoReadBack) 183*4882a593Smuzhiyun return RK_ISP_STREAM_MODE_ONLNIE; 184*4882a593Smuzhiyun else 185*4882a593Smuzhiyun return RK_ISP_STREAM_MODE_OFFLNIE; 186*4882a593Smuzhiyun } 187*4882a593Smuzhiyun void notify_isp_stream_status(bool on); 188*4882a593Smuzhiyun bool getParamsForEffMap(uint32_t frameId); 189*4882a593Smuzhiyun XCamReturn reset_hardware() override; 190*4882a593Smuzhiyun 191*4882a593Smuzhiyun // FIXME: Set struct to static. 192*4882a593Smuzhiyun static sensor_info_share_t rk1608_share_inf; 193*4882a593Smuzhiyun setUserSensorFormat(uint16_t width,uint16_t height,uint16_t code)194*4882a593Smuzhiyun virtual void setUserSensorFormat(uint16_t width, uint16_t height, uint16_t code) override { 195*4882a593Smuzhiyun userSensorWidth = width; 196*4882a593Smuzhiyun userSensorHeight = height; 197*4882a593Smuzhiyun userSensorFmtCode = code; 198*4882a593Smuzhiyun } 199*4882a593Smuzhiyun 200*4882a593Smuzhiyun // cif scale flag 201*4882a593Smuzhiyun XCamReturn setCifSclStartFlag(int ratio, bool mode); 202*4882a593Smuzhiyun 203*4882a593Smuzhiyun private: 204*4882a593Smuzhiyun using V4l2Device::start; 205*4882a593Smuzhiyun 206*4882a593Smuzhiyun #if defined(ISP_HW_V20) 207*4882a593Smuzhiyun XCamReturn handlePpReslut(SmartPtr<cam3aResult> &result); 208*4882a593Smuzhiyun XCamReturn setPpConfig(SmartPtr<cam3aResult> &result); 209*4882a593Smuzhiyun #endif 210*4882a593Smuzhiyun XCamReturn setExposureParams(SmartPtr<RkAiqExpParamsProxy>& expPar); 211*4882a593Smuzhiyun XCamReturn setIrisParams(SmartPtr<RkAiqIrisParamsProxy>& irisPar, CalibDb_IrisTypeV2_t irisType); 212*4882a593Smuzhiyun XCamReturn setHdrProcessCount(rk_aiq_luma_params_t luma_params) override; 213*4882a593Smuzhiyun XCamReturn setFocusParams(SmartPtr<RkAiqFocusParamsProxy>& focus_params); 214*4882a593Smuzhiyun XCamReturn setCpslParams(SmartPtr<RkAiqCpslParamsProxy>& cpsl_params); 215*4882a593Smuzhiyun XCamReturn setupHdrLink(int mode, int isp_index, bool enable); 216*4882a593Smuzhiyun static void findAttachedSubdevs(struct media_device *device, uint32_t count, rk_sensor_full_info_t *s_info); 217*4882a593Smuzhiyun XCamReturn setExpDelayInfo(int mode); 218*4882a593Smuzhiyun void analyzePpInitEns(SmartPtr<cam3aResult> &result); 219*4882a593Smuzhiyun XCamReturn get_sensor_pdafinfo(rk_sensor_full_info_t *sensor_info, rk_sensor_pdaf_info_t *pdaf_info); 220*4882a593Smuzhiyun protected: 221*4882a593Smuzhiyun XCAM_DEAD_COPY(CamHwIsp20); 222*4882a593Smuzhiyun virtual XCamReturn setIspConfig(cam3aResultList* result_list = NULL); 223*4882a593Smuzhiyun virtual void updateEffParams(void* params, void* ori_params = NULL) { return; } processTb(void * params)224*4882a593Smuzhiyun virtual bool processTb(void* params) { return false; } 225*4882a593Smuzhiyun virtual XCamReturn poll_buffer_ready (SmartPtr<VideoBuffer> &buf) override; 226*4882a593Smuzhiyun enum cam_hw_state_e { 227*4882a593Smuzhiyun CAM_HW_STATE_INVALID, 228*4882a593Smuzhiyun CAM_HW_STATE_INITED, 229*4882a593Smuzhiyun CAM_HW_STATE_PREPARED, 230*4882a593Smuzhiyun CAM_HW_STATE_STARTED, 231*4882a593Smuzhiyun CAM_HW_STATE_PAUSED, 232*4882a593Smuzhiyun CAM_HW_STATE_STOPPED, 233*4882a593Smuzhiyun }; 234*4882a593Smuzhiyun enum ircut_state_e { 235*4882a593Smuzhiyun IRCUT_STATE_CLOSED, /* close ir-cut,meaning that infrared ray can be received */ 236*4882a593Smuzhiyun IRCUT_STATE_CLOSING, 237*4882a593Smuzhiyun IRCUT_STATE_OPENING, 238*4882a593Smuzhiyun IRCUT_STATE_OPENED, /* open ir-cut,meaning that only visible light can be received */ 239*4882a593Smuzhiyun }; 240*4882a593Smuzhiyun 241*4882a593Smuzhiyun typedef struct calib_infos_s { 242*4882a593Smuzhiyun struct { 243*4882a593Smuzhiyun bool enable; 244*4882a593Smuzhiyun bool motion_detect_en; 245*4882a593Smuzhiyun } mfnr; 246*4882a593Smuzhiyun 247*4882a593Smuzhiyun struct { 248*4882a593Smuzhiyun CalibDb_IrisTypeV2_t IrisType; 249*4882a593Smuzhiyun } aec; 250*4882a593Smuzhiyun 251*4882a593Smuzhiyun struct { 252*4882a593Smuzhiyun CalibDbV2_Af_VcmCfg_t vcmcfg; 253*4882a593Smuzhiyun CalibDbV2_Af_LdgParam_t ldg_param; 254*4882a593Smuzhiyun CalibDbV2_Af_HighLightParam_t highlight; 255*4882a593Smuzhiyun } af; 256*4882a593Smuzhiyun 257*4882a593Smuzhiyun struct { 258*4882a593Smuzhiyun CalibDb_DcgSetV2_t CISDcgSet; 259*4882a593Smuzhiyun CalibDb_ExpUpdate_CombV2_t CISExpUpdate; 260*4882a593Smuzhiyun } sensor; 261*4882a593Smuzhiyun } calib_infos_t; 262*4882a593Smuzhiyun calib_infos_t _cur_calib_infos; 263*4882a593Smuzhiyun int _hdr_mode; 264*4882a593Smuzhiyun Mutex _isp_params_cfg_mutex; 265*4882a593Smuzhiyun int _state; 266*4882a593Smuzhiyun volatile bool _is_exit; 267*4882a593Smuzhiyun bool _linked_to_isp; 268*4882a593Smuzhiyun bool _linked_to_1608; 269*4882a593Smuzhiyun #if defined(ISP_HW_V20) 270*4882a593Smuzhiyun struct rkispp_params_cfg _full_active_ispp_params; 271*4882a593Smuzhiyun uint32_t _ispp_module_init_ens; 272*4882a593Smuzhiyun SmartPtr<V4l2SubDevice> _ispp_sd; 273*4882a593Smuzhiyun #endif 274*4882a593Smuzhiyun SmartPtr<V4l2SubDevice> _cif_csi2_sd; 275*4882a593Smuzhiyun char sns_name[32]; 276*4882a593Smuzhiyun public: 277*4882a593Smuzhiyun static std::unordered_map<std::string, SmartPtr<rk_aiq_static_info_t>> mCamHwInfos; 278*4882a593Smuzhiyun static rk_aiq_isp_hw_info_t mIspHwInfos; 279*4882a593Smuzhiyun static rk_aiq_cif_hw_info_t mCifHwInfos; 280*4882a593Smuzhiyun static std::unordered_map<std::string, SmartPtr<rk_sensor_full_info_t>> mSensorHwInfos; 281*4882a593Smuzhiyun static std::unordered_map<std::string, std::string> mFakeCameraName; 282*4882a593Smuzhiyun protected: 283*4882a593Smuzhiyun static bool mIsMultiIspMode; 284*4882a593Smuzhiyun static uint16_t mMultiIspExtendedPixel; 285*4882a593Smuzhiyun // TODO: Sync 1608 sensor start streaming 286*4882a593Smuzhiyun static XCam::Mutex _sync_1608_mutex; 287*4882a593Smuzhiyun static bool _sync_1608_done; 288*4882a593Smuzhiyun #if defined(ISP_HW_V20) 289*4882a593Smuzhiyun void gen_full_ispp_params(const struct rkispp_params_cfg* update_params, 290*4882a593Smuzhiyun struct rkispp_params_cfg* full_params); 291*4882a593Smuzhiyun #endif 292*4882a593Smuzhiyun #if 0 293*4882a593Smuzhiyun void dump_isp_config(struct isp2x_isp_params_cfg* isp_params, 294*4882a593Smuzhiyun SmartPtr<RkAiqIspParamsProxy> aiq_results, 295*4882a593Smuzhiyun SmartPtr<RkAiqIspParamsProxy> aiq_other_results); 296*4882a593Smuzhiyun void dumpRawnrFixValue(struct isp2x_rawnr_cfg * pRawnrCfg ); 297*4882a593Smuzhiyun void dumpTnrFixValue(struct rkispp_tnr_config * pTnrCfg); 298*4882a593Smuzhiyun void dumpUvnrFixValue(struct rkispp_nr_config * pNrCfg); 299*4882a593Smuzhiyun void dumpYnrFixValue(struct rkispp_nr_config * pNrCfg); 300*4882a593Smuzhiyun void dumpSharpFixValue(struct rkispp_sharp_config * pSharpCfg); 301*4882a593Smuzhiyun #endif 302*4882a593Smuzhiyun XCamReturn setIrcutParams(bool on); 303*4882a593Smuzhiyun XCamReturn setIsppSharpFbcRot(struct rkispp_sharp_config* shp_cfg); 304*4882a593Smuzhiyun XCamReturn setupPipelineFmt(); 305*4882a593Smuzhiyun XCamReturn setupPipelineFmtIsp(struct v4l2_subdev_selection& sns_sd_sel, 306*4882a593Smuzhiyun struct v4l2_subdev_format& sns_sd_fmt, 307*4882a593Smuzhiyun __u32 sns_v4l_pix_fmt); 308*4882a593Smuzhiyun XCamReturn setupPipelineFmtCif(struct v4l2_subdev_selection& sns_sd_sel, 309*4882a593Smuzhiyun struct v4l2_subdev_format& sns_sd_fmt, 310*4882a593Smuzhiyun __u32 sns_v4l_pix_fmt); 311*4882a593Smuzhiyun XCamReturn setupHdrLink_vidcap(int hdr_mode, int cif_index, bool enable); 312*4882a593Smuzhiyun #if defined(ISP_HW_V20) 313*4882a593Smuzhiyun XCamReturn init_pp(rk_sensor_full_info_t *s_info); 314*4882a593Smuzhiyun #endif 315*4882a593Smuzhiyun virtual bool isOnlineByWorkingMode(); 316*4882a593Smuzhiyun enum mipi_stream_idx { 317*4882a593Smuzhiyun MIPI_STREAM_IDX_0 = 1, 318*4882a593Smuzhiyun MIPI_STREAM_IDX_1 = 2, 319*4882a593Smuzhiyun MIPI_STREAM_IDX_2 = 4, 320*4882a593Smuzhiyun MIPI_STREAM_IDX_ALL = 7, 321*4882a593Smuzhiyun }; 322*4882a593Smuzhiyun XCamReturn hdr_mipi_start_mode(int mode); 323*4882a593Smuzhiyun XCamReturn hdr_mipi_stop(); 324*4882a593Smuzhiyun XCamReturn hdr_mipi_prepare_mode(int mode); 325*4882a593Smuzhiyun static void allocMemResource(uint8_t id, void *ops_ctx, void *config, void **mem_ctx); 326*4882a593Smuzhiyun static void releaseMemResource(uint8_t id, void *mem_ctx); 327*4882a593Smuzhiyun static void* getFreeItem(uint8_t id, void *mem_ctx); 328*4882a593Smuzhiyun uint64_t _isp_module_ens{0}; 329*4882a593Smuzhiyun bool mNoReadBack; 330*4882a593Smuzhiyun rk_aiq_rotation_t _sharp_fbc_rotation; 331*4882a593Smuzhiyun 332*4882a593Smuzhiyun rk_aiq_ldch_share_mem_info_t ldch_mem_info_array[2 * ISP2X_MESH_BUF_NUM]; 333*4882a593Smuzhiyun rk_aiq_fec_share_mem_info_t fec_mem_info_array[FEC_MESH_BUF_NUM]; 334*4882a593Smuzhiyun rk_aiq_cac_share_mem_info_t cac_mem_info_array[2 * ISP3X_MESH_BUF_NUM]; 335*4882a593Smuzhiyun rk_aiq_dbg_share_mem_info_t dbg_mem_info_array[2 * RKISP_INFO2DDR_BUF_MAX]; 336*4882a593Smuzhiyun typedef struct drv_share_mem_ctx_s { 337*4882a593Smuzhiyun void* ops_ctx; 338*4882a593Smuzhiyun void* mem_info; 339*4882a593Smuzhiyun rk_aiq_drv_share_mem_type_t type; 340*4882a593Smuzhiyun } drv_share_mem_ctx_t; 341*4882a593Smuzhiyun drv_share_mem_ctx_t _ldch_drv_mem_ctx; 342*4882a593Smuzhiyun drv_share_mem_ctx_t _fec_drv_mem_ctx; 343*4882a593Smuzhiyun drv_share_mem_ctx_t _cac_drv_mem_ctx; 344*4882a593Smuzhiyun drv_share_mem_ctx_t _dbg_drv_mem_ctx; 345*4882a593Smuzhiyun Mutex _mem_mutex; 346*4882a593Smuzhiyun rk_aiq_rect_t _crop_rect; 347*4882a593Smuzhiyun uint32_t _ds_width; 348*4882a593Smuzhiyun uint32_t _ds_heigth; 349*4882a593Smuzhiyun uint32_t _ds_width_align; 350*4882a593Smuzhiyun uint32_t _ds_heigth_align; 351*4882a593Smuzhiyun uint32_t _exp_delay; 352*4882a593Smuzhiyun rk_aiq_lens_descriptor _lens_des; 353*4882a593Smuzhiyun //ispp 354*4882a593Smuzhiyun #if defined(ISP_HW_V20) 355*4882a593Smuzhiyun SmartPtr<FecParamStream> mFecParamStream; 356*4882a593Smuzhiyun SmartPtr<NrStreamProcUnit> mNrStreamProcUnit; 357*4882a593Smuzhiyun SmartPtr<TnrStreamProcUnit> mTnrStreamProcUnit; 358*4882a593Smuzhiyun #endif 359*4882a593Smuzhiyun //isp 360*4882a593Smuzhiyun SmartPtr<RKStream> mLumaStream; 361*4882a593Smuzhiyun SmartPtr<RKStatsStream> mIspStatsStream; 362*4882a593Smuzhiyun SmartPtr<RKStream> mIspParamStream; 363*4882a593Smuzhiyun SmartPtr<RKSofEventStream> mIspSofStream; 364*4882a593Smuzhiyun #if defined(RKAIQ_ENABLE_SPSTREAM) 365*4882a593Smuzhiyun SmartPtr<SPStreamProcUnit> mSpStreamUnit; 366*4882a593Smuzhiyun #endif 367*4882a593Smuzhiyun SmartPtr<RkStreamEventPollThread> mIspStremEvtTh; 368*4882a593Smuzhiyun 369*4882a593Smuzhiyun SmartPtr<RawStreamCapUnit> mRawCapUnit; 370*4882a593Smuzhiyun SmartPtr<RawStreamProcUnit> mRawProcUnit; 371*4882a593Smuzhiyun 372*4882a593Smuzhiyun SmartPtr<CifSclStream> mCifScaleStream; 373*4882a593Smuzhiyun 374*4882a593Smuzhiyun SmartPtr<PdafStreamProcUnit> mPdafStreamUnit; 375*4882a593Smuzhiyun 376*4882a593Smuzhiyun SmartPtr<cam3aResult> get_3a_module_result (cam3aResultList &results, int32_t type); 377*4882a593Smuzhiyun XCamReturn handleIsp3aReslut(SmartPtr<cam3aResult> &result); 378*4882a593Smuzhiyun XCamReturn handleIsp3aReslut(cam3aResultList& list); 379*4882a593Smuzhiyun virtual XCamReturn dispatchResult(SmartPtr<cam3aResult> cam3a_result); 380*4882a593Smuzhiyun virtual XCamReturn dispatchResult(cam3aResultList& list); 381*4882a593Smuzhiyun 382*4882a593Smuzhiyun std::map<int, cam3aResultList> _camIsp3aResult; 383*4882a593Smuzhiyun 384*4882a593Smuzhiyun std::map<uint32_t, SmartPtr<RkAiqIspEffParamsProxy>> _effecting_ispparam_map; 385*4882a593Smuzhiyun SmartPtr<RkAiqIspEffParamsPool> mEffectIspParamsPool; 386*4882a593Smuzhiyun #ifndef DISABLE_PARAMS_ASSEMBLER 387*4882a593Smuzhiyun SmartPtr<IspParamsAssembler> mParamsAssembler; 388*4882a593Smuzhiyun #endif 389*4882a593Smuzhiyun uint32_t mPpModuleInitEns; 390*4882a593Smuzhiyun bool mVicapIspPhyLinkSupported; // if phsical link between vicap and isp, only isp3x support now 391*4882a593Smuzhiyun SmartPtr<IspParamsSplitter> mParamsSplitter; 392*4882a593Smuzhiyun enum ISP_STREAM_STATUS_E { 393*4882a593Smuzhiyun ISP_STREAM_STATUS_INVALID, 394*4882a593Smuzhiyun ISP_STREAM_STATUS_STREAM_ON, 395*4882a593Smuzhiyun ISP_STREAM_STATUS_STREAM_OFF, 396*4882a593Smuzhiyun }; 397*4882a593Smuzhiyun int _isp_stream_status; 398*4882a593Smuzhiyun 399*4882a593Smuzhiyun rk_sensor_pdaf_info_t mPdafInfo; 400*4882a593Smuzhiyun 401*4882a593Smuzhiyun Mutex _stop_cond_mutex; 402*4882a593Smuzhiyun 403*4882a593Smuzhiyun // TODO: Sync(1608 sensor) sdk hwEvt cb 404*4882a593Smuzhiyun XCam::Cond _sync_done_cond; 405*4882a593Smuzhiyun XCamReturn waitLastSensorDone(); 406*4882a593Smuzhiyun XCamReturn pixFmt2Bpp(uint32_t pixFmt, int8_t& bpp); 407*4882a593Smuzhiyun uint32_t _curIspParamsSeq; 408*4882a593Smuzhiyun 409*4882a593Smuzhiyun uint16_t userSensorWidth; 410*4882a593Smuzhiyun uint16_t userSensorHeight; 411*4882a593Smuzhiyun uint16_t userSensorFmtCode; 412*4882a593Smuzhiyun 413*4882a593Smuzhiyun bool _not_skip_first{true}; 414*4882a593Smuzhiyun struct isp32_rawawb_meas_cfg _first_awb_cfg{}; 415*4882a593Smuzhiyun }; 416*4882a593Smuzhiyun 417*4882a593Smuzhiyun } 418*4882a593Smuzhiyun #endif 419