xref: /OK3568_Linux_fs/external/camera_engine_rkaiq/rkaiq/hwi/isp20/CamHwIsp20.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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