unify the interface with detector
[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 bool UrlReader::read(cv::Mat& mat)
51 {
52     bool ret = vcap.read(mat);
53     if (mat.empty()){
54         LOG_ERROR(TAG, "blank frame grabbed");
55         return false;
56     }
57     return ret;
58 }
59
60 //
61 //void UrlReader::read()
62 //{
63 //}
64 //
65 //void FileReader::read()
66 //{
67 //}
68 //
69 //void UsbReader::read()
70 //{
71 //}