我们要解决的问题是CPU什么时候发QDMA请求,命令DMA控制器将需要的数据调入内存中。而且这种调度方式要保证CPU发命令之后可以进行其它的计算,等CPU需要这些数据的时候,DMA已经将其调入内存中了。
为了解决这个问题需要了解编码器各个模块的运行时间,以及DMA调度数据到内存所需要的时间。通过在DM642上运行优化过的程序,一个参考帧情况下测得各部分占程序运行时间的比例大致如表2所示:

表2程序各部分运行时间所占比例
点击此处查看全部新闻图片
图4中由CPU指向DMA的箭头表示启动QDMA传输。每个DMA传输所用的时间相对于程序运行的时间比例是:传输原始像素占1%,传输SKIP和分像素运动估计参考区各占3%,传输整像素亮度和色度参考区共15%,传输环路滤波结果5%。整个DMA传输的时间大概占CPU计算时间的30%。通过这些数据可以看出,按照图4进行安排可以达到上面所述目标。

图4CPU与DMA并行工作
点击此处查看全部新闻图片
只依靠上面这些方法进行优化,视频压缩还不能达到实时要求,还需要进行算法级优化,以及对编码器中各个模块进行程序代码级的优化。常通过采用内联函数、软件流水、线性汇编优化等方法,以及合理使用针对视频处理而设计的特殊指令集,充分利用DM642内部的并行计算单元,提高了程序的运行速度。由于篇幅有限,对这些优化方法本文不再重点论述。