Oops..I forgot to copy the source code

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]



Sorry, I senr the message and there was no source code in it.. I repeat i think it is too slow..
please take a look and tell me what do I have to fix....here you have it...

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <time.h>
#include <sys/ioctl.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <signal.h>
#include <linux/types.h>
#include <linux/videodev.h>
#include <errno.h>
#include <time.h>

#define ROWS 240
#define COLS 320

int cam,size,i,frame,q;
struct video_capability cap;
struct video_picture pic;
struct video_window win;
struct video_capture vicap;
struct video_channel vidcan;
struct video_mbuf vidbuf;
struct video_buffer buffer;
struct video_mmap mapbuf;
char *bigbuf;
char *buf;
time_t t, t2;



main (){

//-------------------------------------------------------------------
              /* OPEN VIDEO DEVICE */
//-------------------------------------------------------------------

cam = open("/dev/video", O_RDWR );

if (cam<0){printf("ERROR: NO SE DETECTA CAMARA\n");
    exit(-1);}

//--------------------------------------------------------------------
  /* VIDEO CAPABILITIES*/
//---------------------------------------------------------------------

if (-1==ioctl(cam,VIDIOCGCAP,&cap)){perror("ioctl VIDIOCGCAP");
 exit(-1);}

printf("name -> %s\n", cap.name);
printf("type -> %d\n", cap.type);
printf("channels -> %d\n", cap.channels);
printf("audios -> %d\n", cap.audios );
printf("maxwidth -> %d\n", cap.maxwidth );
printf("maxheight -> %d\n", cap.maxheight);
printf("minwidth -> %d\n", cap.minwidth );
printf("minheight -> %d\n", cap.minheight );

//---------------------------------------------------------------------
  /* FRAME GRABBERS DETECTION*/
//---------------------------------------------------------------------

if (-1==ioctl(cam,VIDIOCSFBUF,&buffer))printf ("No se dectecto frame grabber\n");
else {

 if (-1==ioctl(cam,VIDIOCGFBUF,&buffer)) {perror ("ioctl VIDIOCGFBUF");
        exit(-1);}
  printf ("add -> %d\n", buffer.base);
  printf ("height -> %d\n", buffer.height);
  printf ("width -> %d\n", buffer.width);
  printf ("depth -> %d\n", buffer.depth);
  printf ("BPL -> %d\n", buffer.bytesperline);}




//-----------------------------------------------------------------------
  /* CAPTURE WINDOW */
//-----------------------------------------------------------------------

win.x = 0;
win.y = 0;
win.width = COLS;
win.height = ROWS;
win.clipcount = 0;
win.chromakey = 1;
win.flags = VIDEO_CLIPMAP_SIZE;

if (-1== ioctl(cam, VIDIOCSWIN,&win)){perror ("ioctl VIDIOCSWIN");
 exit (-1);}


//---------------------------------------------------------------------
  /* IMAGE PROPERTIES*/
//---------------------------------------------------------------------

 pic.depth = 24;
 pic.palette = VIDEO_PALETTE_RGB24;
 pic.brightness = 100;
 pic.contrast = 30;
 pic.whiteness = 0;
 pic.colour = 0;
 pic.hue = 0;


if (-1==ioctl( cam, VIDIOCSPICT, &pic )){perror("ioctl VIDIOCSPICT");
 exit(-1);}

 ioctl( cam, VIDIOCGPICT, &pic );

printf("brightness -> %d \n", pic.brightness/256 );
printf("hue -> %d\n", pic.hue/256);
printf("colour -> %d\n", pic.colour/256 );
printf("contrast -> %d \n", pic.contrast/256 );
printf("whiteness -> %d\n", pic.whiteness/256 );
printf("depth -> %d\n", pic.depth );
printf("palette -> %d \n", pic.palette );

//-----------------------------------------------------------------------
  /* MAPPING BUFFER */
//------------------------------------------------------------------------


if (-1==ioctl(cam,VIDIOCGMBUF,&vidbuf)){perror("ioctl VIDIOCGMBUF");
 exit(-1);}

printf("size -> %d\n",vidbuf.size);
printf("frames -> %d\n",vidbuf.frames);
printf("offsets -> %d\n",vidbuf.offsets);


bigbuf = (char *)mmap(0,vidbuf.size, PROT_READ | PROT_WRITE, MAP_SHARED, cam, 0);


mapbuf.width = COLS;
mapbuf.height = ROWS;
mapbuf.format = VIDEO_PALETTE_RGB24;

for(frame=0; frame<vidbuf.frames;frame++){
 mapbuf.frame = frame;
 if (ioctl(cam,VIDIOCMCAPTURE, &mapbuf)<0){
  perror("VIDIOCMCAPTURE");
  exit(-1);}
 printf ("p\n");
  }
frame = 0;

q=0;
time(&t);

while (1){

 i = -1;
 while(i<0){

  i= ioctl(cam,VIDIOCSYNC, &frame);
  if(i < 0 && errno == EINTR) continue;
  if (i < 0) {
   perror ("VIDIOCSYNC");
   exit(-1);
   }
  break;
 }


buf = bigbuf + vidbuf.offsets[frame];
mapbuf.frame = frame;

if (ioctl(cam,VIDIOCMCAPTURE, &mapbuf)<0) {perror("VIDIOCMCAPTURE");
  exit(-1);}

frame++;
q++;

if (frame>=vidbuf.frames) frame=0;
  if (q==29){time(&t2);

    fprintf (stderr,"Time: initial: %d \nfinal: %d\nelapsed: %d \n", (time_t)t, (time_t)t2,
(time_t)t2-t);
}

}}





[Index of Archives]     [Linux DVB]     [Video Disk Recorder]     [Asterisk]     [Photo]     [DCCP]     [Netdev]     [Xorg]     [Util Linux NG]     [Xfree86]     [Free Photo Albums]     [Fedora Users]     [Fedora Women]     [ALSA Users]     [ALSA Devel]     [Linux USB]

Powered by Linux