- 论坛徽章:
- 0
|
在跑一个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,所以会出错。
请问各位有没有遇到过类似的问题啊?最后如何解决的?十分感谢!
|
|