#include "grabber.h"
#include <iostream>
#include <pylon/PylonIncludes.h>
#include <chrono>
using namespace std::chrono;

void Grabber::run() {
  stop_request = false;
  int count = 0;
  if (camera->isOpen()) {
      camera->frameRate(static_cast<uint>(framerate));
      camera->exposureTime(exposure);
      camera->gain(gain);
      Pylon::CGrabResultPtr frame;
      Pylon::CInstantCamera *cam = camera->getCamera();
      cam->StartGrabbing();
      while (camera->isOpen() && !stop_request) {
          MyImage *img = new MyImage();
          auto start = high_resolution_clock::now();
          cam->RetrieveResult( 5000, frame, Pylon::TimeoutHandling_ThrowException);
          auto stop1 = high_resolution_clock::now();
          img->setFrame(frame);
          auto stop2 = high_resolution_clock::now();
          buffer->push(img);
          auto duration1 = duration_cast<microseconds>(stop1 - start);
          auto duration2 = duration_cast<microseconds>(stop2 - stop1);
          count += 1;
      }
      cam->StopGrabbing();
    }
}