+#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()
+//{
+//}