separate pytwrpper from predictorWrappery
[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 static void printImg(const cv::Mat& mat)
53 {
54     std::cout << mat.at<int>(0,0) << std::endl;
55 }
56
57 bool UrlReader::read(cv::Mat& mat)
58 {
59     bool ret = vcap.read(mat);
60     if (mat.empty()){
61         LOG_ERROR(TAG, "blank frame grabbed");
62         return false;
63     }
64     count++;
65     std::string name = "./temp/image_" + std::to_string(count) + ".png";
66     if ((count % 50 == 0)){
67         imwrite(name.c_str(), mat);
68     }
69     return ret;
70 }