2023-07-17 03:29:37 +00:00
|
|
|
|
#include "ICapturer.h"
|
|
|
|
|
#include <thread>
|
|
|
|
|
#include "autoevent.hpp"
|
|
|
|
|
#include "CorrectParam.h"
|
2023-09-19 06:55:45 +00:00
|
|
|
|
|
2023-07-17 03:29:37 +00:00
|
|
|
|
|
2023-07-18 14:29:02 +00:00
|
|
|
|
//#define TEST_SIMCAP
|
2023-07-18 02:29:03 +00:00
|
|
|
|
|
2023-07-17 03:29:37 +00:00
|
|
|
|
class FpgaComm;
|
|
|
|
|
class gVideo;
|
|
|
|
|
class Gpio;
|
|
|
|
|
class GpioOut;
|
|
|
|
|
|
2023-08-09 07:31:27 +00:00
|
|
|
|
#define WIDTH 5184
|
2023-09-26 09:16:56 +00:00
|
|
|
|
#define HEIGHT 600 //只能为3的倍数
|
|
|
|
|
#define DPI_600 3
|
|
|
|
|
#define DPI_300 2
|
|
|
|
|
#define DPI_200 1
|
2023-08-09 07:31:27 +00:00
|
|
|
|
#define COLOR 1
|
|
|
|
|
#define GRAY 0
|
|
|
|
|
typedef struct hg_tag_SIZE
|
|
|
|
|
{
|
|
|
|
|
long cx;
|
|
|
|
|
long cy;
|
|
|
|
|
}CSSIZE;
|
|
|
|
|
|
|
|
|
|
typedef CSSIZE SIZE;
|
|
|
|
|
|
2023-11-18 03:48:39 +00:00
|
|
|
|
|
2023-07-17 03:29:37 +00:00
|
|
|
|
class MultiFrameCapture : public ICapturer
|
|
|
|
|
{
|
|
|
|
|
private:
|
|
|
|
|
bool b_snap_run;
|
|
|
|
|
bool b_stop_snap;
|
|
|
|
|
bool b_end_snap;
|
|
|
|
|
bool bScanning;
|
|
|
|
|
std::atomic<int> iImageremain;
|
|
|
|
|
FPGAConfigParam m_fpgaparam;
|
2023-11-18 03:48:39 +00:00
|
|
|
|
|
2023-07-17 03:29:37 +00:00
|
|
|
|
std::mutex m_mtx_snap;
|
|
|
|
|
std::mutex m_mtx_snapdone;
|
2023-11-18 03:48:39 +00:00
|
|
|
|
std::mutex img_lock_;
|
|
|
|
|
std::condition_variable img_wait_;
|
2023-07-17 03:29:37 +00:00
|
|
|
|
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::thread m_correctThread;
|
2023-08-09 07:31:27 +00:00
|
|
|
|
|
2023-07-17 03:29:37 +00:00
|
|
|
|
ScannerGlue m_glue;
|
2023-11-18 03:48:39 +00:00
|
|
|
|
|
2023-07-17 03:29:37 +00:00
|
|
|
|
int offsetStep[12];
|
|
|
|
|
int expStep[2][3];
|
|
|
|
|
double radio = 1;
|
2023-11-18 03:48:39 +00:00
|
|
|
|
|
2023-07-17 03:29:37 +00:00
|
|
|
|
private:
|
|
|
|
|
void configFPGAParam(int mode,int dpi);
|
|
|
|
|
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);
|
2023-10-07 06:08:42 +00:00
|
|
|
|
|
2023-08-09 07:31:27 +00:00
|
|
|
|
private:
|
2023-09-26 09:16:56 +00:00
|
|
|
|
unsigned int resolution_; // 分辨率 //3:600dpi 2:300dpi 1:200dpi
|
2023-09-14 02:46:04 +00:00
|
|
|
|
unsigned int v4l2_width_; // v4l2 图像宽
|
|
|
|
|
unsigned int v4l2_height_; // v4l2 图像高
|
2023-08-09 07:31:27 +00:00
|
|
|
|
unsigned int pixels_height_; // opencv需要生成的高
|
|
|
|
|
unsigned int pixels_width_ ; // opencv需要生成的宽
|
|
|
|
|
unsigned int paper_size_; // 纸张大小
|
|
|
|
|
unsigned int color_mode_; // 颜色模式
|
|
|
|
|
unsigned int is_correct_; // 是否校正
|
|
|
|
|
unsigned int is_double_paper_; // 是否启动双张检测
|
2023-11-18 03:48:39 +00:00
|
|
|
|
unsigned int is_remove_morr_; // 去除摩尔纹
|
2023-09-14 02:46:04 +00:00
|
|
|
|
|
2023-08-31 08:37:05 +00:00
|
|
|
|
cv::Mat lut;
|
2023-08-09 07:31:27 +00:00
|
|
|
|
std::map<PaperSize, SIZE> paper_map_
|
|
|
|
|
{
|
|
|
|
|
{PaperSize::G400_A3,SIZE{297,420}},
|
|
|
|
|
{PaperSize::G400_A4,SIZE{210,297}},
|
|
|
|
|
{PaperSize::G400_A5,SIZE{148,210}},
|
|
|
|
|
{PaperSize::G400_A6,SIZE{105,148}},
|
|
|
|
|
{PaperSize::G400_B4,SIZE{250,353}},
|
|
|
|
|
{PaperSize::G400_B5,SIZE{176,250}},
|
|
|
|
|
{PaperSize::G400_B6,SIZE{125,176}},
|
|
|
|
|
// {PaperSize::G400_DOUBLELETTER,},
|
|
|
|
|
{PaperSize::G400_LEGAL,SIZE{216,356}},
|
|
|
|
|
{PaperSize::G400_LETTER,SIZE{216,279}},
|
|
|
|
|
//{PaperSize::G400_LONGLETTER},
|
2023-10-31 10:05:43 +00:00
|
|
|
|
{PaperSize::G400_MAXSIZE,SIZE{210,5500}},
|
2023-09-19 01:24:12 +00:00
|
|
|
|
{PaperSize::G400_AUTO,SIZE{210,297}},
|
2023-10-26 07:34:10 +00:00
|
|
|
|
{PaperSize::G400_MAXAUTO,SIZE{216,5500}},
|
2023-08-09 07:31:27 +00:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
SIZE GetPaperSize(PaperSize paper, int dpi);
|
2023-08-31 08:37:05 +00:00
|
|
|
|
uint32_t compute_frame(int paper_size,int dpi); //计算固定幅面需要采集的帧数
|
2023-09-14 02:46:04 +00:00
|
|
|
|
void compute_height(int width,int height); //在open 之前调用
|
2023-07-17 03:29:37 +00:00
|
|
|
|
public:
|
2023-10-26 07:34:10 +00:00
|
|
|
|
MultiFrameCapture(ScannerGlue glue);
|
2023-07-17 03:29:37 +00:00
|
|
|
|
virtual ~MultiFrameCapture();
|
2023-11-18 03:48:39 +00:00
|
|
|
|
public:
|
2023-07-17 03:29:37 +00:00
|
|
|
|
virtual void SetParent(void *scanner) override;
|
|
|
|
|
|
|
|
|
|
virtual void open() override;
|
|
|
|
|
|
2023-09-14 02:46:04 +00:00
|
|
|
|
////这个地方非常重要 目的是检测到有纸之后 ,继续走纸接近CIS 在启动采集 ,但是这个地方风险也很大,需要调的尽量完美,如果出现最上面几行图像和最下面图像不显示请看一下这里吧!!!!
|
|
|
|
|
////走纸速度影响吗??? YES
|
2023-07-17 03:29:37 +00:00
|
|
|
|
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;
|
2023-10-10 10:12:15 +00:00
|
|
|
|
|
|
|
|
|
virtual void SetLowPower(bool islow);
|
2023-11-18 03:48:39 +00:00
|
|
|
|
|
|
|
|
|
virtual void set_image_callback(image_callback cb) override;
|
|
|
|
|
|
|
|
|
|
virtual void wait_image_notify() override;
|
2023-07-17 03:29:37 +00:00
|
|
|
|
};
|