pb capture signal webcam

pb capture signal webcam - C - Programmation

Marsh Posté le 13-10-2009 à 16:02:19    

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 :
  1. #include <stdio.h>
  2. #include <sys/ioctl.h>
  3. #include <fcntl.h>
  4. #include <linux/videodev.h>
  5. #include <sys/mman.h>
  6. void extractPix(unsigned char* imgbuffer, int hauteur, int largeur){
  7.         FILE * fp = fopen("captureCam.ppm", "w" );
  8.         fprintf(fp, "P6\n%d %d\n255\n",largeur, hauteur);
  9.         int x, y, r, g, b, p;
  10.         p=0;
  11.         for(y=0;y<hauteur; y++){
  12.                 for(x=0; x<largeur; x++){
  13.                 b=imgbuffer[p];p++;
  14.                 g=imgbuffer[p];p++;
  15.                 r=imgbuffer[p];p++;
  16.                 putc(r, fp);
  17.                 putc(g, fp);
  18.                 putc(b, fp);
  19.                 }
  20.         }
  21.         fflush(fp);
  22.         fclose(fp);
  23. }
  24. int main(int argc, const char* argv[]){
  25.         int fd;
  26.         fd = open("/dev/video0", O_RDWR);
  27.         struct video_mbuf mbuf;
  28.         struct video_mmap mapbuf;
  29.         ioctl(fd, VIDIOCGMBUF, &mbuf);
  30.         unsigned char * ptr;
  31.         unsigned char * posImg;
  32.         ptr =  (unsigned char *)mmap(0, mbuf.size, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
  33.         mapbuf.frame = 0;
  34.         mapbuf.height = 480;
  35.         mapbuf.width = 640;
  36.         mapbuf.format = VIDEO_PALETTE_RGB24;
  37.         ioctl(fd, VIDIOCMCAPTURE, &mapbuf);
  38.         ioctl(fd, VIDIOCSYNC, 0);
  39.         posImg = ptr + mbuf.offsets[0];
  40.         extractPix(posImg, 480, 640);
  41.         close(fd);
  42.         munmap(ptr, mbuf.size);
  43.         return 0;
  44. }

Reply

Marsh Posté le 13-10-2009 à 16:02:19   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed