#pragma once #include <iostream> #include <fstream> #include <memory> //#include <chrono> //#include <thread> #include <opencv2/opencv.hpp> // opencv legacy includes //#include <opencv2/highgui/highgui_c.h> //#include <opencv2/imgproc/imgproc_c.h> //#include <opencv2/imgproc/types_c.h> #include "utils/GenericKeys.h" #include "utils/ILoadSaveConfig.h" #include "IFrameProcessor.h" namespace bgslibrary { class VideoCapture : public ILoadSaveConfig { private: std::shared_ptr<IFrameProcessor> frameProcessor; cv::VideoCapture capture; cv::Mat frame; int key; int64 start_time; int64 delta_time; double freq; double fps; int frameNumber; int stopAt; bool useCamera; int cameraIndex; bool useVideo; std::string videoFileName; int input_resize_percent; bool showOutput; bool showFPS; bool enableFlip; double loopDelay = 33.333; bool firstTime = true; public: VideoCapture(); ~VideoCapture(); void setFrameProcessor(const std::shared_ptr<IFrameProcessor> &_frameProcessor); void setCamera(int _index); void setVideo(std::string _filename); void start(); private: void setUpCamera(); void setUpVideo(); void save_config(cv::FileStorage &fs); void load_config(cv::FileStorage &fs); }; }