Add shared ptr
[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     switch(type){
12         case VideoSrcType::URL:
13             {
14                 VideoReaderPtr v (new UrlReader(type, url));
15                 return v;
16             }
17         case VideoSrcType::File:
18             {
19                 VideoReaderPtr v (new FileReader(type, url));
20                 return v;
21             }
22         case VideoSrcType::USB:
23             {
24                 VideoReaderPtr v (new UsbReader(type, url));
25                 return v;
26             }
27         default:
28             break;
29     }
30     return nullptr;
31 }
32
33 VideoReader::~VideoReader()
34 {
35     LOG_DEBUG("video", "init");
36 }
37
38
39 UrlReader::UrlReader(VideoSrcType type, const std::string& url) : VideoReader(type, url)
40 {
41     LOG_DEBUG(TAG, "UrlReader, open " + url);
42     vcap.open(url);
43     if (!vcap.isOpened()){
44         LOG_ERROR(TAG, "open video " + url);
45         throw std::runtime_error("Cannot open video url " + url);
46     }
47     LOG_DEBUG(TAG, "reader video sourc succeed. ");
48 }
49
50 UrlReader::~UrlReader()
51 {
52     vcap.release();
53 }
54
55 bool UrlReader::read(cv::Mat& mat)
56 {
57     bool ret = vcap.read(mat);
58     if (mat.empty()){
59         LOG_ERROR(TAG, "blank frame grabbed");
60         return false;
61     }
62     return ret;
63 }
64
65 //
66 //void UrlReader::read()
67 //{
68 //}
69 //
70 //void FileReader::read()
71 //{
72 //}
73 //
74 //void UsbReader::read()
75 //{
76 //}