关于提高嵌入式系统中的解码速度

From Ffmpeg工程组

Jump to: navigation, search

工程背景:

在嵌入式中实现MPEG4的视频解码,方案如下:
1.先在PC机上 利用ffmpeg把一般的av视频i转换成MPEG4的raw数据流.m4v文件
2.利用libavcodec.a写了一个程序,跑在嵌入式板上,对.m4v文件进行解码,并显示

解决方案:

  • 方案一:
解码优化
1)对IDCT汇编化,并优化VLD的实现
2)根据ARM9 cache & cache line的大小做MB的分组,使得每次可以同时处理多个MB
  即 对多个MB在一个循环内做VLD--->IDCT-->MC--.......
3)优化关键代码段的内存访问(MC)
4)不要使用FFmpeg内置的img_convert()做yuv2rgb转换,意思就是要自己写
5)libavcodec.a针对ARM优化
    configured ffmpeg with cpu = ARMV4L would give you a better performance
   If you have IPP,you can enable it, you can obtain huge enhancement
   IPP=Intel® Integrated Performance Primitives 
       intel高性能构件库 (only for xScale)
  • 方案二:
方法替换 
用xvid来做,ffmpeg包含的解码库太多,如果你只做MPPEG-4解码,何必用这么复杂的库?
btw,在嵌入式系统中最好用0.9.2版的xvid。
因为1.1.0的版本包含了很多AS的特性,通常在嵌入式系统中都不需要用,并且也不容易实现。要自己做编码算法的话,不能总想依赖别人,最好还是需要自己花
功夫去实现和优化。因此我觉得从实际出发的话,XVID0.9.2版的比1.1.0的好。实际上,通常在主频400MHz的平台上,要优化XVID的算法达到CIF实时解码也
还是很容易的,最多就一个多月。

有关该问题的讨论帖可参考ffmpeg工程组论坛中的相关讨论:

有关如何提高解码速度的讨论
Personal tools