amadeh | Bonjour,
Voilà, je cherche à faire un petit programme qui me permettrait de récupérer une image de ma webcam. J'ai réussi à faire le programme ci-dessous mais je ne comprends pas pourquoi il ne marche pas. Il compile bien mais j'obtiens une image noire.
Code :
- #include <stdio.h>
- #include <sys/ioctl.h>
- #include <fcntl.h>
- #include <linux/videodev.h>
- #include <sys/mman.h>
- void extractPix(unsigned char* imgbuffer, int hauteur, int largeur){
- FILE * fp = fopen("captureCam.ppm", "w" );
- fprintf(fp, "P6\n%d %d\n255\n",largeur, hauteur);
- int x, y, r, g, b, p;
- p=0;
- for(y=0;y<hauteur; y++){
- for(x=0; x<largeur; x++){
- b=imgbuffer[p];p++;
- g=imgbuffer[p];p++;
- r=imgbuffer[p];p++;
- putc(r, fp);
- putc(g, fp);
- putc(b, fp);
- }
- }
- fflush(fp);
- fclose(fp);
- }
- int main(int argc, const char* argv[]){
- int fd;
- fd = open("/dev/video0", O_RDWR);
- struct video_mbuf mbuf;
- struct video_mmap mapbuf;
- ioctl(fd, VIDIOCGMBUF, &mbuf);
- unsigned char * ptr;
- unsigned char * posImg;
- ptr = (unsigned char *)mmap(0, mbuf.size, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
- mapbuf.frame = 0;
- mapbuf.height = 480;
- mapbuf.width = 640;
- mapbuf.format = VIDEO_PALETTE_RGB24;
- ioctl(fd, VIDIOCMCAPTURE, &mapbuf);
- ioctl(fd, VIDIOCSYNC, 0);
- posImg = ptr + mbuf.offsets[0];
- extractPix(posImg, 480, 640);
- close(fd);
- munmap(ptr, mbuf.size);
- return 0;
- }
|
|