#include "RtspImageRedis.h"
|
#include <basic/debug/Debug.h>
|
#include <opencv2/opencv.hpp>
|
#include <basic/timer_counter/Clocktimer.h>
|
#include <thread>
|
#include <basic/util/app/AppPreference.hpp>
|
RtspImageRedisElement::RtspImageRedisElement(const std::string& camId):
|
TimerElement(10),m_camId(camId){
|
}
|
|
//定时将队列中的图片放入Redis
|
void RtspImageRedisElement::timerFunc()
|
{
|
if(!m_imageQueue.empty())
|
{
|
auto imageCount = m_redisTool.getSize(m_camId);
|
//保证Redis中的图片不要过多
|
if (imageCount > M_CAM_PIC_MAX_COUNT) {
|
ERR("Too Much Pics In Cam " << m_camId << " Redis ImageCount: " << imageCount );
|
return;
|
}
|
auto item = m_imageQueue.front();
|
m_redisTool.setKeyImage(item.m_imgName,item.m_image);
|
m_redisTool.listLpush(m_camId, item.m_imgName);
|
m_imageQueue.pop();
|
INFO("SaveImage To Redis Succeed CamID:"<<m_camId<<" ImageName:"<<item.m_imgName);
|
}
|
}
|
|
//继承自父类,线程初始化的一些工作
|
void RtspImageRedisElement::threadInitial()
|
{
|
INFO("MYH DEBUG HERE");
|
}
|
|
//继承自父类,线程结束的时候调用
|
void RtspImageRedisElement::threadClosing()
|
{
|
INFO("MYH DEBUG HERE");
|
}
|
|
//保存图片到队列中,
|
//注意: 因为图片比较大,所以队列中不适合保存有太多的图片,否则可能占用内存过多,导致电脑不响应
|
bool RtspImageRedisElement::SaveImage(const std::string& imageName,const cv::Mat& img)
|
{
|
//保证队列中的图片不要过多
|
if(m_imageQueue.size() < M_CAM_PIC_MAX_COUNT)
|
{
|
INFO("SaveImage Succeed ImgName:"<<imageName);
|
m_imageQueue.push(NameImagePair_s_t(imageName,img));
|
}
|
else{
|
ERR("SaveImage Failed ImgName:"<<imageName);
|
}
|
return true;
|
}
|