从cimutils到内核-(2)VIDIOC_QUERYBUF(查询buffer)

本文详细介绍了在V4L2框架下,应用层如何通过VIDIOC_QUERYBUF查询内核分配的缓冲区信息,包括缓冲区长度和起始地址,以便进行内存映射。在内核中,该操作涉及到v4l2-ioctl.c、soc_camera.c和videobuf2-core.c等文件,最终将缓冲区信息填充到用户空间的struct v4l2_buffer结构中。
摘要由CSDN通过智能技术生成

应用层:

循环两次去获取内核申请的两个buffer的起始地址,通过这两个地址用mmap映射,这样用户层可以通过操作这两个地址,访问内存空间的buffer

 

for (n_buffers=0; n_buffers<req.count; ++n_buffers) { //循环两次,询问两次buffer

struct v4l2_buffer buf;

CLEAR(buf);

buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;

buf.memory = V4L2_MEMORY_MMAP;

buf.index = n_buffers; //把结构体 struct v4l2_buffer的内容从用户层传递到内核 分别是buffers[0] buffers[1]往内核里传递

if (-1 == xioctl(fd, VIDIOC_QUERYBUF, &buf))

errno_exit("VIDIOC_QUERYBUF");

buffers[n_buffers].length = buf.length;

buffers[n_buffers].start = mmap(NULL, buf.length, PROT_READ | PROT_WRITE, MAP_SHARED, fd, buf.m.offset); //映射内存 buffers[0] buffers[1]

if (MAP_FAILED == buffers[n_buffers].start)

errno_exit("mmap");

}

 

 

 

-------------------------------------------------------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Linux技术芯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值