海思编码:1、mpp系统详谈以及VI、VPSS、VENC之间的关系

在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
### VI通道与VENC编码通道的关系 VI (Video Input) 通道主要负责接收来自外部设备(如摄像头)的原始视频信号并将其处理成适合进一步加工的数据格式。这些经过初步处理后的帧会被存储至DDR内存中供后续模块调用[^4]。 而 VENC (Video Encoder) 编码通道则专注于从上述由VI预处理过的图像序列中获取数据,并对其进行高效的压缩编码操作,最终形成可用于网络传输或本地保存的标准多媒体文件流。在这个过程中,VENC会依据设定好的参数(比如编码标准、分辨率等),对每一帧的画面实施相应的算法优化以达到最佳效果[^1]。 两者之间存在着紧密联系:通常情况下,一个完整的音视频采集系统内至少包含一组相互配合工作的VI-VENC组合;前者捕捉真实世界的视觉信息后者再把它们转换成为数字世界里的通用表达形式以便于更广泛的应用场景下被利用起来。 ### 配置方法概述 对于 VIVENC 的配置而言: #### VI通道设置 - **初始化**:启动硬件资源管理器MPP(MultiMedia Process Platform),创建对应的VI实体对象。 - **属性定义**:指定目标传感器连接端口编号及其他必要的工作条件,例如是否启用自动曝光补偿机制等等特性调整选项。 - **绑定输出路径**:告知系统应该将捕获到的内容送往哪里去——这里指的是选定的一个或者多个VENC实例作为下一步骤的目的地地址之一。 ```c++ int viChn = 0; // 假设使用第0号VI通道 MMZ_S32 s32Ret; HI_MPI_VI_SetPubAttr(viDev, &stViPubAttr); // 设置公共属性 s32Ret = HI_MPI_VI_EnableChan(viDev, viChn); if (s32Ret != HI_SUCCESS){ printf("Failed to enable VI channel\n"); } ``` #### VENC编码通道配置 - **选择源输入接口**:确认好要监听哪个上游提供的未经压缩版本之后才能继续下面的工作流程。 - **定制化编解码方案细节**:这涉及到具体的技术规格书里面提到的各种可调节项,像前面所提及的例子那样包括但不限于编码协议的选择(H.264/H.265)、画面清晰度大小限制以及比特率调控策略等方面的要求说明文档中的指导来进行合理安排[^2]。 ```c++ MV_H264E_PARAM stH264eParam; memset(&stH264eParam, 0, sizeof(stH264eParam)); stH264eParam.s32Gop = 30; stH264eParam.enProfile = PT_BASELINE; // 创建VENC通道 VENC_CHN venc_chn = 0; HI_MPI_VENC_CreateChn(venc_chn,&stVeChnCfg); // 绑定VI通道到此VENC上 MPI_SYS_Bind(&stSrcNode,&stDestNode); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值