派生自 development/c++

chenshijun
2019-03-09 a97b6c212920c2d14f506169ef0cdea27112c8c1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#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;
}