Add reader
[trackerpp.git] / src / VideoReader.cpp
diff --git a/src/VideoReader.cpp b/src/VideoReader.cpp
new file mode 100644 (file)
index 0000000..22036cb
--- /dev/null
@@ -0,0 +1,69 @@
+#include "VideoReader.h"
+#include "Logger.h"
+
+using namespace suanzi;
+using namespace cv;
+
+const static std::string TAG = "VideoReader";
+
+VideoReader* VideoReaderFactory::createVideoReader(VideoSrcType type, const std::string& url)
+{
+    VideoReader* v = nullptr;
+    switch(type){
+        case VideoSrcType::URL:
+            v = new UrlReader(type, url);
+            break;
+        case VideoSrcType::File:
+            v = new FileReader(type, url);
+            break;
+        case VideoSrcType::USB:
+            v = new UsbReader(type, url);
+            break;
+        default:
+            break;
+    }
+    return v;
+}
+
+VideoReader::~VideoReader()
+{
+    LOG_DEBUG("video", "init");
+}
+
+
+UrlReader::UrlReader(VideoSrcType type, const std::string& url) : VideoReader(type, url)
+{
+    LOG_DEBUG(TAG, "UrlReader, open " + url);
+    vcap.open(url);
+    if (!vcap.isOpened()){
+        LOG_ERROR(TAG, "open video " + url);
+        throw std::runtime_error("Cannot open video url " + url);
+    }
+}
+
+UrlReader::~UrlReader()
+{
+}
+
+bool UrlReader::read(cv::Mat& mat)
+{
+    bool ret = vcap.read(mat);
+    if (mat.empty()){
+        LOG_ERROR(TAG, "blank frame grabbed");
+        return false;
+    }
+    return ret;
+}
+
+//
+//void UrlReader::read()
+//{
+//}
+//
+//void FileReader::read()
+//{
+//}
+//
+//void UsbReader::read()
+//{
+//}