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

2023-11-20

在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
 {
        ViDev = i * 2;
 }

2、VPSS

VPSS(Video Process Sub-System)支持对一幅输入图像进行统一预处理,如去噪、去隔行等,然后再对各通道分别进行缩放、锐化等处理,最后输出多种不同分辨率的图像。
VPSS有组(GRP)的概念,最大可用数为 256 个,各 GROUP 分时复用 VPSS 硬件。每个 VPSS GROUP 包含多个通道,VPSS的GROUP 只能绑定一个输入。
VPSS的GROUP 和VI的通道进行绑定,分为在线和离线模式,离线模式时VI将从摄像头读取的视频数据放入到DDR内存中,VPSS去内存中读取,在线模式时VI将从摄像头读取的视频数据直接传递给VPSS,中间没有了内存复制等的操作,节省带宽和内存,性能更好,但是在线模式,因为VI没有将数据写入到DDR,无法进行coverEx,OverlayEx,Retate,LDC等操作,需要在VPSS各通道输出后再进行处理,而且有的功能还只能在离线使用,比如DIS
VPSS的GROUP 和VI的通道进行绑定:

HI_S32 SAMPLE_COMM_VI_BindVpss(SAMPLE_VI_MODE_E enViMode)
{
    HI_S32 j, s32Ret;
    VPSS_GRP VpssGrp;
    MPP_CHN_S stSrcChn;
    MPP_CHN_S stDestChn;
    SAMPLE_VI_PARAM_S stViParam;
    VI_CHN ViChn;

// 获取VI的一些参数
    s32Ret = SAMPLE_COMM_VI_Mode2Param(enViMode, &stViParam);
    if (HI_SUCCESS !=s32Ret)
    {
        SAMPLE_PRT("SAMPLE_COMM_VI_Mode2Param failed!\n");
        return HI_FAILURE;
    }
    
    VpssGrp = 0;
    for (j=0; j<stViParam.s32ViChnCnt; j++)  //s32ViChnCnt代表VI设备的个数为1
    {
        ViChn = j * stViParam.s32ViChnInterval;
        
        //将VpssGrp和VI的通道进行绑定
        stSrcChn.enModId  = HI_ID_VIU;
        stSrcChn.s32DevId = 0;
        stSrcChn.s32ChnId = ViChn;
    
        stDestChn.enModId  = HI_ID_VPSS;
        stDestChn.s32DevId = VpssGrp;
        stDestChn.s32ChnId = 0;
    
        s32Ret = HI_MPI_SYS_Bind(&stSrcChn, &stDestChn);  //源通道就是VI模块,目的通道就是VPSS的Group,绑定后,VI的视频数据就会自动流转到VPSS
        if (s32Ret != HI_SUCCESS)
        {
            SAMPLE_PRT("failed with %#x!\n", s32Ret);
            return HI_FAILURE;
        }
        
        VpssGrp ++;
    }
    return HI_SUCCESS;
}

在这里插入图片描述可以看到叠加OSD等可以在VPSS的离线模式进行
VPSS的group虽然只能绑定一个输入,但是可以有多个输出通道,这样可以获取多路不同分辨率的视频流。比如vi采集的是1080P的数据,但是有的时候不需要这么高的分辨率,想要最终获取三个不同分辨率的视频,1080P用于显示,720P用于存储,480P行车记录仪存储,这三路视频,那么VPSS就可以输出三个通道的视频数据,这个时候就可以创建3个chn
3、VENC
venc的chn绑定vpss某个group的chn

 s32Ret = SAMPLE_COMM_VENC_BindVpss(VencChn, VpssGrp, VpssChn);   //venc的chn绑定vpss的chn

终上所述:VI、VPSS、VENC之间的关系

VI dev的chn-》VPSS某个GRP-》VPSS某个GRP的某个chn-》VENC的某个chn
VPSS的GROUP绑定VI的chn,VENC的chn绑定VPSS某个GROUP的chn

