vb2: Queue is not currently set up for mmap

ntjxw 2016-12-13 03:50:10
在跑一个v4l2的测试用例,其中部分代码:
……
struct buffer{
void *start;
unsigned int length;
}*buffers;
buffers = (struct buffer*)calloc(req.count, sizeof(*buffers));

unsigned int n_buffers = 0;
for(n_buffers = 0; n_buffers < req.count; ++n_buffers){
struct v4l2_buffer buf;
memset(&buf,0,sizeof(buf));
buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
buf.memory = V4L2_MEMORY_MMAP;
buf.index = n_buffers;
if(ioctl(fd,VIDIOC_QUERYBUF,&buf) == -1){
printf("TK---------_>>>>>>error\n");
close(fd);
exit(-1);
}
buffers[n_buffers].length = buf.length;//
buffers[n_buffers].start = mmap(NULL,buf.length,PROT_READ|PROT_WRITE,MAP_SHARED,fd,buf.m.offset);
if(MAP_FAILED == buffers[n_buffers].start){
printf("mmap (%d) failed: %s\n", i, strerror(errno));
printf("TK--------__>>>>>error 2\n");
close(fd);
exit(-1);
}
……
跑到其中mmap的时候,就会报错“mmap (0) failed: Invalid argument”

后排查发现,在videobuf2-core.c下:

这里q->memory变成了0,而V4L2_MEMORY_MMAP是1,所以会出错。
请问各位有没有遇到过类似的问题啊?十分感谢!
...全文
1092 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

1,318

社区成员

发帖
与我相关
我的任务
社区描述
主要是开发驱动技术
社区管理员
  • 驱动程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