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

全志开发板 视频输入框架

笔记来源于百问网出品的教程。

1.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 设备操作文件;

 

2.Camera通路框架

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

3.视频输入组件

3.1 ISP硬件

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

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

注意:

​ 1.V853芯片支持两路MIPI+一路并口的摄像头,分时复用只会有三个源!

​ 2.在线编码无法使用分时复用!

3.2 VIPP硬件

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

VIPP硬件有4个VIPP通道,4个VIPP通道与ISP一致也可以分时复用,最多可以分时复用出16个VIPP通道。对于应用层来说,我们可以从16个VIPP通道中取数据。

上图中VIPP10,1表示VIPP硬件通道号,0表示分时复用的情况;

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

3.2 虚通道

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

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

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

注意:

​ 1.如果很多个虚通道都使用同一个VIPP通道的数据,那么它们就是公用一个buffer。

​ 2.只要有一个虚通道没有及时还帧,就意味着这一帧buffer没有被还回去,其他虚通道也无法使用。

​ 3.如果占用太多帧没有还,那么其他虚通道也拿不到帧!

​ 4.虚通道要满足:及时还帧,用时创建,用完销毁!

4. VI组件内部结构

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

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

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

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


http://www.kler.cn/a/521553.html

相关文章:

  • 后端token校验流程
  • 网络安全技术简介
  • PyTorch 快速入门
  • C语言中string.h头文件功能介绍
  • 如何将 Windows 上的文件传递到 Mac 上
  • 【Matlab高端绘图SCI绘图模板】第006期 对比绘柱状图 (只需替换数据)
  • Rust:如何动态调用字符串定义的 Rhai 函数?
  • 基于Django的豆瓣影视剧推荐系统的设计与实现
  • MacOS 如何映射快捷键
  • 以太网详解(六)OSI 七层模型
  • MVCC底层原理实现
  • Java 注解与元数据
  • WPF基础 | 深入 WPF 事件机制:路由事件与自定义事件处理
  • LiteFlow Spring boot使用方式
  • qt-C++笔记之QLine、QRect、QPainterPath、和自定义QGraphicsPathItem、QGraphicsRectItem的区别
  • D. Unique Median【Codeforces Round 997 (Div. 2)】
  • 基于GS(Gaussian Splatting)的机器人Sim2Real2Sim仿真平台
  • 七种RAG架构cheat sheet!
  • BGP边界网关协议(Border Gateway Protocol)Community属性
  • RLHF技术演进:从理论突破到工程实践
  • 探索与创新:DeepSeek R1与Ollama在深度研究中的应用
  • 【PySide6快速入门】QListWidget 列表控件
  • 【现代深度学习技术】深度学习计算 | 层和块
  • 什么是哈希表?如何在C语言中实现一个哈希表?
  • Codeforces Round 642 (Div. 3) E. K-periodic Garland(DP+前缀和)
  • C#面试常考随笔4:int? 和 int的区别,以及int?的运用场景?