Fix nan issue in features
[trackerpp.git] / src / VideoReader.cpp
1 #include "VideoReader.h"
2 #include "Logger.h"
3
4 using namespace suanzi;
5 using namespace cv;
6
7 const static std::string TAG = "VideoReader";
8
9 VideoReaderPtr VideoReaderFactory::createVideoReader(VideoSrcType type, const std::string& url)
10 {
11     VideoReaderPtr v;
12     switch(type){
13         case VideoSrcType::URL:
14             v = std::make_shared<UrlReader>(type, url);
15             break;
16         case VideoSrcType::File:
17             v = std::make_shared<FileReader>(type, url);
18             break;
19         case VideoSrcType::USB:
20             v = std::make_shared<UsbReader>(type, url);
21             break;
22         default:
23             break;
24     }
25     return v;
26 }
27
28 VideoReader::~VideoReader()
29 {
30     LOG_DEBUG("video", "init");
31 }
32
33
34 UrlReader::UrlReader(VideoSrcType type, const std::string& url) : VideoReader(type, url)
35 {
36     LOG_DEBUG(TAG, "UrlReader, open " + url);
37     vcap.open(url);
38     if (!vcap.isOpened()){
39         LOG_ERROR(TAG, "open video " + url);
40         throw std::runtime_error("Cannot open video url " + url);
41     }
42     LOG_DEBUG(TAG, "reader video sourc succeed. ");
43 }
44
45 UrlReader::~UrlReader()
46 {
47     vcap.release();
48 }
49
50 static long count = 0;
51
52 bool UrlReader::read(cv::Mat& mat)
53 {
54     bool ret = vcap.read(mat);
55     if (mat.empty()){
56         LOG_ERROR(TAG, "blank frame grabbed");
57         return false;
58     }
59     count++;
60     std::string name = "./temp/image_" + std::to_string(count) + ".png";
61     if ((count % 50 == 0)){
62         imwrite(name.c_str(), mat);
63     }
64     return ret;
65 }