抓取 ov511 图像程序 在Redhat 和 Ubuntu 上运行的差异!
抓取 ov511 图像程序 在Redhat 和 Ubuntu 上运行的差异!
我在网上下了vidcat ,修改了一下来抓取OV511的图像(网眼 v2000),在
redhat9 2.4.20上这个运行这个程序可以抓到图像,运行没有问题。但是同样的
这个应用程序在ubuntu 2.6.22 上编译可以通过,一运行就提示:
VIDIOCMCAPTURE:Invalid argument
然后程序退出运行。出错的地方在下面这个函数中,在网上查找了相关的资料,还
是没有找到原因的所在,请大虾们指点指点吧,3Q!
- get_image (int dev, int width, int height, int palette ,int *size)
- {
- struct video_mbuf vid_buf;
- struct video_mmap vid_mmap;
- char *map, *convmap;
- int len;
- int bytes = 3;
- if (ioctl (dev, VIDIOCGMBUF, &vid_buf) == -1) {
- perror ("VIDIOCGMBUF");
- }
- 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;
- if (ioctl (dev, VIDIOCMCAPTURE, &vid_mmap) == -1) {
- printf("debug ----- 1\n");
- 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);
- }
- *size = vid_buf.size;
- }
- return (map);
- fprintf (stderr, "got picture\n");
- }
复制代码
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论