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

在HiMPP手册中都会有这么一张图
海思编码:1、mpp系统详谈以及VI、VPSS、VENC之间的关系_第1张图片

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++)  // vi两个通道
 {
        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;
}

海思编码:1、mpp系统详谈以及VI、VPSS、VENC之间的关系_第2张图片可以看到叠加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

你可能感兴趣的:(海思,音视频)