v4L2应用开发学习!

v4L2应用开发学习! txp 2023-10-25 16:43:53 1358

目录

一.什么是V4L2框架?

二. V4L2的代码框架图:

三. V4L2代码开发流程:

四.整个工程的运行流程:


一.什么是V4L2框架?

V4L2英文全称是Video for Linux2,它是专门为视频设备设计的内核驱动。在做视频的开发中,一般我们操控V4L2的设备节点就可以直接对摄像头进行操作。通常V4L2在Linux的设备节点是**/dev/video0**。无论是MIPI摄像头还是UVC摄像头,它们底层默认操作的都是/dev/video0的节点。

二. V4L2的代码框架图:

易百纳社区

从这张图可以看出来,在使用V4L2进行摄像头操作的时候,都需要访问内核驱动。而整个设备驱动都是由Linux Device File System进行管理,Linux File System管理的是V4L2CORE的功能。而V4L2_CORE里面包含了V4L2_DEVV4L2_SUB_DEVV4L2_DEVICEVIDEOBUF2_CORE。其中,V4L2_DEIVCE主要是管理视频设备驱动、VIDEOBUF2_CORE主要是管理缓冲队列的数据、V4L2_SUB_DEV主要是管理视频设备的子系统。而应用层若想对整个V4L2驱动层进行控制的话,只需要对v4l2_dev进行fops(文件形式控制)操作即可,因为v4l2_dev是驱动层对用户层提供的接口。

三. V4L2代码开发流程:

3.1.打开设备节点:

易百纳社区

打开/dev/video0视频设备节点

3.2.查询设备的能力

易百纳社区

利用ioctl函数访问V4L2的底层命令VIDIOC_QUERYCAP主要是查询摄像头的性能属性。

3.3.获取摄像头支持的格式,并进行像素格式设置

易百纳社区

通过ioctl VIDEOIOC_ENUM_FMT获取对应的支持格式,并且对摄像头进行相应格式的设置。包括:width、height、pixelformat等等。设置完成之后,再使用ioctl命令进行使能操作,使能对应的关键字:VIDIOC_S_FMT

3.4.内存映射到用户空间并进行队列操作

易百纳社区

利用ioctl控制VIDIOC_REQBUFS,进行视频缓冲区的申请。申请完成之后,把驱动的缓冲区映射到用户空间,映射的api使用的是mmap。若映射用户空间成功的话,则把视频数据入到缓冲区队列,入队对应的ioctl命令是VIDIOC_QBUF

3.5.开启摄像头获取视频流

易百纳社区

使用stream_on指令使能v4l2摄像头,让它正常启动采集流程。

3.6.从缓冲区中把视频数据取出

易百纳社区

利用ioctl把缓冲区的视频数据取出,它对应的命令是VIDIOC_DQBUF。使用了VIDIOC_DQBUF之后,v4l2_buffer结构体就有对应的视频数据了。并把对应的数据写到mjpg图片。做完上述所有操作之后,再把摄像头的数据进行入队操作VIDIOC_QBUF。

3.7.关闭摄像头获取流

易百纳社区

通过ioctl操控指令VIDIOC_STREAMOFF,关闭摄像头采集工作。

3.8.解除映射缓冲区

易百纳社区

使用munmap api解决内核缓冲区到用户缓冲区的映射操作。

3.9.释放所有的资源

易百纳社区

四.整个工程的运行流程:

易百纳社区

声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
txp
红包 1 1 评论 打赏
评论
0个
内容存在敏感词
手气红包
    易百纳技术社区暂无数据
相关专栏
置顶时间设置
结束时间
删除原因
  • 广告/SPAM
  • 恶意灌水
  • 违规内容
  • 文不对题
  • 重复发帖
打赏作者
易百纳技术社区
txp
您的支持将鼓励我继续创作!
打赏金额:
¥1易百纳技术社区
¥5易百纳技术社区
¥10易百纳技术社区
¥50易百纳技术社区
¥100易百纳技术社区
支付方式:
微信支付
支付宝支付
易百纳技术社区微信支付
易百纳技术社区
打赏成功!

感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

审核成功

发布时间设置
发布时间:
是否关联周任务-专栏模块

审核失败

失败原因
备注
拼手气红包 红包规则
祝福语
恭喜发财,大吉大利!
红包金额
红包最小金额不能低于5元
红包数量
红包数量范围10~50个
余额支付
当前余额:
可前往问答、专栏板块获取收益 去获取
取 消 确 定

小包子的红包

恭喜发财,大吉大利

已领取20/40,共1.6元 红包规则

    易百纳技术社区