#pragma once #include "iimagehandler.h" #include "ThreadPool.h" #include "imemory.h" #include #include #include #include "BlockingQueue.h" class UsbImageProcQueue; class img_processor; class ImageUsbHandler: public IImageHandler { img_processor* imgproc_; public: ImageUsbHandler(std::shared_ptr images = nullptr); virtual ~ImageUsbHandler(); virtual void config_procparams(HGImgProcParms params); virtual void add_image(void* data, int width, int height, int type,int scannnum,unsigned int fpgaversion) override; virtual void add_scanevent(HGIntInfo status); virtual bool done(); virtual void clear(); virtual bool is_limit() override; virtual void Set_ratio(u32 h_ratio,u32 v_ratio) override; protected: std::shared_ptr images; BlockingQueue capture_data; BlockingQueue encode_data; ThreadPool pool; ThreadPool encodepools; ThreadPool pushpool; volatile float H_ratio; volatile float V_ratio; std::queue> results; std::queue>> encodeimgs; BlockingQueue scanEvents; std::mutex mtx; HGImgProcParms m_procparams; };