3.2. 设计概述¶
3.2.1. 视频内存区块池¶
视频内存区块池主要向各模块(VI/VPSS/VO/VDEC/VENC/LDC…)提供大块物理内存管理功能, 负责内存的取得、分配和回收,让物理内存资源在各个媒体处理模块中分享使用, 并免除不必要的复制动作。
多组大小相同、物理地址连续的区块组成一个视频区块池。 必须在系统初始化之前配置公共视频区块池。 根据所需功能的不同,公共区块池的数量、区块的大小和数量应对应有所增减。
视频区块池所需的数量,所需考虑的点如下:
每多一个channel就需要增加两个(ping-pong buffer)。
VO为条件一的例外,是根据DisplayBufLen来决定,最小为3。
若channel的u32Depth不为0,则需要增加u32Depth的数量。
每增加一个LDC的功能(lens distortion, rotation, etc),就需要加一个。
在内存空间足够的情况下,可以取最大的空间来建立一个公共视频区块池即可;若是要精简内存的使用量,建议使用多个不同大小的公共视频区块池。
所有的视频处理通道都可以从公共视频区块池中获取视频区块用于保存采集的图像, 如 图 和 表 中。
VI 先从公共视频区块池 A 中获取视频区块 Ai用以存放从Sensor所接收下来的视频数据。
当VI完成撷取,区块Ai 经 VI发送给 VPSS,VPSS 通道 0跟1同样从公共视频区块池 A 中获取视频区块Aj、Ak。
当VPSS完成工作后,输入区块 Ai被释放回公共视频区块池,Aj作为输出图像区块 buffer 发送给 VENC,Ak 作为 输出图像区块 buffer 发送给 VO。
Aj 经 VENC 编码完之后释放回公共视频区块池, Ak 经 VO 显示完之后释放回公共视频区块池 。
视频区块池大小计算接口 |
接口简介 |
---|---|
COMMON_GetPicBufferConfig |
一般linear 格式的各部分数据大小 |
COMMON_GetPicBufferSize |
一般linear 格式的区块池 |
3.2.2. 系统绑定¶
SDK提供系统绑定接口(CVI_SYS_Bind) , 即通过绑定数据源和数据接收者来建立两者之间的关联关系。 绑定后,数据源生成的数据将自动发送给接收者。 一个数据源可以绑定多个数据接收者, 若数据源未绑定,则最终会自动返回视频内存区块池。
目前支持的绑定关系如 下表 所示。
数据源 |
数据接收者 |
---|---|
VI
|
VPSS
VENC
VO
|
VPSS
|
VO
VENC
VPSS
|
VDEC
|
VPSS
VENC
VO
|
AI
|
AENC
AO
|
ADEC
|
AO
|
3.2.3. VI和VPSS的工作模式¶
VI和 VPSS 各自的工作模式分为在线,离线模式,工作模式说明如 下表 所示。
模式 |
VI_CAP与VI_PROC |
VI_PROC与VPSS |
---|---|---|
在线模式 |
VI_CAP与VI_PROC之间在线数据流传输,此模式下VI_CAP是直接把数据流送给VI_PROC,而不会写出RAW数据到内存。 |
VI_PROC与VPSS之间的在线数据流传输,此模式下VI_PROC是直接把数据流送给VPSS,而不会写出YUV数据到内存。 |
离线模式 |
VI_CAP写出RAW数据到内存,然后VI_PROC从内存读取RAW数据进行后处理。 |
VI_PROC写出YUV数据到内存,然后VPSS从内存读取YUV数据进行后处理。 |
VI PIPE可以设置成多种工作模式,情况如下:
第 0 个(长曝) PIPE 可以 有 4 种模式:
VI 在线 VPSS 离线
VI 在线 VPSS 在线
VI 离线 VPSS 离线
VI 离线 VPSS 在线
其他 PIPE,若在以下工作模式表格中,标示为”-“,表示无法独立运作输出YUV,只能跟前一个PIPE在HDR下共同运作。
PIPE ID |
0 (长曝) |
1 (短曝) |
2 (长曝) |
3 (短曝) |
---|---|---|---|---|
模式分布1 |
离线 |
离线 |
离线 |
离线 |
模式分布2 |
在线 |
在线 |
3.2.4. VPSS的工作模式¶
VPSS可以有两种模式SINGLE或DUAL。
处理器 |
模式 |
装置 |
通道数 |
---|---|---|---|
CV181x |
SINGLE |
0 |
4 |
DUAL
|
0
1
|
1
3
|
|
CV180x |
SINGLE |
0 |
3 |
DUAL
|
0
1
|
1
2
|
预设为SINGLE。
若非SINGLE时,需在VPSS组创建时,指定运作的VPSS装置。
3.2.5. Video Pipeline的Alignment需求¶
在处理从MEMORY的数据时,各个处理器的模块有不同的需求。 Alignment是图像处理时每一条line数据的读写量,需要为此的倍数。
例如:720x480的YUV420 PLANAR格式。
Y因此为ALIGN(720, 64) x 480 = 768 x 480的资料量;U/V则为ALIGN(360, 64) x 240 = 384 x 240。
可透过CVI_VPSS_SetChnAlign等API做修改,但不可小于硬件的限制。
处理器 |
模块 |
Alignment |
---|---|---|
CV181x
CV180x
|
VI
VPSS
VO
|
64
64
64
|
3.2.6. 双系统消息通信¶
如果是双系统SDK,需要一开始对双核通信消息初始化,建立和小核的通信后才可以调用后续的API。 双核通信消息初始化API:CVI_MSG_Init