#ifndef RTSP_IMAGE_REDIS_ELEMENT_H
|
#define RTSP_IMAGE_REDIS_ELEMENT_H
|
|
#include <basic/pipe/TimerElement.h>
|
#include <opencv2/opencv.hpp>
|
#include "../StructureApp/HiredisTool.h"
|
#include <atomic>
|
#include <queue>
|
|
//保存到Redis的图片名和图片数据
|
struct NameImagePair_s_t
|
{
|
NameImagePair_s_t(const std::string& name,const cv::Mat& image)
|
{
|
this->m_imgName = name;
|
this->m_image=image;
|
}
|
//图片名称
|
std::string m_imgName;
|
//图片数据
|
cv::Mat m_image;
|
};
|
|
//将图片保存到Redis的部分隔离出来,作为一个单独的线程
|
//保存图片到Redis的单独线程类,每个类的实例对应一个CamId
|
class RtspImageRedisElement: public TimerElement {
|
public:
|
RtspImageRedisElement(const std::string& camId);
|
//保存图片到内部的队列中
|
bool SaveImage(const std::string& imageName,const cv::Mat& img);
|
private:
|
virtual void timerFunc() override;
|
virtual void threadInitial() override;
|
virtual void threadClosing() override;
|
private:
|
// Redis的工具类
|
HiredisTool m_redisTool;
|
|
|
//用来暂存图片的队列,最大的大小为M_CAM_PIC_MAX_COUNT
|
std::queue<NameImagePair_s_t> m_imageQueue;
|
|
//对保存到Redis的图片进行计数
|
std::atomic<int> m_picCount{0};
|
|
//摄像机ID
|
std::string m_camId;
|
|
//每台摄像机保存到Redis的图片数量的最大值
|
const int M_CAM_PIC_MAX_COUNT = 25;
|
};
|
|
#endif // VIDEOCAPTUREELEMENT_H
|