/* * Copyright (c) 2021 Rockchip Corporation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ #ifndef _RAW_STREAM_PROC_UNIT_H_ #define _RAW_STREAM_PROC_UNIT_H_ #include #include "poll_thread.h" #include "xcam_mutex.h" #include "Stream.h" #include using namespace XCam; namespace RkCam { class CamHwIsp20; class EmptyClass; class RawProcThread; class RawStreamProcUnit : public PollCallback { public: explicit RawStreamProcUnit (); explicit RawStreamProcUnit (const rk_sensor_full_info_t *s_info, bool linked_to_isp); virtual ~RawStreamProcUnit (); virtual XCamReturn start (int mode); virtual XCamReturn stop (); void set_working_mode (int mode); XCamReturn prepare(int idx); void set_rx_devices (SmartPtr mipi_rx_devs[3]); SmartPtr get_rx_device (int index); void set_rx_format (const struct v4l2_subdev_format& sns_sd_fmt, uint32_t sns_v4l_pix_fmt); void set_rx_format (const struct v4l2_subdev_selection& sns_sd_sel, uint32_t sns_v4l_pix_fmt); void set_devices (SmartPtr ispdev, CamHwIsp20* handle); void set_hdr_frame_readback_infos(int frame_id, int times); void set_hdr_global_tmo_mode(int frame_id, bool mode); void notify_sof(uint64_t time, int frameid); void send_sync_buf(SmartPtr &buf_s, SmartPtr &buf_m, SmartPtr &buf_l); bool raw_buffer_proc(); void setMulCamConc(bool cc) { _is_multi_cam_conc = cc; } enum { ISP_MIPI_HDR_S = 0, ISP_MIPI_HDR_M, ISP_MIPI_HDR_L, ISP_MIPI_HDR_MAX, }; // from PollCallback virtual XCamReturn poll_buffer_ready (SmartPtr &buf, int type) { return XCAM_RETURN_ERROR_FAILED; } virtual XCamReturn poll_buffer_failed (int64_t timestamp, const char *msg) { return XCAM_RETURN_ERROR_FAILED; } virtual XCamReturn poll_buffer_ready (SmartPtr &buf) { return XCAM_RETURN_ERROR_FAILED; } virtual XCamReturn poll_buffer_ready (SmartPtr &buf, int dev_index); virtual XCamReturn poll_event_ready (uint32_t sequence, int type) { return XCAM_RETURN_ERROR_FAILED; } virtual XCamReturn poll_event_failed (int64_t timestamp, const char *msg) { return XCAM_RETURN_ERROR_FAILED; } protected: XCAM_DEAD_COPY (RawStreamProcUnit); void trigger_isp_readback (); void match_lumadetect_map (uint32_t sequence, sint32_t &additional_times); void match_globaltmostate_map(uint32_t sequence, bool &isHdrGlobalTmo); XCamReturn match_sof_timestamp_map(sint32_t sequence, uint64_t ×tamp); protected: SmartPtr _dev[3]; int _dev_index[3]; SmartPtr _stream[3]; int _working_mode; int _mipi_dev_max; bool _is_multi_cam_conc; // Mutex _buf_mutex; std::map _isp_hdr_fid2times_map; std::map _isp_hdr_fid2ready_map; std::map _hdr_global_tmo_state_map; std::map _sof_timestamp_map; SafeList buf_list[3]; SafeList cache_list[3]; SmartPtr _raw_proc_thread; CamHwIsp20* _camHw; SmartPtr _isp_core_dev; bool _first_trigger; Mutex _mipi_trigger_mutex; SafeList _msg_queue; }; class RawProcThread : public Thread { public: RawProcThread (RawStreamProcUnit *handle) : Thread ("RawProcThread") , _handle (handle) {} protected: virtual bool loop () { return _handle->raw_buffer_proc (); } private: RawStreamProcUnit *_handle; }; class EmptyClass { public: EmptyClass() {} ~EmptyClass() {} }; } #endif