Here’s an example of the use of the ArvCamera API of Aravis:
#include <arv.h> #include <stdlib.h> static gboolean cancel = FALSE; static void set_cancel (int signal) { cancel = TRUE; } static char *arv_option_camera_name = NULL; static char *arv_option_debug_domains = NULL; static gboolean arv_option_snaphot = FALSE; static gboolean arv_option_auto_buffer = FALSE; static int arv_option_width = -1; static int arv_option_height = -1; static int arv_option_horizontal_binning = -1; static int arv_option_vertical_binning = -1; static const GOptionEntry arv_option_entries[] = { { "name", 'n', 0, G_OPTION_ARG_STRING, &arv_option_camera_name,"Camera name", NULL}, { "snapshot", 's', 0, G_OPTION_ARG_NONE, &arv_option_snaphot, "Snapshot", NULL}, { "auto", 'a', 0, G_OPTION_ARG_NONE, &arv_option_auto_buffer, "AutoBufferSize", NULL}, { "width", 'w', 0, G_OPTION_ARG_INT, &arv_option_width, "Width", NULL }, { "height", 'h', 0, G_OPTION_ARG_INT, &arv_option_height, "Height", NULL }, { "h-binning", '\0', 0, G_OPTION_ARG_INT, &arv_option_horizontal_binning,"Horizontal binning", NULL }, { "v-binning", '\0', 0, G_OPTION_ARG_INT, &arv_option_vertical_binning, "Vertical binning", NULL }, { "debug", 'd', 0, G_OPTION_ARG_STRING, &arv_option_debug_domains, "Debug mode", NULL }, { NULL } }; int main (int argc, char **argv) { ArvCamera *camera; ArvStream *stream; ArvBuffer *buffer; GOptionContext *context; GError *error = NULL; int i; g_thread_init (NULL); g_type_init (); context = g_option_context_new (NULL); g_option_context_add_main_entries (context, arv_option_entries, NULL); if (!g_option_context_parse (context, &argc, &argv, &error)) { g_option_context_free (context); g_print ("Option parsing failed: %s\n", error->message); g_error_free (error); return EXIT_FAILURE; } g_option_context_free (context); arv_debug_enable (arv_option_debug_domains); if (arv_option_camera_name == NULL) g_print ("Looking for the first available camera\n"); else g_print ("Looking for camera '%s'\n", arv_option_camera_name); camera = arv_camera_new (arv_option_camera_name); if (camera != NULL) { gint payload; gint x, y, width, height; gint dx, dy; double exposure; guint64 n_processed_buffers; guint64 n_failures; guint64 n_underruns; arv_camera_set_region (camera, 0, 0, arv_option_width, arv_option_height); arv_camera_set_binning (camera, arv_option_horizontal_binning, arv_option_vertical_binning); arv_camera_get_region (camera, &x, &y, &width, &height); arv_camera_get_binning (camera, &dx, &dy); exposure = arv_camera_get_exposure_time (camera); payload = arv_camera_get_payload (camera); g_print ("image width = %d\n", width); g_print ("image height = %d\n", height); g_print ("horizontal binning = %d\n", dx); g_print ("vertical binning = %d\n", dy); g_print ("exposure = %g µs\n", exposure); stream = arv_camera_new_stream (camera); if (arv_option_auto_buffer) arv_gv_stream_set_option (ARV_GV_STREAM (stream), ARV_GV_STREAM_OPTION_SOCKET_BUFFER_AUTO, 0); for (i = 0; i < 30; i++) arv_stream_push_buffer (stream, arv_buffer_new (payload, NULL)); arv_camera_start_acquisition (camera); signal (SIGINT, set_cancel); do { g_usleep (100000); do { buffer = arv_stream_pop_buffer (stream); if (buffer != NULL) { /* Image processing here */ arv_stream_push_buffer (stream, buffer); } } while (buffer != NULL); } while (!cancel); arv_stream_get_statistics (stream, &n_processed_buffers, &n_failures, &n_underruns); g_print ("Processed buffers = %Ld\n", n_processed_buffers); g_print ("Failures = %Ld\n", n_failures); g_print ("Underruns = %Ld\n", n_underruns); arv_camera_stop_acquisition (camera); g_object_unref (stream); g_object_unref (camera); } else g_print ("No camera found\n"); return 0; }
A direct use of the Genicam API is shown in the arv-test.c file in the git repository:
http://git.gnome.org/browse/aravis/tree/src/arvtest.c