全志开发板 视频输入框架

news/2025/2/5 1:33:00/

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

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.ppmy.cn/news/1569386.html

相关文章

五、定时器实现呼吸灯

5.1 定时器与计数器简介 定时器是一种通过对内部时钟脉冲计数来测量时间间隔的模块。它的核心是一个递增或递减的寄存器(计数器值)。如果系统时钟为 1 MHz,定时器每 1 μs 计数一次。 计数器是一种对外部事件(如脉冲信号&#xff…

实现总分支结构组织文件共享与高速数据流转

在当今数字化的商业环境中,公司内部的数据交换和文件共享效率对于业务流程的成功至关重要。尤其是那些拥有多个分支机构的大型企业,如何实现高效的文件共享和数据高速流转成为了提升工作效率的关键。本文将探讨如何利用现代技术手段,特别是镭…

初始Linux(7):认识进程(下)

1. 进程优先级 cpu 资源分配的先后顺序,就是指进程的优先权( priority )。 优先权高的进程有优先执行权利。配置进程优先权对多任务环境的 linux 很有用,可以改善系统性能。 还可以把进程运行到指定的CPU 上,这样一来…

Luzmo 专为SaaS公司设计的嵌入式数据分析平台

Luzmo 是一款嵌入式数据分析平台,专为 SaaS 公司设计,旨在通过直观的可视化和快速开发流程简化数据驱动决策。以下是关于 Luzmo 的详细介绍: 1. 背景与定位 Luzmo 前身为 Cumul.io ,专注于为 SaaS 公司提供嵌入式分析解决方案。…

不确定性采样在分类任务中的应用

不确定性采样在分类任务中的应用 在机器学习领域,数据的标注往往是一项既耗时又费力的工作。如何在有限的标注资源下,让模型学习到最有价值的信息,成为了研究的重点方向之一。不确定性采样(Uncertainty Sampling)作为一种主动学习策略,在这方面展现出了独特的优势。本文…

Java小白入门教程:LinkedList

目录 一、定义 二、作用 1、存储数据 2、动态扩容 3、提供方便的操作方法 三、使用场景 1.当你需要频繁地在列表的开头或结尾添加或删除元素时。 2.当你不需要按索引快速访问元素时,因为LinkedList访问元素需要从头开始遍历 3.当你不需要线程安全的数据结构…

中间件漏洞之CVE-2024-53677

目录 什么是struts?CVE-2024-53677简介影响版本复现环境搭建漏洞利用修复 什么是struts? 在早期的 Java Web 开发中,代码往往混乱不堪,难以维护和扩展。比如,一个简单的用户登录功能,可能在不同的 Java 类…

docker安装nacos2.2.4详解(含:nacos容器启动参数、环境变量、常见问题整理)

一、镜像下载 1、在线下载 在一台能连外网的linux上执行docker镜像拉取命令 docker pull nacos:2.2.4 2、离线包下载 两种方式: 方式一: -)在一台能连外网的linux上安装docker执行第一步的命令下载镜像 -)导出 # 导出镜像到…