125 lines
3.5 KiB
C++
125 lines
3.5 KiB
C++
#include "ICapturer.h"
|
|
#include <thread>
|
|
#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<GpioOut> reset_pin; //fpga 逻辑复位以及固件重载初始化。 7010 7/15没有 以防固件跑飞了保证能够不重启就能解决
|
|
std::shared_ptr<Gpio> fpgaLoad;
|
|
std::shared_ptr<Gpio> fpga_conf_initn;
|
|
BlockingQueue<V4L2_DATAINFO_Ex> 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<int> 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<std::thread> m_snap_thread;
|
|
std::shared_ptr<std::thread> m_imgproc_thread;
|
|
//std::vector<cv::Mat> m_frames;
|
|
std::vector<std::shared_ptr<IPreproc>> 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
|
|
unsigned char* 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<FpgaComm> 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;
|
|
}; |