#pragma once #include "../config/bean/ExtCfg.h" #include "../config/bean/CameraCalibrationCfg.h" #include "turbojpeg.h" #include #include #include "../Controller/Base.h" enum CameraFunc { SETDEMANDCATPURE=0, SETEXPOSUREAUTOBYCFG, SETGAINAUTOBYCFG, SETEXPOSURETIMEBYCFG, SETFRAMERATEENABLE, SETFRAMERATE, GETSHOWIMAGE, GETSHOWIMAGES, TAKEPHOTOS, }; class PointImageShowInfo { public: PointImageShowInfo() : m_ShowTex(0) , m_Width(0) , m_High(0) , m_PixelRatio(0) , m_ImageData(nullptr) , m_IsColor(false) { } ~PointImageShowInfo(); void Init(cv::Mat image, unsigned char* imageData); void Init(); void Update(); uint32_t GetTex() { return m_ShowTex; } public: int m_Width; int m_High; float m_PixelRatio; //不传 bool m_IsColor; //不传 cv::Mat m_ImageMat; //不传 private: unsigned char* m_ImageData; uint32_t m_ShowTex; }; class HBDCamera { public: HBDCamera(); virtual ~HBDCamera(); virtual bool Init() { return false; } virtual void StartUp(); virtual bool IsConnect() { return false; } //当参数传 void SetDemandCatpure(bool demand) { m_DemandFlag = demand; } bool GetDemandCatpure() { return m_DemandFlag; } virtual void SetExposureAutoByCfg() {} virtual void SetGainAutoByCfg() {} virtual void SetExposureTimeByCfg() {} virtual void SetFrameRateEnable() {} virtual void SetFrameRate() {} virtual unsigned int GetShowImage() = 0; virtual unsigned int GetShowImage(unsigned char * data, unsigned long size, int *width, int *height); virtual bool GenLogImage(void) { return false; } //不传 unsigned char * GetLogImage(void) { return m_LogImage; } //不传 unsigned int GetLogImageSize(void) { return m_LogImageSize; } //不传 float GetAspect() { return m_Aspect; } //当参数传 //unsigned int GetLogImageWidth() { return m_ImgWidth; } //unsigned int GetLogImageHeight() { return m_ImgHeight; } virtual bool GetRawImage(unsigned char* img); //TakePhotos包含了 void GetRemoteShowImageMat(cv::Mat& mat) //不用传 { EnterCriticalSection(&m_OriginalDataCS); m_ShowImage.copyTo(mat); LeaveCriticalSection(&m_OriginalDataCS); } void GetOriginSize(int& width, int& height, int &datasize) { //TakePhotos包含了 EnterCriticalSection(&m_OriginalDataCS); width = m_OriginalWidth; height = m_OriginalHeight; datasize = m_OriginalDataSize; LeaveCriticalSection(&m_OriginalDataCS); } void TakePhotos(); //拍照 void CallFunc(const ReadData& rd, ::stream::ResponseAny** response = nullptr); void SendToClients(WRITETYPE type = CAMERAPARAM, const std::string& addKey = ""); void Update(const ReadData& rd, WRITETYPE type = CAMERAPARAM); protected: virtual bool ConnectCamera() { return false; } virtual void GenTex(uint32_t *tex, unsigned int w, unsigned int h, void * data) {} virtual void StopCamera(); static DWORD WINAPI CatpureProc(HBDCamera* _this); virtual void CatpureRun() = 0; //virtual void CreateTestImage() {} private: void GetImageSize(int rowindex, ::stream::ResponseAny** response); public: BoolData* m_ShowFlag; //只有界面会修改 IntData* m_LastMouRefImgPosX; //只有界面会修改 IntData* m_LastMouRefImgPosY; //只有界面会修改 PointImageShowInfo* m_PointImage; protected: bool m_IsColor; bool m_DemandFlag; unsigned char* m_OriginalData; uint32_t m_OriginalDataSize; uint32_t m_OriginalWidth; uint32_t m_OriginalHeight; CRITICAL_SECTION m_OriginalDataCS; bool m_ImageChanged; unsigned char* m_LogImage; unsigned long m_LogImageSize; unsigned int m_LogImgWidth; unsigned int m_LogImgHeight; float m_Aspect; uint32_t m_LogGLTex; uint32_t m_GLTex; unsigned int m_ImgWidth; unsigned int m_ImgHeight; tjhandle m_tjinstance; ExtCfg* m_ExtCfg; CameraCalibrationCfg* m_CameraCalibrationCfg; bool m_RunFlag; HANDLE m_CatpureThread; cv::Mat m_ShowImage; };