当前位置: 首页 > news >正文

全志V853视频输入驱动框架详解:从VIN模块到虚通道实战

一、视频输入基础

1. VIN camera驱动框架

涉及 V4l2 驱动部分的知识在这里不深入讲解,后面有时间再深入分析一下。

VIN camera 驱动使用过程可简单的看成是 vin 模块 + device 模块 + af driver + flash 控制模块的方式。

  • vin.c 是驱动的主要功能实现,包括注册/注销、参数读取、与 v4l2 上层接口、与各 device 的下层接口、中断处理、buffer 申请切换等;
  • modules/sensor 文件夹里面是各个 sensor 的器件层实现,一般包括上下电、初始化,各分辨率切换,yuv sensor 包括绝大部分的v4l2 定义的ioctrl 命令的实现;而 raw sensor 的话大部分 ioctrl 命令在 vin 层调用 isp 库实现,少数如曝光/增益调节会透过 vin 层到实际器件层;
  • modules/actuator 文件夹内是各种 vcm 的驱动;
  • modules/flash 文件夹内是闪光灯控制接口实现;
  • vin-csi 和 vin-mipi 为对 csi 接口和 mipi 接口的控制文件;
  • vin-isp 文件夹为 isp 的库操作文件;
  • vin-video 文件夹内主要是 video 设备操作文件;

image.png

2. Camera通路框架

  • VIN 支持灵活配置单/双路输入双 ISP 多通路输出的规格
  • 引入 media 框架实现 pipeline 管理
  • 将 libisp 移植到用户空间解决 GPL 问题
  • 将统计 buffer 独立为 v4l2 subdev
  • 将的 scaler(vipp)模块独立为 v4l2 subdev
  • 将 video buffer 修改为 mplane 方式,使用户层取图更方便
  • 采用 v4l2-event 实现事件管理
  • 采用 v4l2-controls 新特性

image.png

3. 视频输入组件

3.1 ISP

以全志为例,在全志 V853 芯片中,ISP组 件在使用过程中是支持分时复用的,ISP 分时复用周期图如下所示:

image.png

 isp00/isp01/isp02/isp03 分别代表一个周期的1/4,每一个周期中的会被分为4等分,当该周期运行到那一等分的时候,就会去连接到一个摄像头并采集图像数据。通过分时复用的方式,使得芯片端的 ISP 硬件可以同时连接4个摄像头。

注意:

  • V853芯片支持两路 MIPI+一路并口的摄像头,分时复用只会有三个源。
  • 在线编码无法使用分时复用,因为在线编码对实时性要求很高,使用分时复用可能会发生带宽不连续,延迟叠加等。

3.2 VIPP

Video Input Post Processor,即视频输入后处理器。它是一种用于图像传感器的硬件组件,可以对图像进行缩小、打水印、去坏点、增强等处理。它可以支持不同的图像数据格式,如 Bayer raw data 或 YUV 格式。

image.png

VIPP 硬件有4个VIPP通道,4个VIPP通道与ISP一致也可以分时复用,对于应用层来说,我们可以从VIPP通道中取数据,例如上图中 VIPP10 ,1表示VIPP硬件通道号,0表示分时复用的情况。

注意:由于硬件中只有4路VIPP,那么在开发中只能获取4路不同分辨率的图像。

3.3 虚通道

虚通道(Virtual Channel,简称 VC)是一种用于管理和绑定不同功能模块之间的通信路径。在MPP中,音频和视频的处理是独立的,为了避免混乱和通道错乱,引入了虚通道的概念。

虚通道允许将不同的功能模块绑定在一起,以便更好地控制和管理视频处理流程。例如,虚通道可以将视频输入(VI)、视频处理(VPSS)、视频编码(VENC)等模块连接起来,形成一个完整的视频处理流程。

image.png

