Add reader
[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 }
43
44 UrlReader::~UrlReader()
45 {
46 }
47
48 bool UrlReader::read(cv::Mat& mat)
49 {
50     bool ret = vcap.read(mat);
51     if (mat.empty()){
52         LOG_ERROR(TAG, "blank frame grabbed");
53         return false;
54     }
55     return ret;
56 }
57
58 //
59 //void UrlReader::read()
60 //{
61 //}
62 //
63 //void FileReader::read()
64 //{
65 //}
66 //
67 //void UsbReader::read()
68 //{
69 //}