查看: 1378|回复: 0

[评测分享] 米尔MTD-T507H开发板试用--V4L2 QT应用编程学习

[复制链接]
  • TA的每日心情
    郁闷
    2024-9-18 16:57
  • 签到天数: 48 天

    连续签到: 1 天

    [LV.5]常住居民I

    发表于 2022-9-4 23:09:45 | 显示全部楼层 |阅读模式
    分享到:
    米尔MTD-T507H开发板对应的sensor驱动是基于V4L2框架的,所以使用米尔MTD-T507H开发板来学习V4L2框架是一个很好的选择。这里采用米尔MTD-T507H开发板提供的对应的sensor demo来学习一下基于QT的V4L20应用编程学习。
    Linux应用编程序离不开open、close、ioctl等系统调用接口,V4L20应用编程也不例外,主要围绕着ioctl来开展。

    V4L20应用编程步骤:
    1、打开设备,首先检查根文件系统dev目录下是否存在摄像头设备节点/dev/video*,*为0、1、2、...,随后使用open接口打开设备节点,在米尔QT代码中体现如下
    1.PNG

    2、打开设备成功以后,通过ioctl获取所打开的设备的VIDIOC_QUERYCAP,获取到的数据保存在struct v4l2_capability cap结构体中,对于代码如下,
    2.PNG
    可知此处如果VIDIOC_QUERYCAP包含vin,则代表所打开的设备正是需要的对应csi接口的sensor设备,对应结构体struct v4l2_input inp,接着往下

    3、通过ioctl的VIDIOC_S_INPUT命令来选择index 0为当前的输入设备,并且通过ioctl的VIDIOC_S_PARM命令来设置当前设备的数据流参数,对应结构体struct v4l2_streamparm parms
    3.PNG

    4、接着通过ioctl的VIDIOC_S_FMT命令来设置图像格式,对应结构体struct v4l2_format fmt
    4.PNG

    5、接着通过ioctl的VIDIOC_REQBUFS命令来申请内核空间缓存,对应结构体struct v4l2_requestbuffers req
    5.PNG

    6、接着通过ioctl的VIDIOC_QUERYBUF命令查询缓存消息做映射,对应结构体struct v4l2_buffer buf
    6.PNG
    7.PNG

    7、接着通过ioctl的VIDIOC_QBUF将所有缓存放入队列,对应结构体struct v4l2_buffer buf
    8.PNG
    8、接着通过ioctl的VIDIOC_STREAMON开始采集写数据到队列中,对应变量为enum v4l2_buf_type type
    9.PNG
    以上,完成了对V4L2框架进行图像采集的初始化工作,接下来开始对图像进行循环采集
    在QT QRunnable的run函数中运行如下命令

    9、接着通过ioctl的VIDIOC_DQBUF从队列中提取一帧数据,对应变量为struct v4l2_buffer buf,并把读取到的数据根据需要进行格式转换,再显示到窗口上
    11.PNG
    10、接着通过ioctl的VIDIOC_QBUF通知内核已经使用完毕,对应结构体struct v4l2_buffer buf
    14.PNG

    通过9、10步骤,可在QT窗口中显示预览图像,如下
    12.PNG

    13.PNG

    米尔MTD-T507H开发板是一个学习V4L2很不错的平台
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-11-23 04:48 , Processed in 0.124112 second(s), 17 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.