HISI3516 MMP VB調試彙總


問題1:HI_MPI_VB_Init失敗返回0xA001800C(HI_ERR_VENC_NOMEM)

調試思路:查看系統內存容量以及VB分配設置

<1> cat /proc/media-mem

信息顯示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分配成功:

其它類似的內存分配問題也可以此來調試

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章