Пример #1
0
  void run() {
    if (!setup_capture_source()) {
      std::cout << "Could not initialize capture source" << std::endl;
      return;
    }

    cv::Size output_size = get_output_size();
    size_t full_image_dimensions = output_size.width * output_size.height * 3;
    m_framework = create_message_framework(m_direction, full_image_dimensions);

    if (m_framework == NULL) {
      std::cout << "Could not initialize message framework" << std::endl;
      return;
    }

    std::cout << "Set up camera. Starting image acquisition" << std::endl;

    long last_acq_time = 0;

    while (running) {
      std::experimental::optional<std::pair<cv::Mat, long>> next_image_op = acquire_next_image();

      if (!next_image_op) {
        std::cout << "Error acquiring image! Trying again." << std::endl;
        continue;
      }

      cv::Mat next_image = next_image_op.value().first;
      long acq_time = next_image_op.value().second;

      write_frame(m_framework, next_image.data, acq_time, output_size.width, output_size.height, 3);

      long curr_time = get_time();
      long time_since_last_acq = curr_time - last_acq_time;
      long min_acq_time = 1000 / m_max_fps;
      auto sleep_time =  std::chrono::milliseconds(min_acq_time - time_since_last_acq);
      if (sleep_time > std::chrono::milliseconds(0)) {
        std::this_thread::sleep_for(sleep_time);
      }
      last_acq_time = acq_time;
    }
    destroy_capture_source();
    std::cout << "Cleaned up capture source" << std::endl;
    cleanup_message_framework(m_framework);
    std::cout << "Cleaned up message framework" << std::endl;
  }
Пример #2
0
int main(int argc, char * argv[])
{
  int argstat, capturestat, displaystat, retval;
  Cmdargs_t argstruct; /* command line parms  */
  Sourceparams_t sourceparams; /* info about video source  */
  Displaydata_t displaydata; /* info about dest display  */
  
  retval = 0;

  memset(&sourceparams, 0, sizeof(sourceparams));
  
  argstat =  parse_command_line(argc, argv, &argstruct);

  if (0 == argstat)
    {
      
      capturestat = setup_capture_source(argstruct, &sourceparams);

      if (0 == capturestat)
	{
	  displaystat = setup_capture_display(&sourceparams, &displaydata,
					      &argc, argv);
	  if (0 == displaystat)
	    {
	      capture_and_display(&sourceparams);
	    }
	  else
	    {
	      retval = -1; /* error setting up display  */
	    }
	}
      else
	{
	  retval = -1; /* error setting up source  */
	}
    }
  else
    {
      retval = -1; /* error parsing command line  */
    }

  return(retval);
}