应用层:
全局变量
struct buffer {
void * start;
size_t length;
};
struct buffer * buffers = NULL;
struct v4l2_requestbuffers req;
req.count = 2; //申请两个buffer
req.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
req.memory = V4L2_MEMORY_MMAP;
ioctl(fd, VIDIOC_REQBUFS, &req)
buffers = malloc(req.count * sizeof(*buffers)); //用户层开辟内存,用于保存mmap映射内核返回的buffer的起始地址
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
内核:<
本文介绍了在Linux中,应用程序如何使用VIDIOC_REQBUFS ioctl命令向内核申请video捕获的buffer。从应用层到内核的详细步骤包括全局变量设置、内存申请,再到内核的v4l2-ioctl、soc_camera、videobuf2-core等模块的处理过程,最后在控制器驱动中分配内存。通过这个过程,理解了如何在用户空间和内核空间交互来完成buffer的申请。
订阅专栏 解锁全文

265

被折叠的 条评论
为什么被折叠?



