在HiMPP手册中都会有这么一张图
先讲一下视频缓存池这个概念
视频缓存池主要向媒体业务提供大块物理内存管理功能,负责内存的分配和回收
这部分具体什么作用,首先视频输入回需要大量的内存,打比方1080P的视频输入,VI部分怎么保存或者使用呢?就是用的视频缓存池概念,
比如:VI将视频输入的一张图像数据放在一个缓存池的缓存块,然后处理后将这个缓存块的地址和大小交给VPSS处理,VPSS处理后又将这个缓存块的地址传给venc,venc就会对这个缓存块的画面进行编码,在这个过程中只有缓存块的地址在来回传递,没有内存拷贝,而且编码完后,MPP系统自动将这个缓存块注销了,这样既节省了性能,又防止咱们自己写程序出现内存泄漏的情况
1、VI部分
视频输入设备
视频输入设备支持标准 BT.656、标准 BT.1120、自定义时序等若干种时序输入,负责对时序进行解析。
视频物理通道
视频物理通道负责将输入设备解析后得到的视频数据输出到 DDR。在真正将数据输出到 DDR 之前,它可以实现裁剪、遮挡、水平垂直缩小和水平垂直翻转等功能,具体功能见各芯片的详细描述。
掩码
掩码用于指示 VI 设备的视频数据来源。
有的可以进行级联
级联指芯片的视频输出端通过 BT1120 时序或其他时序将视频数据传送到另一颗芯片的视频输入端。
根据上面那张图,AD这里就代表了一些传感器sensor,比如摄像头等,vi(video input)就是从sensor获取图像数据的一个功能模块,Hi3521DV100 芯片有 2 个 BT.1120 接口,每个 BT.1120 接口依次对应两个 VI 设备,即第一个 BT.1120 口对应 VI 的 Dev0 和 Dev1,第二个 BT.1120 口对应 VI 的 Dev2 和Dev3。所以使用两个接口时,基本用dev0和dev2。
for(int i = 0; i < 2; i++) // 由于这里用了两个BT1120的vi设备,所以使用dev0和dev2
{
Vi