#ifndef HXVIDEODEVICE_H #define HXVIDEODEVICE_H #include #include #include #include #include #include "HxTaskDispatch.h" #include using namespace cv; using namespace std; #if USE_ALGORITHM #include "rkrga/rga.h" #include "rkrga/im2d.hpp" #endif class HxVideoDevice : public QThread { Q_OBJECT public: HxVideoDevice(void); void set(int type, QString address); void set(int type, QString address, BsdWarnRegion region); void set(bool status); bool get_alarm_detection_timestamp(void); QString snap(void); QString build_image(int id); QString build_video(int id); void test(void); private: vector compress(Mat frame, int quality); QString snap(Mat frame); QString snap(vector data); void recording_creation_task(void); void video_frame_queue_check(void); void frame_read_task(void); protected: void run() override; private: int MvGetFrameBlkInfo(VideoFrameDataInfo *pImageDataInfo); int MvReleaseFrameBlkInfo(VideoFrameDataInfo *pImageDataInfo); int MvConvertImage(VideoFrameDataInfo *pSrcImageDataInfo, VideoFrameDataInfo *pDstImageDataInfo); private: int type; int frame_id = 0; int video_fps = 25; QString address = ""; QDateTime alarm_detection_timestamp = QDateTime::currentDateTime(); bool detection_status = true; QMutex record_queue_mutex; QQueue record_queue; QMutex video_frames_mutex; QQueue video_frames; QMutex record_frames_mutex; QMap> record_frames; Mat video_frame; VideoCapture video_capture; VideoFrameDataInfo detect_frame_buffer; VideoFrameDataInfo bgr_frame_buffer; }; #endif