Utilisation de la librairie ng sous FreeBSD
Bonjour,
J'utilise la librairie ng pour prendre une image d'une camera raccorde a une carte Pinnacle PCTV et en faire un jpeg. Voici mon code:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
const struct ng_vid_driver *drv;
void *h_drv;
void main()
{
drv = ng_vid_open( "/dev/bktr0" ,NULL , NULL, 0, &h_drv );
if ( drv == NULL )
{
perror ( "Can't open device" );
exit(1);
}
} |
Bien que la compilation passe sans probleme, au lancement j'ai l'erreur:
Can't open device: Unknown error: 0
Pourtant xawtv et webcam qui utilisent cette meme librairie fonctionnent correctement, de plus ayant regarde dans le code source de webcam.c, je fais la meme chose dans mon code.
/dev/bktr0 existe et est utilise par xawtv et webcam.
Y'a-t-il quelque chose de special a ajouter sous FreeBSD ?
Merci par avance.
En ajoutant un ng_init();
Re,
En fouillant dans webcam.c founit avec xawtv, j'ai ajouter un ng_init(); ( en autre )
Voici mon nouveau code:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
|
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <fcntl.h>
#include <limits.h>
#include <pthread.h>
#include <math.h>
#include <sys/time.h>
#include <sys/mman.h>
#include <sys/ioctl.h>
#include <sys/stat.h>
#include "grab-ng.h"
#include "jpeglib.h"
#include "list.h"
main()
{
const struct ng_vid_driver *drv;
void *h_drv;
struct stat st;
int i, fh;
ng_init();
ng_debug = 1;
for ( i = 0; ng_dev.video_scan[i] != NULL; i++ )
{
if (-1 == lstat(ng_dev.video_scan[i],&st))
{
if (ENOENT == errno)
continue;
fprintf(stderr,"%s: %s\n",ng_dev.video_scan[i],strerror(errno));
continue;
}
fh = open(ng_dev.video_scan[i],O_RDWR);
if (-1 == fh)
{
if (ENODEV == errno)
continue;
fprintf(stderr,"%s: %s\n",ng_dev.video_scan[i],strerror(errno));
continue;
}
close(fh);
drv = ng_vid_open(ng_dev.video_scan[i], NULL, NULL, 0, &h_drv);
if (NULL == drv)
{
fprintf(stderr,"%s: initialization failed\n",ng_dev.video_scan[i]);
perror ( "Impossible d'ouvrir le dev" );
continue;
}
printf ( "trouve: [%s] suite\n", ng_dev.video_scan[i] );
}
} |
A la compilation, avec:
gcc -O2 -I/usr/include -I/usr/local/include -I/usr/src/lib/libio -I/usr/ports/multimedia/xawtv/work/xawtv-3.90/libng -L/usr/local/lib -L/usr/ports/multimedia/xawtv/work/xawtv-3.90/libng -L/usr/X11R6/lib/xawtv -o test test.c -ljpeg -lng
Pas d'erreur, mais a l'execution j'ai:
dlopen: /usr/X11R6/lib/xawtv/bilinear.so: Undefined symbol "ng_filter_register"
dlopen: /usr/X11R6/lib/xawtv/conv-mjpeg.so: Undefined symbol "ng_jpeg_quality"
dlopen: /usr/X11R6/lib/xawtv/cubic.so: Undefined symbol "ng_filter_register"
dlopen: /usr/X11R6/lib/xawtv/drv0-bsd.so: Undefined symbol "ng_ratio_fixup"
dlopen: /usr/X11R6/lib/xawtv/flt-disor.so: Undefined symbol "sqrt"
dlopen: /usr/X11R6/lib/xawtv/flt-gamma.so: Undefined symbol "ng_filter_register"
dlopen: /usr/X11R6/lib/xawtv/flt-invert.so: Undefined symbol "ng_filter_register"
dlopen: /usr/X11R6/lib/xawtv/flt-smooth.so: Undefined symbol "ng_filter_register"
dlopen: /usr/X11R6/lib/xawtv/linear-blend.so: Undefined symbol "ng_filter_register"
dlopen: /usr/X11R6/lib/xawtv/linedoubler.so: Undefined symbol "ng_filter_register"
dlopen: /usr/X11R6/lib/xawtv/read-avi.so: Undefined symbol "ng_vfmt_to_desc"
dlopen: /usr/X11R6/lib/xawtv/snd-oss.so: Undefined symbol "ng_dev"
dlopen: /usr/X11R6/lib/xawtv/write-avi.so: Undefined symbol "ng_writer_register"
WARNING: no plugins found [/usr/X11R6/lib/xawtv]
/dev/bktr0: initialization failed
Impossible d'ouvrir de dev: Unknonw error: 0
Je pense qu'il me manque un lien vers une ou plusieurs lib dans la chaine gcc, mais je ne vois pas lesquelles.
Une idée ?
Merci par avance !