twain2/ImageMatQueue.h

59 lines
1.3 KiB
C++

#pragma once
//#include <boost\thread\win32\mfc_thread_init.hpp>
#include <thread>
#include <mutex>
#include <opencv2\opencv.hpp>
#include "JpegBuffer.h"
#include <queue>
#include "ImageApply.h"
#include "PublicFunc.h"
#include "BlockingQueue.h"
#include <memory>
#include <atomic>
#include "PaperSize.h"
#include "AutoCrop.h"
#include "ImageAdjustColors.h"
#include "ImageApplyResize.h"
#include "ImageChannel.h"
#include "ImageProcDiscardBlank.h"
#include "ImageRotation.h"
#include <memory>
class ImageMatQueue
{
public:
ImageMatQueue(void);
virtual ~ImageMatQueue(void);
void pushMat(JpegBuffer& data);
cv::Mat popMat();
bool empty();
bool valid();
void clear();
void setparam(SFreeImage param);
void run();
public:
void SetScanningStatus(bool isscannning);
void release_img_prc_thread();
private:
void proc();
cv::Mat _popMat();
void EnqueueMat(cv::Mat &mat);
void PaniusCount();
BlockingQueue<cv::Mat> m_images;
BlockingQueue<JpegBuffer> m_pImages;
std::mutex m_Locker;
std::mutex m_mtxJB;
std::unique_ptr<thread> m_threadProc;
volatile bool bRun;
bool can_multi_outputR;
bool isduplex;
std::atomic<int> at_prced_image_remains;
std::atomic<int> atm_orgin_image_remains;
SFreeImage scanParam;
bool iscanning;
PaperSize papersize;
std::vector<std::shared_ptr<CImageApply>> m_iaList;
};