#include "ICapturer.h" #include #include "autoevent.hpp" #include "CorrectParam.h" #include "IPreproc.h" #define TEST_SIMCAP class FpgaComm; class gVideo; class Gpio; class GpioOut; class MultiFrameCapture : public ICapturer { private: struct frame_data_info { void* pdata; unsigned int offset; unsigned int total_dst; unsigned int frame_count; }; const int FPGA_MAX_HEIGHT_SUP=1048576; //const int FRAME_HEIGHT=2700; int frame_height = 60; int readframe_timeout = 100; unsigned int frame_count; std::shared_ptr reset_pin; //fpga 逻辑复位以及固件重载初始化。 7010 7/15没有 以防固件跑飞了保证能够不重启就能解决 std::shared_ptr fpgaLoad; std::shared_ptr fpga_conf_initn; BlockingQueue m_frameinfos; bool b_snap_run; bool b_stop_snap; bool b_end_snap; bool b_imgproc; bool is_size_error; int snaped_index; bool bScanning; std::atomic iImageremain; FPGAConfigParam m_fpgaparam; std::mutex m_mtx_snap; std::mutex m_mtx_snapdone; std::condition_variable m_cv_snap; std::condition_variable m_cv_snapdone; std::shared_ptr m_snap_thread; std::shared_ptr m_imgproc_thread; //std::vector m_frames; std::vector> m_preproclist; std::thread m_correctThread; frame_data_info pimgdata_info; ScannerGlue m_glue; int offsetStep[12]; int expStep[2][3]; double radio = 1; #ifdef TEST_SIMCAP void* m_test_pimg; unsigned int m_test_pimg_len; #endif CamZ_Reg_4 reg_; private: void reset_fpga(); void reload_fpga(); void set_gain(int ix, int val); void set_offset(int ix, int val); void set_expo(int ix, int val); void configFPGAParam(int mode,int dpi); int color(); int width(); void snaprun(); void updatesnapstatus(int papertype); void procimage(); void formatStep(); bool saveLutImg(int dpi, int mode, bool black); void creatcorrectconfig(int dpi,int mode); void correctcolor(int correctmode); void openDevice(int dpi,int mode); //void myFloodFill(cv::Mat& image, bool isTwoSide); void init_imagedatabuffer(); //void update_imgdatainfo(cv::Mat itemmat); void reset_imagedata(); public: MultiFrameCapture(ScannerGlue glue, std::shared_ptr fpga, CISVendor vendor); virtual ~MultiFrameCapture(); virtual void SetParent(void *scanner) override; virtual void open() override; virtual void snap() override; virtual void stopsnap(bool autosize) override; virtual void close() override; virtual int read(int addr) override; virtual void *readFrameTest(int timeout); virtual void UpdateScanParam(HG_ScanConfiguration config) override; virtual void createCorrect(int correctmode) override; virtual void setFPGATriggerMode(bool autotrigger, int delay) override; virtual void setFanMode(int mode) override; virtual void fpgaReload() override; virtual bool capturerImage() override; virtual void waitsnapdone(int state) override; virtual bool IsImageQueueEmpty() override; virtual void resetimageremain() override; virtual std::atomic_int &getimageremain() override; virtual void clearimages() override; virtual void setScanFlag(bool brun) override; };