嵌入式视频方案学习第四篇——系统基本控制

来源:互联网 发布:美国mac口红海淘攻略 编辑:程序博客网 时间:2024/06/09 19:53

1、配置系统控制参数


接口:HI_S32 HI_MPI_SYS_SetConf(const MPP_SYS_CONF_S *pstSysConf);

功能:配置系统控制参数,没控制过调用才行

参数:


typedef struct hiMPP_SYS_CONF_S 

  /* stride of picture buffer must be aligned with this value. 
   * you can choose a value from 1 to 1024, 
   * and it except 1 must be multiple of 16.*/ 
 HI_U32 u32AlignWidth; 
  
}MPP_SYS_CONF_S; 


这个参数的具体含义是什么,后面再看,可能跟处理器的位数及采集一行图像的大小有关,默认设置16


2、获取系统控制参数

接口:HI_S32 HI_MPI_SYS_GetConf(MPP_SYS_CONF_S *pstSysConf); 


3、初始化MPP系统

HI_S32 HI_MPI_SYS_Init(HI_VOID); 

注意:调用要在视频缓存池之后,也需要先配置系统参数。


4、去初始化MPP系统

HI_S32 HI_MPI_SYS_Exit(HI_VOID); 


5、图像数据源到图像数据接收者绑定

数据处理模块绑定后可以自动运输

HI_S32  HI_MPI_SYS_Bind(const  MPP_CHN_S *pstSrcChn, const MPP_CHN_S *pstDestChn);


参数:

typedef struct hiMPP_CHN_S 

    MOD_ID_E     enModId; 
    HI_S32      s32DevId; 
    HI_S32      s32ChnId; 
} MPP_CHN_S;

成员名称  描述 
enModId  模块号。 直接找到相应的枚举即可
s32DevId  设备号。  
s32ChnId  通道号。 

   通道号与设备号怎么设置后面再看

6、解绑

HI_S32  HI_MPI_SYS_UnBind(const MPP_CHN_S *pstSrcChn, const MPP_CHN_S *pstDestChn);

7、获取MPP版本

HI_S32 HI_MPI_SYS_GetVersion(MPP_VERSION_S  *pstVersion);

8、获取当前时间戳

HI_S32 HI_MPI_SYS_GetCurPts(HI_U64 *pu64CurPts); 

这个时间戳有什么用?


9、初始化时间戳

HI_S32 HI_MPI_SYS_InitPtsBase(HI_U64 u64PtsBase);

10、同步时间戳

HI_S32 HI_MPI_SYS_SyncPts(HI_U64 u64PtsBase); 

11、存储映射接口。

HI_VOID * HI_MPI_SYS_Mmap(HI_U32 u32PhyAddr, HI_U32 u32Size);

12、存储反映射接口

HI_S32 HI_MPI_SYS_Munmap(HI_VOID* pVirAddr, HI_U32 u32Size); 

13、设置寄存器的值

HI_S32 HI_MPI_SYS_SetReg(HI_U32 u32Addr, HI_U32 u32Value);

14、获取寄存器的值。 

HI_S32 HI_MPI_SYS_GetReg(HI_U32 u32Addr, HI_U32 *pu32Value);

15、在用户态分配MMZ内存。

HI_S32 HI_MPI_SYS_MmzAlloc(HI_U32 *pu32PhyAddr, void **ppVitAddr, 
        const HI_CHAR *pstrMmb, const HI_CHAR *pstrZone, HI_U32 u32Len); 


16、在用户态分配MMZ内存,该内存支持 cache 缓存

HI_S32 HI_MPI_SYS_MmzAlloc_Cached(HI_U32 *pu32PhyAddr, HI_VOID 
**ppVitAddr, const HI_CHAR *pstrMmb, const HI_CHAR *pstrZone, HI_U32 
u32Len);

这种申请的内存带缓存,但是外围设备访问不了

17、清空cache 里的内容到内存并且使 cache 里的内容无效

HI_S32 HI_MPI_SYS_MmzFlushCache(HI_U32 u32PhyAddr, HI_VOID *pVitAddr, 
HI_U32 u32Size); 

18、在用户态释放MMZ内存。

HI_S32 HI_MPI_SYS_MmzFree(HI_U32 u32PhyAddr, HI_VOID *pVirtAddr);  


18、设置MPP视频缓存池属性

HI_S32 HI_MPI_VB_SetConf (const VB_CONF_S *pstVbConf);

参数:

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;


u32MaxPoolCnt :整个系统中可容纳的缓存池个数 ,这个固定取值最大 ?

u32BlkSize :每个缓存块的大小 ,这个可以根据摄像头像素来确定

u32BlkCnt:缓存块的个数  这个数量设置多少合适?

acMmzName :缓存池在所在的MMZ的名字

19、获取视频缓存区属性

HI_S32 HI_MPI_VB_GetConf (VB_CONF_S *pstVbConf);

20、初始化MPP视频缓存池

HI_S32 HI_MPI_VB_Init (HI_VOID);

21、去初始化MPP视频缓存池

HI_S32 HI_MPI_VB_Exit (HI_VOID);

22、创建一个视频缓存池

VB_POOL HI_MPI_VB_CreatePool(HI_U32 u32BlkSize,HI_U32 u32BlkCnt, const HI_CHAR *pcMmzName);

u32BlkSize:缓存池中每个缓存块的大小

u32BlkCnt  :缓存池中缓存块的个数

pcMmzName:缓存池所在DDR的名字

23、销毁一个视频缓存池

HI_S32 HI_MPI_VB_DestroyPool(VB_POOL Pool); 

24、用户态获取一个缓存块

VB_BLK HI_MPI_VB_GetBlock(VB_POOL Pool, HI_U32 u32BlkSize,const HI_CHAR *pcMmzName); 

25、用户态释放一个已经获取的缓存块

HI_S32 HI_MPI_VB_ReleaseBlock(VB_BLK Block); 


0 0
原创粉丝点击