对于高清视频采集,需要使用大量的内存。1080P输入时,一帧图像的大小为1920 X 1080 X 2 = 4147200字节(4MB),这是很大的一片内存区域,需要合理分配内存才能保证程序的正常运行。在SDK中提供的loadmodule.sh脚本文件对内存的分配只适用于标清视频采集播放,在处理高清视频时如果仍然使用该配置方案则会出现内存分配不足的现象,所以需要进行修改。
DaVinci平台使用CMEM提供的pool机制管理内存,在处理高清视频时,对于CMEM的pool分配需要根据实际情况多规划一些较大的内存区域。考虑到一帧图像大小为4147200字节,所以CMEM的pool多设置一些块的大小为4147200字节。另外,考虑到总的CMEM模块总共能够分配的内存大小为110M,所以在在规划pool块大小时也要注意该限制,确保在不超过总大小的情况下最优地分配内存。最终的内存pool分配如下所示。
insmod cmemk.ko phys_start=0x84C00000 phys_end=0x8ba00000 pools=7x5396480,10x4147200,1x3458400,10x1434240,11x663552,4x60000 |
原来的loadmodule.sh:
insmod cmemk.ko phys_start=0x84C00000 phys_end=0x8ba00000 pools=2x921600,1x460800,1x1048576,1x345600,2x86400,11x564528,5x677376,14x5396480,3x4147200,4x1451520,4x1843200 |