⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 摄像头捕捉.c

📁 用的是ov的摄像头,在用xawtv打开时,可以看到捕获的画面还算流畅. 自己改编了一个video4linux的程序,但是效率很低 从ioctl (dev, VIDIOCMCAPTURE, &vid
💻 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 + -