绑定关系

系统目前支持的绑定关系,请参见表 2-1。 同一个数据接收者只能绑定一个数据源。
绑定是指数据源和数据接收者建立关联关系。绑定后,数据源生成的数据将自动发送给接收者。 VI 和 VDEC
作为数据源,是以通道为发送者,向其他模块发送数据,用户将设备号置为 0,SDK 不检查输入的设备号。 VO
作为数据源发送回写(WBC)数据时,是以设备为发送者,向其他模块发送数据,用户将通道号置为 0,SDK 不检查输入的通道号。 VPSS
作为数据接收者时,是以设备(GROUP)为接收者,接收其他模块发来的数据,用户将通道号置为 0,SDK 不检查输入的通道号。 VENC
作为数据接收者时,是以通道号为接收者,接收其他模块发过来的数据,用户应将设备号置为 0。 其他情况均需指定设备号和通道号

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • Docker容器网络

    一 虚拟化网络 Docker 镜像启动容器 默认Docker 容器可以直接访问互联网 前提 宿主机能够上外网 Docker 容器的IP 专属IP段 默认跟宿主机不在同网段 Docker Engine 引擎服务 默认会在宿主机创建网卡 命名
  • MVC模型图

    MVC图

随机推荐

  • 【联想RQ940】联想RQ940更换主板电池+重新设置BIOS

    RQ940服务器告警灯闪烁 连接管理口查看日志 判断问题为主板纽扣电池电压低 纽扣电池型号为CR2032 停业务 关机 下架 拆机 电池位于图片所示位置 可以先将左边RAID卡拆下来 方便更换电池 2 重新设置BIOS 更换电池后 由于BI
  • SpringBoot 微服务 详解

    1 注入 1 1 Bean对象管理 Spring Boot 由于没有XML文件 所以所有的Bean管理都放入在一个配置类中实现 配置类就是类上具有 Configuration的类 这个类就相当于之前的applicationContext x
  • 计算机竞赛 基于CNN实现谣言检测 - python 深度学习 机器学习

    文章目录 1 前言 1 1 背景 2 数据集 3 实现过程 4 CNN网络实现 5 模型训练部分 6 模型评估 7 预测结果 8 最后 1 前言 优质竞赛项目系列 今天要分享的是 基于CNN实现谣言检测 该项目较为新颖 适合作为竞赛课题方向
  • bilibili的评论ip属地显示未知

    现象 出于某些原因 我们在日常使用中的大部分平台都开启了IP地址显示 一般会显示当事人所在的地址 这其中就有一些奇怪的地址 在此不谈魔法 就比如我最近在刷B站的时候 就在评论区发现了一些显示 未知 的ip 而只要点进他们的主页还是会发现他们
  • 广度优先搜索(BFS)(队列实现) 走迷宫

    BFS应用 寻找最短路径或者遍历路径 树 图或者更抽象的 实现方法 队列 为什么bfs需要队列实现 队列的原理是先进先出 而广度优先搜索类似于树的层次遍历 从离根节点最近的点开始向外扩散 因此用队列将最先遍历的点存入 后遍历的点后存入 符合
  • react 父组件调用子组件的方法

    子组件中 const child forwardRef props ref gt useImperativeHandle ref gt 这里面的方法是暴露给父组件的 test console log 我是组件里的test方法 test2 t
  • druid 手动指定数据源_Springboot集成 Druid

    前言 对于数据访问层 无论是Sql还是NoSql SpringBoot默认采用整合SpringData的方式进行统一管理 添加大量的自动配置 屏蔽了很多设置 引入了各种XxxTemplate和XxxRepository来简化我们队数据访问层
  • 【JS 构造

    个人格言 时间是亳不留情的 它真使人在自己制造的镜子里照见自己的真相 Git专栏 Git篇 JavaScript专栏 js实用技巧篇 该专栏持续更新中 目的是给大家分享一些常用实用技巧 同时巩固自己的基础 共同进步 欢迎前来交流 你的一键三
  • Java POI输出excel单元格画斜线

    sheet cell画斜线 首先初始化HSSFWorkbook对象 通过此对象创建excel的一个名称为 line 的sheet 下面是通过sheet对象创建单元格 HSSFWorkbook wb new HSSFWorkbook HSSF
  • springboot分模块问题

    springboot 分模块开发时 mvn clean install报错 Failed to execute goal org springframework boot spring boot maven plugin 1 5 9 REL
  • CentOS系统如何如设置使系统自动锁屏的时间?

    方便大家 Application System Tools Settings Privacy close Screen Lock Lock Screen After Blank For 可以关闭 可以自己设置吧 我设置了1个小时
  • VMWare虚拟机安装的问题

    VMWare虚拟机安装Win10出现 Attempting to start up from 直接上图 选择ISO镜像以后 开启虚拟机出现以下界面 等待一会没有操作以后出现以下界面 解决方法 1 关闭虚拟机电源 一定要关闭 2 找到该虚拟机
  • 简单图文解释冯诺依曼体系结构(通俗易懂版)

    冯诺依曼式计算机主要由输入设备 输出设备 控制器 运算器 存储器该五个组成部分构成 我们可以将该体系结构的运作通过人类接收信息 处理信息 并输出信息这个过程来加以类比理解 人类 当眼睛看到某些信息 这些信息被存储到记忆装置 大脑从记忆装置取
  • 热敏电阻温度特性曲线_空调温度传感器知识学习。

    在空调维修过程中 温度传感器 热敏电阻 故障比例较高 一旦出现开路 短路或特性曲线不良等故障 空调将显示不正常的代码 不能正常工作 由于温度传感器上没有标明参数和阻值 往往在维修中难以确定 就是同一品牌 不同型号 其阻值也不一定相同 温度传
  • CRC校验关键点说明(内附C语言CRC校验库)

    文章目录 目的 CRC校验关键点 参数模型 计算方式 CRC校验库 源文件 使用测试 总结 目的 CRC即循环冗余校验码 Cyclic Redundancy Check 是数据通信领域中最常用的一种查错校验码 其特征是信息字段和校验字段的长
  • 【Arduino基础教程】Moisture Sensor土壤湿度传感器

    Moisture Sensor土壤湿度传感器 Moisture Sensor土壤湿度传感器可读取在其周围的土壤存在的水分的量 因此 它可以用于监视你的花园土壤湿度并提醒你适时浇花 模块特征 供电 3 3v 或者 5v 输出信号 0 4 2v
  • 我在spring4整合hibernate5遇到的问题

    1 nested exception is java lang NoClassDefFoundError org hibernate engine SessionFactoryImplementor hibernate4整合spring3
  • 逆矩阵的算法

    花了10分钟 终于明白矩阵的逆到底有什么用 首先 我们先来看看这个数的倒数 倒数 其实矩阵的逆矩阵也跟倒数的性质一样 不过只是我们习惯用A 1表示 问题来了 既然是和倒数的性质类似 那为什么不能写成1 A 其实原因很简单 主要是因为矩阵不能
  • 前端vue项目部署到tomcat,一刷新报错404解决方法

    原文链接 https my oschina net u 1471354 blog 4277008 VUE项目部署到Tomcat之后 刷新页面会出现404 此问题主要是使用了VUE router的History模式 一 解决方案 1 编辑se
  • 海思编码:1、mpp系统详谈以及VI、VPSS、VENC之间的关系

    在HiMPP手册中都会有这么一张图 先讲一下视频缓存池这个概念 视频缓存池主要向媒体业务提供大块物理内存管理功能 负责内存的分配和回收 这部分具体什么作用 首先视频输入回需要大量的内存 打比方1080P的视频输入 VI部分怎么保存或者使用呢