2-2视频缓存池

风流意气都作罢 提交于 2019-11-29 19:09:36

什么是视频缓存池?

1.视频的本质是多帧图片,图片的本质的是RGB或者rawRGB数据,要占用一段连续内存

2.视频的裁剪、缩放、修正处理等各种操作,本质上就是对内存中的数据进行运算

3.视频缓冲池(VB:video buffer)就是一段很大,又被合理划分和管理的内存,用来做视频数据的暂存和运算场地

4.公共视频缓存池的【公共】可以理解为全局变量,也就是各个模块都能访问的一段内存

5.看似视频缓冲块在各个模块之间流转,实际上并没有内存复制,而是指针在传递

6.视频缓存池的内存有MPP维护,我们在系统启动时就把整个SDRAM分成了2部分:系统部分(由linux kernel来维护管理)和mpp部分(由mpp系统来维护管理)

7.缓存池需要几个,每个包含几个缓存块,每个缓存块多大,都是可以由用户程序设置好参数,然后调用mpp的相关api来向mpp申请分配的

 

 

 

相关数据结构和api

1.VB_CONF_S:定义视频缓存池属性结构体

 

typedef struct hiVB_CONF_S
{
    HI_U32 u32MaxPoolCnt;     /* max count of pools, (0,VB_MAX_POOLS]  */    
    struct hiVB_CPOOL_S
    {
        HI_U32 u32BlkSize;//每个缓存池的缓存块大小
        HI_U32 u32BlkCnt;//缓存块的数量
        HI_CHAR acMmzName[MAX_MMZ_NAME_LEN];//缓存块的名字
    }astCommPool[VB_MAX_COMM_POOLS];
} VB_CONF_S;

 

2.HI_MPI_VB_SetConf:设置 MPP 视频缓存池属性

3.HI_MPI_VB_Init:初始化 MPP 视频缓存池

 

/******************************************************************************
* function : vb init & MPI system init
******************************************************************************/
HI_S32 SAMPLE_COMM_SYS_Init(VB_CONF_S* pstVbConf)
{
    MPP_SYS_CONF_S stSysConf = {0};
    HI_S32 s32Ret = HI_FAILURE;

    HI_MPI_SYS_Exit();
    HI_MPI_VB_Exit();

    if (NULL == pstVbConf)
    {
        SAMPLE_PRT("input parameter is null, it is invaild!\n");
        return HI_FAILURE;
    }

    s32Ret = HI_MPI_VB_SetConf(pstVbConf);
    if (HI_SUCCESS != s32Ret)
    {
        SAMPLE_PRT("HI_MPI_VB_SetConf failed!\n");
        return HI_FAILURE;
    }

    s32Ret = HI_MPI_VB_Init();
    if (HI_SUCCESS != s32Ret)
    {
        SAMPLE_PRT("HI_MPI_VB_Init failed!\n");
        return HI_FAILURE;
    }

    stSysConf.u32AlignWidth = SAMPLE_SYS_ALIGN_WIDTH;
    s32Ret = HI_MPI_SYS_SetConf(&stSysConf);
    if (HI_SUCCESS != s32Ret)
    {
        SAMPLE_PRT("HI_MPI_SYS_SetConf failed\n");
        return HI_FAILURE;
    }

    s32Ret = HI_MPI_SYS_Init();
    if (HI_SUCCESS != s32Ret)
    {
        SAMPLE_PRT("HI_MPI_SYS_Init failed!\n");
        return HI_FAILURE;
    }

    return HI_SUCCESS;
}

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!