/*
This file is part of BGSLibrary.

BGSLibrary is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

BGSLibrary is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with BGSLibrary.  If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once

#include <iostream>
#include <opencv2/opencv.hpp>


#include "Config.h"
#include "IFrameProcessor.h"

namespace bgslibrary
{
  class VideoCapture
  {
  private:
    IFrameProcessor* frameProcessor;
    CvCapture* capture;
    IplImage* frame;
    int key;
    int64 start_time;
    int64 delta_time;
    double freq;
    double fps;
    long frameNumber;
    long stopAt;
    bool useCamera;
    int cameraIndex;
    bool useVideo;
    std::string videoFileName;
    int input_resize_percent;
    bool showOutput;
    bool enableFlip;

  public:
    VideoCapture();
    ~VideoCapture();

    void setFrameProcessor(IFrameProcessor* frameProcessorPtr);
    void setCamera(int cameraIndex);
    void setVideo(std::string filename);
    void start();

  private:
    void setUpCamera();
    void setUpVideo();

    void saveConfig();
    void loadConfig();
  };
}