HISI3516 MMP VB调试汇总


问题1:HI_MPI_VB_Init失败返回0xA001800C(HI_ERR_VENC_NOMEM)

调试思路:查看系统内存容量以及VB分配设置

<1> cat /proc/media-mem

HISI3516 MMP VB调试汇总_第1张图片

信息显示MMZ内存足够,保留仍有32MB

 

<2>查看VB配置的情况:

信息显示MMZ内存总计32768KB = 32MB,而此时的我试图为两路码流分配VB:

主码流1080P:

u32BlkSize = SAMPLE_COMM_SYS_CalcPicVbBlkSize(gs_enNorm,\

PIC_HD1080, PIXEL_FORMAT_YUV_SEMIPLANAR_420,  SAMPLE_SYS_ALIGN_WIDTH);

stVbConf.astCommPool[0].u32BlkSize = u32BlkSize;

stVbConf.astCommPool[0].u32BlkCnt = 10;

主码流需要分配VB空间:(1920*1080*2*10)/1024/1024约39MB

子码流VGA:

u32BlkSize = SAMPLE_COMM_SYS_CalcPicVbBlkSize(gs_enNorm,\

PIC_VGA, PIXEL_FORMAT_YUV_SEMIPLANAR_420, SAMPLE_SYS_ALIGN_WIDTH);

stVbConf.astCommPool[1].u32BlkSize = u32BlkSize;

stVbConf.astCommPool[1].u32BlkCnt = 3;

主码流需要分配VB空间:(640*480*2*3)/1024/1024约1MB

相加显然超过了MMZ内存总和32MB

 

<3>图像的大小

一帧1080P YUV420格式的图像大小应当是1920*1080*2 = 3145728B

但是从打印信息看,实际1080P图像的u32BlkSize是3159360B

实际VGA图像的u32BlkSize是503040B

原因是通过宏VB_PIC_HEADER_SIZE在每个VB块内加入了头部信息

 

<4>修改与执行结果:

将1080P的u32BlkCnt改为5,VGA的u32BlkCnt改为3。

对应分配空间则是:3159360B * 5 = 15426KB 503040B * 3 = 1473KB

在此cat /pro/media-mem,发现VB分配成功:

其它类似的内存分配问题也可以此来调试

 

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