#pragma once #include #include #include #include "ImageApplyHeaders.h" #include "BlockingQueue.h" #include #include "PaperSize.h" #include "GScan.h" #include "IMulti.h" #include "MatEx.h" class IDecode { public: virtual ~IDecode() {} virtual std::vector>> getImageBuffs() { return m_buffs; } protected: std::vector>> m_buffs; }; class G200Decode : public IDecode{ public: G200Decode(std::shared_ptr> buff); }; class GRawDecode : public IDecode { public: GRawDecode(std::shared_ptr> 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 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& retmats); void PaniusCount(); void EnqueueMat(cv::Mat& mat); void EnqueueMatOutPut(MatEx& matoutput); BlockingQueue m_imagedata; std::mutex m_Locker; std::mutex m_mtxJB; std::unique_ptr m_threadProc; volatile bool bRun; volatile int atm_orgin_image_remains; volatile bool is_scanning; GScanCap scanParam; Device::PaperSize papersize; std::vector> m_iaList; std::vector> m_multiprc_list; BlockingQueue> m_rawBuffs; };