1 void
    2 capture_frames (unicap_handle_t handle, int nframes)
    3 {
    4   unicap_format_t format;
    5   unicap_data_buffer_t buffer;
    6   int cframe = 0;
    7 
    8 
    9   if (!SUCCESS (unicap_get_format (handle, &format)))
   10     {
   11       fprintf (stderr, "Failed to get video format!\n");
   12       exit (-1);
   13     }
   14 
   15   format.buffer_type = UNICAP_BUFFER_TYPE_USER; // (1)
   16 
   17   if (!SUCCESS (unicap_set_format (handle, &format)))
   18     {
   19       fprintf (stderr, "Failed to set video format!\n");
   20       exit (-1);
   21     }
   22 
   23   buffer.data = malloc (format.buffer_size);    // (2)
   24   buffer.buffer_size = format.buffer_size;
   25 
   26   unicap_start_capture (handle);        // (4)
   27   unicap_queue_buffer (handle, &buffer);        // (3)
   28 
   29   while (cframe < nframes)
   30     {
   31       unicap_data_buffer_t *returned_buffer;
   32       if (!SUCCESS (unicap_wait_buffer (handle, &returned_buffer)))
   33         {
   34           fprintf (stderr, "Failed to wait for buffer!\n");
   35           exit (-1);
   36         }
   37 
   38       // (5)
   39 
   40       if (!SUCCESS (unicap_queue_buffer (handle, returned_buffer)))
   41         {
   42           fprintf (stderr, "Failed to queue buffer!\n");
   43           exit (-1);
   44         }
   45 
   46       cframe++;
   47     }
   48   printf ("Captured %d frames!\n", nframes);
   49 
   50   unicap_stop_capture (handle); // (6)
   51 
   52   free (buffer.data);
   53 }