zoukankan      html  css  js  c++  java
  • v4l2中的多流机制

    一直在搞camera,对v4l2也比较熟悉了,今天写文章说点自己的看法

    对于v4l2,对多流的支持是比较弱的,只是一个流。但现在的camera 硬件,能支持多个流同事工作,所以又必要对v4l2的api进行扩展,加入多流的支持。

    v4l2的团队们考虑了一种做法,可参考linuxtv的网页。

    这里谈一下我自己的考虑。

    1 先来考虑一个camera设备的构成

      1  一个camera 用一个v4l2 设备来代表,然后导出一个vidoe节点来访问这个设备。

      2  一个camera 有很多相关的模块组成,把这些模块组织成subdev,并导出video节点访问这些subdev

      3  一个camera 应有若干流供用户空间访问,于是抽象出流,然后导出video 节点访问流,这些流是动态创建的,节点也是动态生成的

    扩展几个v4l2 api, V4L2_CREAT_STREAM, V4L2_DESTRY_STREAM, get/set_STREAM_INFO

    于是用户可以如下访问一个camera设备。

    1 open camera v4L2 设备,得到fd。

    2 用这个fd, 调用V4L2_CREAT_STREAM,得到stream 的设备节点,这时我们可以传递一个流的描述符来创建流,比如流的类型,预览,video snapshot等

    一个流的描述符应该包括以下几点内容

       1 流的类型

       2 流的格式

       3 流的维数w*h

       4 流的帧数率范围

       5 流数据在内存中的布局情况,

          1 面板数

          2 data offset

          3 width, height

          4 stride_width, scan_height

          5 panel length

          对每一个panel都做如上的描述,内存布局情况可以从驱动中获取。这些信息更加有效的和vb2_buffer 互补, 获取到的流buffer 任然用v4l2_buffer 代表。

    3 打开这个节点 得到stream fd

    4 配置这个fd,以使用这个stream。

    5 用完后关闭fd

    6 然后销毁流

    这样的做法有连个好处,

    1 保留了原来的操作方式,向下兼容

    2 添加了多流操作,而且流的操作就是以前的操作方式。

  • 相关阅读:
    Traceroute侦测主机到目的主机之间所经路由情况的重要工具
    TCP/IP详解之IP协议
    Hello world
    [LeetCode] 198. 打家劫舍
    [LeetCode] 191. 位1的个数
    [LeetCode] 190. 颠倒二进制位
    python里的排序
    [LeetCode] 189. 旋转数组
    [LeetCode]187. 重复的DNA序列
    [LeetCode] 179. 最大数
  • 原文地址:https://www.cnblogs.com/soc-linux-driver/p/3733796.html
Copyright © 2011-2022 走看看