www.pudn.com > Linux_V4L_capture.rar > InitVideo.c


 #include  
 #include  
 #include  
 #include "v4l.h"
 #include "v4lctoh.h" 
 
#define norm VIDEO_MODE_NTSC
#define DEFAULT_FILE_NAME  "/mnt/cap.jpeg"   //抓图后图片的存放位置,自己定义即可

 /*typedef struct _v4l_struct v4l_device;*/ 
 v4l_device vd; 
 
int device_grab_frame()
{
  vd.frame_current =0;
  if (v4l_grab_frame(&vd,0)<0)
	return -1;
  return 0;
}

 int device_next_frame()
{
  vd.frame_current ^=1;
  if(v4l_grab_frame(&vd,vd.frame_current)<0)
    return -1;
  return 0;
}
 
 unsigned char *device_get_address()
{
  return (vd.map +vd.mbuf.offsets[vd.frame_current]);
}

 
 int device_init(char *dev) 
 {  if (dev==NULL) 
     dev = "/dev/video0";
    if (v4l_open(dev,&vd)!=0)           // initial set 1                                           
     return -1;
    if(v4l_get_picture(&vd)!=0)           // initial set 2
     return -1;
    if(v4l_get_channels(&vd)!=0)         // initial set 3
      	return -1;
    printf("%s:initialization OK...%s\n"
    	"%d channels \n"
 	"%d audios \n",
	dev,vd.capability.name,vd.capability.channels,vd.capability.audios);
    
    return 0;
 }

 
int main()

{ FILE *fp;
  
  int frame=0;
  unsigned char *img="";
  if (device_init("/dev/video0")==-1)
    {
	perror("device_init:failed ....");
	exit(1);
    }
  else
    printf("device_init:  OK_QianKe  \n");

 if(v4l_set_norm(&vd, norm)!=0)   // initial set 5
      return -1;               
 else
    printf("v4l_set_norm:  OK_QianKe  \n"); 					
 
 if(v4l_mmap_init(&vd)!= 0)       // improve mmap
   return -1;
 else
   printf("v4l_mmap_init:  OK_QianKe  \n");

 
  if(v4l_grab_init(&vd,NTSC_WIDTH,NTSC_HEIGHT)!= 0)  // improve grab_init
   return -1;
  else
   printf("v4l_grab_init:  OK_QianKe  \n");


  if(v4l_grab_sync(&vd)!= 0)       // improve sync
   return -1;
  else
   printf("v4l_grab_sync:  OK_QianKe  \n");  
//above do initialization word 


/*for(frame;frame<=10;frame++)
 {
  if(v4l_grab_frame(&vd,frame)!= 0)
   return -1;
  else
   printf("v4l_grab_frame:  OK_QianKe  \n");
  //sleep(2);
 }
*/

  if(device_grab_frame()!=0)
    return -1;
  else
    printf("v4l_grab_frame :OK  QianKe  \n");
 
 if(device_next_frame()!=0)
    return -1;
  else
    printf("v4l_grab_frame_next frame ready...:  OK  QianKe  \n");

 if(v4l_grab_sync(&vd)!=0)
   return -1;
 else
   printf("v4l_grab_sync :  OK  QianKe  \n");
  
  img = device_get_address();         //返回所采集的数据的起始地址
  printf("\nImage pointer is: %p\n",img);//输出所采集的数据的起始地址
  
  fp = fopen(DEFAULT_FILE_NAME,"w");
  fprintf(fp,"P6\n%d %d\n255\n",NTSC_WIDTH,NTSC_HEIGHT);
  fwrite(img,NTSC_WIDTH,3*NTSC_HEIGHT,fp);
  fclose(fp);
 
  v4l_close(&vd);
  exit(0);
}