twain3/device/ImageMatQueue.h

73 lines
1.7 KiB
C
Raw Normal View History

#pragma once
#include <thread>
#include <mutex>
#include <opencv2/opencv.hpp>
#include "ImageApplyHeaders.h"
#include "BlockingQueue.h"
#include <memory>
#include "PaperSize.h"
#include "GScan.h"
#include "IMulti.h"
#include "MatEx.h"
class IDecode {
public:
virtual ~IDecode() {}
virtual std::vector<std::shared_ptr<std::vector<char>>> getImageBuffs() {
return m_buffs;
}
protected:
std::vector<std::shared_ptr<std::vector<char>>> m_buffs;
};
class G200Decode : public IDecode{
public:
G200Decode(std::shared_ptr<std::vector<char>> buff);
};
class GRawDecode : public IDecode {
public:
GRawDecode(std::shared_ptr<std::vector<char>> buff);
};
class ImageMatQueue
{
public:
ImageMatQueue(void);
virtual ~ImageMatQueue(void);
bool empty();
bool valid();
void clear();
void setparam(GScanCap& param);
void run();
void setscanflags(const bool flags) { is_scanning = flags; }
void pushMat(std::shared_ptr<IDecode> buf);
MatEx popimage();
void get_image_front_info(ImageInfo* info);
volatile int mode=0;
private:
void proc();
void EnqueueCheck(bool multiout_red, int s, std::vector<cv::Mat>& retmats);
void PaniusCount();
void EnqueueMat(cv::Mat& mat);
void EnqueueMatOutPut(MatEx& matoutput);
BlockingQueue<MatEx> m_imagedata;
std::mutex m_Locker;
std::mutex m_mtxJB;
std::unique_ptr<std::thread> m_threadProc;
volatile bool bRun;
volatile int atm_orgin_image_remains;
volatile bool is_scanning;
GScanCap scanParam;
Device::PaperSize papersize;
std::vector<std::shared_ptr<CImageApply>> m_iaList;
std::vector<std::shared_ptr<IMulti>> m_multiprc_list;
BlockingQueue<std::shared_ptr<IDecode>> m_rawBuffs;
};