基于前面的VIPP硬件,会为它创建若干个虚通道,虚通道的数量在理论上是不受限制的,我们可以创建很多个虚通道用于传输到其他地方去使用。因为虚通道的本质是对实际VIPP通道中的每一帧图像做引用技术,每个虚通道从VIPP通道获取这一帧图像后,会把这一帧的引用技术+1,如果将这一帧数据还回去的话就将这一帧的引用技术-1。只有当这一帧的引用技术降为0的时候,这一帧数据才会真正还给V4L2驱 动 /dev/video0。

注意:

  • 如果很多个虚通道都使用同一个 VIPP 通道的数据,那么它们就是公用一个 buffer
  • 只要有一个虚通道没有及时还帧,就意味着这一帧 buffer 没有被还回去,其他虚通道也无法使用
  • 如果占用太多帧没有还,那么其他虚通道也拿不到帧
  • 虚通道要满足:及时还帧,用时创建,用完销毁

4. VI 组件内部结构

视频输入组件内部主要是由通道管理器组成,如下图所示:

image.png

ViChnManager:是通道管理器,维护一个通道的链表(通道指的是虚通道)负责管理和调度虚拟通道资源。

VI_CHN_MAP_S 是一个结构体或配置,用于定义视频输入通道(VI Channel)的属性和映射关系。这通常涉及到视频捕获硬件的配置,如分辨率、像素格式、缓冲区数量等。

MM_COMPONENTTYPE 通常指的是多媒体组件类型,它可能是一个接口或抽象类,用于定义多媒体处理组件的通用属性和行为。这样的组件可能包括编解码器、过滤器、转换器等。

5. 全志视频输入组件使用示例

5.1 开启和关闭摄像头

示例:演示 mpi_vi 组件的reset流程,vi 组件运行过程中停止,销毁,再重新创建运行。

步骤:

点击链接全志V853视频输入驱动框架详解:从VIN模块到虚通道实战阅读原文

http://www.dtcms.com/a/600912.html

相关文章:

  • 网站建设需要英语吗wordpress笑话主题模板
  • Azure OpenAI GPT-5 PTU 容量规划与弹性配置实践
  • [linux仓库]多线程同步:基于POSIX信号量实现生产者-消费者模型[线程·柒]
  • Linux 内核驱动加载机制
  • C语言编译软件 | 高效选择适合的C语言编译环境
  • 天津 网站策划微信、网站提成方案点做
  • 工业级部署指南:在西门子IOT2050(Debian 12)上搭建.NET 9.0环境与应用部署(进阶篇)
  • 食品网站建设网站定制开发做网站只买一个程序
  • 中小型项目前后端工时对比
  • C# 文件的输入与输出
  • Linux操作系统学习
  • idea创建javaweb项目
  • 【计网】基于OSPF 协议的局域网组建
  • 开发一个小程序花多少钱
  • Ansible入门详解
  • 一体化系统(一)智慧物业管理综合管理——东方仙盟
  • 买虚机送网站建设wordpress google ad
  • 2008 iis配置网站公司做网站需要注意些什么问题
  • vs2013编译C语言 | 探讨如何使用Visual Studio 2013进行C语言编译与调试
  • k8s上分离集群seatunnel部署(生产推荐)
  • 最新版idea2025 配置docker 打包spring-boot项目到生产服务器全流程,含期间遇到的坑
  • Python 处理 CSV 和 Excel 文件的全面指南
  • 小程序 scroll-view 触底事件不触发问题
  • word内输入带框打对号的数据
  • C语言编译器软件 | 深入了解编译过程与优化技巧
  • Spring框架 - 声明式事务管理
  • html淘宝店铺网站模板辽宁移动网站
  • 微硕WST3404高性能MOSFET,革新汽车雨刮控制系统
  • LeetCode(python)——53.最大子数组的和
  • 其中包含了三种排序算法的注释版本(冒泡排序、选择排序、插入排序),但当前只实现了数组的输入和输出功能。