79 lines
1.7 KiB
C++
79 lines
1.7 KiB
C++
#ifndef HXVIDEODEVICE_H
|
|
#define HXVIDEODEVICE_H
|
|
|
|
#include <QtConcurrent>
|
|
#include <QThread>
|
|
#include <QDateTime>
|
|
#include <QMap>
|
|
#include <QMutex>
|
|
|
|
#include "HxTaskDispatch.h"
|
|
|
|
#include <opencv2/opencv.hpp>
|
|
|
|
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<uint8_t> compress(Mat frame, int quality);
|
|
QString snap(Mat frame);
|
|
QString snap(vector<uint8_t> 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<QString> record_queue;
|
|
|
|
QMutex video_frames_mutex;
|
|
QQueue<Mat> video_frames;
|
|
|
|
QMutex record_frames_mutex;
|
|
QMap<int, vector<uint8_t>> record_frames;
|
|
|
|
Mat video_frame;
|
|
VideoCapture video_capture;
|
|
|
|
VideoFrameDataInfo detect_frame_buffer;
|
|
VideoFrameDataInfo bgr_frame_buffer;
|
|
};
|
|
|
|
#endif
|