[aravis] Re: compiling an example program

  • From: Martin Kielhorn <kielhorn.martin@xxxxxxxxx>
  • To: aravis@xxxxxxxxxxxxx
  • Date: Fri, 11 Apr 2014 14:16:35 +0200

Hi Sol,
perhaps you would like to have a look on my code:

https://github.com/plops/arduino_due_lisp/blob/master/arvexample.c

I added fouriertransforms and have to compile like this (as currently in
the makefile):
gcc -g -O2 -o arv-example arvexample.c -MD -MP -MF -pthread
-I/usr/include/aravis-0.4 -I/usr/lib/glib-2.0/include
 -I/usr/include/glib-2.0  -lm -L/usr/lib -lgio-2.0 -lgobject-2.0 -lxml2
-lgthread-2.0 -pthread -lrt -lglib-2.0 -lz  -laravis-0.4 -lglfw -lGL
-lfftw3 -lfftw3_threads

Note, that I'm not sure if this code actually works.
I remember getting fed up with C because there were so many things I didn't
understand
from the docs and had to find out by experiment. Therefore, I switched to
Common Lisp (using Clozure CL) rather quickly.


Regards, Martin



2014-04-10 20:19 GMT+02:00 Sol Pedre <solpedre@xxxxxxxxx>:

> Hello,
>
> I have succesfully installed aravis and used the arv-viewer to see the
> input from a DFK 23GM021 The Imaging Source Gige camera.
>
> Now I am trying to use this camera from a C/C++ code that process images.
> To start, i am reading the aravis reference manual, and i am trying to
> compile the example in the ArvCamera reference page (I paste it below).
>
> However, i am finding several errors, i guess i am missing some library
> bindings and others. The first two errors are:
>
> Invalid arguments ' Candidates are: void arv_camera_set_region(_ArvCamera
> *, ?, ?, ?, ?)
>
> and
>
> Invalid arguments '
> Candidates are: void arv_stream_set_emit_signals(_ArvStream *, ?)
>
>
> These both functions take gint as parameters, and the code passes gint,
> but it does not work.
>
> Please tell me which libraries i should be linking with and where they
> should be, and also any light you can shed in those errors...
>
> Thank you very much!!
> Sol
>
>
> ---------------
>
> Code:
>
>
> #include <arv.h>
> #include <glib.h>
> #include <glib-object.h>
> #include <stdlib.h>
> #include <signal.h>
> #include <stdio.h>
>
> typedef struct {
>     GMainLoop *main_loop;
>     int buffer_count;
> } ApplicationData;
>
> static gboolean cancel = FALSE;
>
> static void
> set_cancel (int signal)
> {
>     cancel = TRUE;
> }
>
> static void
> new_buffer_cb (ArvStream *stream, ApplicationData *data)
> {
>     ArvBuffer *buffer;
>
>     buffer = arv_stream_try_pop_buffer (stream);
>     if (buffer != NULL) {
>         if (buffer->status == ARV_BUFFER_STATUS_SUCCESS)
>             data->buffer_count++;
>         /* Image processing here */
>         arv_stream_push_buffer (stream, buffer);
>     }
> }
>
> static gboolean
> periodic_task_cb (void *abstract_data)
> {
>     ApplicationData *data = (ApplicationData*)abstract_data;
>
>     printf ("Frame rate = %d Hz\n", data->buffer_count);
>     data->buffer_count = 0;
>
>     if (cancel) {
>         g_main_loop_quit (data->main_loop);
>         return FALSE;
>     }
>
>     return TRUE;
> }
>
> static void
> control_lost_cb (ArvGvDevice *gv_device)
> {
>     /* Control of the device is lost. Display a message and force
> application exit */
>     printf ("Control lost\n");
>
>     cancel = TRUE;
> }
>
> int
> main (int argc, char **argv)
> {
>     ApplicationData data;
>     ArvCamera *camera;
>     ArvStream *stream;
>     ArvBuffer *buffer;
>     int i;
>
>     data.buffer_count = 0;
>
>     /* Mandatory glib type system initialization */
>     //arv_g_type_init();
>     g_type_init();
>     /* Instantiation of the first available camera */
>     camera = arv_camera_new (NULL);
>
>     if (camera != NULL) {
>         void (*old_sigint_handler)(int);
>         gint payload;
>         guint software_trigger_source = 0;
>
>         /* Set region of interrest to a 200x200 pixel area */
>         arv_camera_set_region(camera, (gint)0, (gint)0, (gint)200,
> (gint)200);
>         /* Set frame rate to 10 Hz */
>         arv_camera_set_frame_rate (camera, 10.0);
>         /* retrieve image payload (number of bytes per image) */
>         payload = arv_camera_get_payload (camera);
>
>         /* Create a new stream object */
>         stream = arv_camera_create_stream (camera, NULL, NULL);
>         if (stream != NULL) {
>             /* Push 50 buffer in the stream input buffer queue */
>             for (i = 0; i < 50; i++)
>                 arv_stream_push_buffer (stream, arv_buffer_new (payload,
> NULL));
>
>             /* Start the video stream */
>             arv_camera_start_acquisition (camera);
>
>             /* Connect the new-buffer signal */
>             g_signal_connect (stream, "new-buffer", G_CALLBACK
> (new_buffer_cb), &data);
>             /* And enable emission of this signal (it's disabled by
> default for performance reason) */
>             arv_stream_set_emit_signals(stream, TRUE);
>
>             /* Connect the control-lost signal */
>             g_signal_connect (arv_camera_get_device (camera),
> "control-lost",
>                       G_CALLBACK (control_lost_cb), NULL);
>
>             /* Install the callback for frame rate display */
>             g_timeout_add_seconds (1, periodic_task_cb, &data);
>
>             /* Create a new glib main loop */
>             data.main_loop = g_main_loop_new (NULL, FALSE);
>
>             old_sigint_handler = signal (SIGINT, set_cancel);
>
>             /* Run the main loop */
>             g_main_loop_run (data.main_loop);
>
>             signal (SIGINT, old_sigint_handler);
>
>             g_main_loop_unref (data.main_loop);
>
>             /* Stop the video stream */
>             arv_camera_stop_acquisition (camera);
>
>             g_object_unref (stream);
>         } else
>             printf ("Can't create stream thread (check if the device is
> not already used)\n");
>
>         g_object_unref (camera);
>     } else
>         printf ("No camera found\n");
>
>     return 0;
> }
>
>


-- 
Martin Kielhorn
Leibniz-Institute of Photonic Technology, Albert-Einstein Str. 9, 07745
Jena,
Germany
Tel.: +49 (0) 3641 206 245
Randall Division of Cell & Molecular Biophysics, King's College London, NHH,
Guy's Campus, London SE1 1UL, U.K.
tel: +44 (0) 207 848 6519,  fax: +44 (0) 207 848 6435

Other related posts: