improvement
[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 VideoReader* VideoReaderFactory::createVideoReader(VideoSrcType type, const std::string& url)
10 {
11     VideoReader* v = nullptr;
12     switch(type){
13         case VideoSrcType::URL:
14             v = new UrlReader(type, url);
15             break;
16         case VideoSrcType::File:
17             v = new FileReader(type, url);
18             break;
19         case VideoSrcType::USB:
20             v = new 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 }
48
49 bool UrlReader::read(cv::Mat& mat)
50 {
51     bool ret = vcap.read(mat);
52     if (mat.empty()){
53         LOG_ERROR(TAG, "blank frame grabbed");
54         return false;
55     }
56     return ret;
57 }
58
59 //
60 //void UrlReader::read()
61 //{
62 //}
63 //
64 //void FileReader::read()
65 //{
66 //}
67 //
68 //void UsbReader::read()
69 //{
70 //}