#ifndef XIMEAIMAGER_H #define XIMEAIMAGER_H /* This is the reference example application code for XIMEA cameras. You can use it to simplify development of your camera application. Sample name: xiAPI / Capture-10-images Description: Open camera, capture 10 images while printing first pixel from each image. Workflow: 1: Open camera 2: Set parameters 3: Start acquisition 4: Each image captured - print dimensions and value of the first pixel */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include "configfile.h" #include "irisximeaimager.h" #include "math.h" #include "utility_tc.h" #include "MemoryPool.h" #include #include #include #include "rgbImage.h" #define PUSH_FLOW_PORT 666 //#ifdef WIN32 //#include // Windows //#else //#include // Linux, OSX //#endif //struct DataBuffer //{ // unsigned short data[409200/2]; //}; class DataBuffer { public: DataBuffer(); ~DataBuffer(); unsigned short data[41040000];//1368*300*100=41040000,为了兼容所有设置spectral bin和spatial bin private: }; class XimeaImager; class RecordXimeaTemperature : public QObject { Q_OBJECT public: RecordXimeaTemperature(Iris::IrisXimeaImager * imager, XimeaImager * ximeaImager); void stopRecordTemperature(); private: Iris::IrisXimeaImager * m_imager; bool m_bIsRecord; XimeaImager * m_ximeaImager; public slots: void recordTemperature(QString filePath); signals: }; //queue q; //static QMutex r_qtx{ QMutex::Recursive }; static std::mutex r_qtx; class WriteData2Disk : public QObject { Q_OBJECT public: WriteData2Disk(); void setParm(queue * q, queue * qFrameCounter, QString baseFileName, int frameSizeInByte, int number_WriteDisk, MemoryPool * pool, rgbImage * rgbImage); private: queue * m_q; queue * m_qFrameCounter; QString m_QbaseFileName; int m_iFrameSizeInByte; int m_iNumber_WriteDisk; MemoryPool * m_pool; bool isExitWriteData2Disk; rgbImage * m_rgbImage; public slots: void write2Disk(); void exitWriteData2Disk(); signals: }; class XimeaImager : public QObject { Q_OBJECT public: XimeaImager(); ~XimeaImager(); void setFramerate(double framerate); double getFramerate(); double setExposureTime(float exposureTime_in_us); int wrapSetExposureTime(float exposureTime_in_us); double getExposureTime(); double autoExposure(); void setGain(double gain); double getGain(); int getSampleCount(); int getBandCount(); int getWindowStartBand(); int getWindowEndBand(); double geWavelengthAtBand(int x); void stopRecord(); int getFrameCounter(); void writeXiApiErrorCodes(QString filePath, int xiApiErrorCodes); int getMaxValueOfOneFrame(unsigned short * data, int numberOfPixel); int getImagerState() const; Encode ffmpegEncode; private: //0-61:ximea官方错误代码;99:发生的ximea官方错误代码,没有处理;100:未打开;101:打开;102:设置帧率;103:自动曝光;104:正在采集; int m_iImagerState; int m_iImagerStateTemp; int m_iOffsetyOfSpectralBin1, m_iOffsetyOfSpectralBin2; int m_iHeightOfSpectralBin1, m_iHeightOfSpectralBin2; QThread * m_recordTempThread; RecordXimeaTemperature * m_ximeaTemperature; QThread * writeData2DiskThread; WriteData2Disk * writeData2Disk; queue * q; queue * m_qFrameCounter; MemoryPool * m_pool; QString m_baseFileName; QString m_ximeaTemperatureCSVPath; Iris::IrisXimeaImager m_imager; unsigned short * m_buffer; // MemoryPool m_pool; bool m_bRecordControl; int m_iFrameCounter; int m_iFrameSizeInByte; rgbImage * m_rgbImage; void writeHdr(); void processXiApiErrorCodes(int xiApiErrorCodes); inline double getSbgTime(XI_IMG * image, double timeDifferenceBetweenSbgAndXimea) { double ximeaTime = (double)image->tsSec + (double)image->tsUSec/1000000; return ximeaTime + timeDifferenceBetweenSbgAndXimea; } Configfile m_configfile; ParameterConfigfile m_parameterConfigfile; public slots: void openImger(); void closeImger(); double calculateTimeDifferenceBetweenSbgAndximea(XI_IMG * m_image, double timeDifferenceBetweenSbgAndOS); void startRecord(double TimeDifferenceBetweensOSAndSbg,QString baseFileName); signals: void recordFinished(); void ximeaImageStatus(int); void recordXimeaTemperatureSignal(QString); void startWriteDiskSignal(); void autoExposeMaxValueOfOneFrame(int, double); void frameRateSignal(double); void binSignal(int, int); }; #endif // XIMEAIMAGER_H