V4L2-框架

      最后更新:2022-05-22 22:24

      1.概述

      V4L2是专为Linux装置制作的一系列视频框架,主框架内嵌在Linux内,作为整个Linux系统的视频源捕捉驱动器框架。
      摄像头驱动层位于HAL模块和硬件层之间,它使用linux内核驱动框架通过文件节点将界面暴露给用户,允许Hal模块通过标准文件访问界面,以便请求能够顺利地提交内核。
      在这里插入图片描述

      根据V4l2标准,他将数据流装置摘要编成一个视频X节点,系列的次设备与相关的v4l2_subdev相对应,由媒体控制器集中管理,这是一个复杂但有效的程序。
      而对高通平台而言,V4l2框架支撑整个内核摄像驱动器。后来又扩大了规模。我为公司摄像控制器创建了CRM使用节点视频0, 它暴露了用户空间 。它主要用于内核处理会话、请求和次级设备。同时,每个子模块都有自己的V4l2_subdev装置。它还通过v4l2_subdev节点暴露了用户的空间。与此同时,SYNC摄像机是Hightowower开发的另一台视频1装置。该设备的主要功能是同步数据流 。确保有效转让用户空间和内核空间缓冲。

      2. 在 v4l2 框架内创建相机捕捉软件的程序。

      1. 打开视频播放器
        在视觉数据流运行之前,第一步是使用通常的字符设备界面开放方法,启动视频设备。另外,返回的性格把手也存在于当地。在这条线上,还建立了一些额外的行动。而在打开的过程中,他们将使每件次设备全能。此外,他们中的每一个人都要进行一套开办练习。
        二. 查看并配置 VIDIOCUERYCAP 设备 。
        访问设备以获取文件控件后, 您必须查询设备属性, 这些属性大部分是通过 octl 传送到 VIDIOC UERYCAP 参数中来完成的, 该参数的序列属性通过 v4l2_能力结构表达 。
        三. 确定是否启用 V4L2_CAP_VIDO_CAPTURE 捕获功能
        四. INDIOC_ENUM_FMT 列出所支持的数据格式。
        5. VIDIOC_G_FMT/VIDIOC_S_FMT分别通过上传VIDIOC_G_PARM/VIDIOC_S_PARM来收集和确定参数。
        VVIDIOC_REQBUFS 框架缓冲应用
        一旦设备配置完毕,就可开始向它申请多个框架缓冲,以存储图片数据,这将通过使用 octl 和输入 VIDIOC_REBUFS 命令来完成,该命令将最终通过 mmap 模式将缓冲图绘制到用户空间。
        以 VIDIOC_BUF 格式设置框架缓冲区。
        在申请框架缓冲区后,在V4l2框架中的缓冲区队列中添加了框架缓冲区缓冲,将octl呼叫VIDIOCBUF命令,静态硬件模块向缓冲区填充图像数据。
        开启数据流VIDIOC_STREAMON。
        当所有缓冲区都添加到队列中时, 请使用 octl 输入 VIDIOC_ STRIAMON 命令 。通知整个框架数据传输已经开始,在很大程度上,这意味着要发出启动工作的次级设备信号。数据最终将装入 V4L2 框架的缓冲区排队。
        从VIDIOC_DQBUF团队获取框架缓冲。
        一旦数据流开始流动我们可以通过发送VIDIOC_DQBUF指令到框架缓冲区。从年初开始,该国有史以来第一次处于紧急状态。这是一个预览,一个图像,或者一个视频。处理完成之后,缓冲区将需要重新进入V4L2框架,直到下一个图象数据被装入。
        查看并设置设备
        在这里插入图片描述

      流程如下图:
      在这里插入图片描述

      整个数据收集程序现在似乎相当容易。界面的控制逻辑是显而易见的。关键的原因是用户界面是基本和抽象的。这是一种易于使用的综合发展方法。V4L2涵盖大多数这些困难过程。现在让我们回顾一下V4L2框架的表述方式及其运作方式。

      V4L2 重要结构 3

      在这里插入图片描述
      如上图所示, v4l2_ device 担任顶级经理,允许访问 v4l2 框架。

      • 通过将其整合到视频设备中,您可以控制用户的空间。
      • 另一方面,该视频设备将生成媒体实体,作为媒体控制器中的一个抽象体,并添加到媒体设备中的嵌入链表。
      • 此外,为了保持对附属次级设备的控制,还保留了一个包含所有次级设备的内部子码头链表。

      v4l2_subdev 结构被一致地用来界定每个次设备。

      • 通过视频中的嵌入 v4l2_subdev 子节点管理用户空间
      • 然而,它的确在媒体控制器中保留了可比较的媒体实体摘要,该控制器与介质设备的实体表格相连。
      • 通过合并实体表格,所有设备信息仍可通过Media_setvice查询和控制。媒体控制框架可用于在用户空间内建立 meida 设备节点。开放这种能力以控制用户。

      因此,V4L2框架是围绕这些基本概念排列的, 我们将很简短。

      3.1 v4l2_device

      结构代表整个V4L2装置。作为V4L2总经理使用链表处理与完整分设备有关的所有次设备。如果您使用媒体主计长来管理整个框架,在初始化时,必须给内部变量 mdev 指定一个成功的介质设备值。这导致了与媒体设备的关系,媒体设备一直是了解该国困境的关键信息来源。驱动器将分别引用 v4l2_device_register 和 v4l2_device_unregister 方法,在系统注册并解除登记 v4l2_device_device_unregister 。

      3.2 v4l2_subdev

      结构是一个子设备 。在启动时,每个子设备必须安装在总计 v4l2_ device 上。此外,要将 v4l2 设备值指定为内部 V4l2_dev 变量,他用v4l2设备加入了统一管理的次级设备链子链。这提高了每个次级设备可以使用的效率。然而,它必须界定许多硬件部件的独特操作行为。要指定它, v4l2_subdev 定义了 v4l2_subdev_ops 结构 。其实施由若干硬件组成部分决定。其中之一是,如果使CONFIG_MEDIA_CONTROLER 宏变得可行,就不能使用。在介质_控制器中,将产生可比的介质实体。来代表该子设备,如果是次级结构,它将加在实体变量中。最后,如果有必要建立设备节点,这是通过使用视频设备访问标准 API 接口实现的。相关视频设备将存储在Devnode的内部变量中。

      3.3 video_device

      如果您想要使用 v4l2_device 或 v4l2_subdev, 您需要在系统中构建节点 。我们必须这样做,才能做到这一点。它是用视频录相机制成的其中之一是录相设备操作技术集。在V4l2的范围内,它会将视频设备插入带有唯一主设备编号的字符设备。在运作节点上,援引集会程序。除了这些标准的一套操作性标准之外,它还具体规定了一套octl操作。内部ioctl_ops 描述

      3.4 media_device

      如果启用宏 CONFIG_MEDIA_CONTROLER,当 v4l2_ device 初始化时, 它也会生成介质_ sevice 。此介质设备是媒体控制器的抽象管理器 。每个V4l2装置及其相关次级设备将分配给某一实体。它集中在Media_device。与其他抽象装置类似,媒体设备也有自己的个性。例如,用户可以访问媒体节点。这是年轻人首次被确认为犯罪受害者,并且被确认为同一v4l2_ defice的次级设备。另外,当数据流被激活时,在一定的顺序下,媒体设备将众多的媒体实体联系起来。总体数据流动控制已经完成。

      3.5 vb2_queue

      在整个V4L2框架的功能中,图像数据缓冲地带的管理是其核心。vb2_ queue 处理此管理 。当设备打开时, 通常会建立 vb2_ queue 。vb2_ops 的结构允许驱动它自行操作 。vb2_mem_ops是内存分布算法的集合。另外,还有一套处理用户和内核空间间传输的机制。这个方法集有时被称为v4l2_buf_ops标准方法集。除了这些方法集外,vb2_buffer 数组被 vb2_ queue 用于处理应用程序的所有数据缓冲 。他用排队名单控制了队列状态中的所有缓冲完成列表后, 管理所有包含数据并准备消耗的缓冲 。

      3.6 vb2_buffer

      在V4L2结构中,该结构代表一个图像缓冲区。当您在团队中时, 队列中的输入与 vb2_ queue 中的队列中的列表相连 。Doone_ entry 与 vb2_ queue 中的 doone_ list 连接在一起,而他们正在等待消费。缓冲区由 vb2_queue 管理。

      本文由 在线网速测试 整理编辑,转载请注明出处。

          热门文章

          文章分类