📄 摄像头捕捉.c
字号:
/*用的是ov的摄像头,在用xawtv打开时,可以看到捕获的画面还算流畅.
自己改编了一个video4linux的程序,但是效率很低
从ioctl (dev, VIDIOCMCAPTURE, &vid_mmap)
到ioctl (dev, VIDIOCSYNC, &vid_mmap.frame)
程序运行一共用了0.25s左右
为什么会耗费这么多时间啊?是不是我的编程设置中参数设置出了什么问题?
我的机器是配置是AMD800Mhz,sdram 128M pc133
请各位前辈指教,谢谢!
*/
char * get_image (void)
{
struct video_mbuf vid_buf;
struct video_mmap vid_mmap;
char *map, *convmap;
int len;
int bytes = 3; /* 3 bytes per pixel */
int dev;
int width=320;
int height=240;
int palette=VIDEO_PALETTE_RGB24; ,
struct video_picture vid_pic;
struct video_buffer vid_framebuffer;
struct timeval time_before,time_after;
long s,us;
/*---------------打开设备----------------------*/
dev=open("/dev/video0",O_RDWR);
if(dev==-1)
{
printf("open video0 error\n");
return(NULL);
}
ioctl(dev,VIDIOCGPICT,&vid_pic);
ioctl(dev,VIDIOCGFBUF,&vid_framebuf);
ioctl (dev, VIDIOCGMBUF, &vid_buf);
map = mmap (0, vid_buf.size, PROT_READ|PROT_WRITE,MAP_SHARED,dev,0);
if ((unsigned char *)-1 == (unsigned char *)map)
{
perror ("mmap()");
return (NULL);
}
vid_mmap.format = palette;
vid_mmap.frame = 0;
vid_mmap.width = width;
vid_mmap.height = height;
/*-----准备计算捕获所耗费的时间--------------*/
gettimeofday(&time_before,0);
if (ioctl (dev, VIDIOCMCAPTURE, &vid_mmap) == -1)
{
perror ("VIDIOCMCAPTURE");
fprintf (stderr, "args: width=%d height=%d palette=%d\n",
vid_mmap.width, vid_mmap.height, vid_mmap.format);
munmap (map, vid_buf.size);
return (NULL);
}
if (ioctl (dev, VIDIOCSYNC, &vid_mmap.frame) == -1)
{
perror ("VIDIOCSYNC");
munmap (map, vid_buf.size);
return (NULL);
}
/*-----计算捕获所耗费的时间--------------*/
gettimeofday(&time_after,0);
s=time_after.tv_sec - time_before.tv_sec;
us=time_after.tv_usec - time_before.tv_usec;
printf("capture-1 time elapse: %ld.%ld s \n",s,us);
return (map);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -