宁静以致远
zgf的blog
<2010年3月>
28123456
78910111213
14151617181920
21222324252627
28293031123
45678910

留言簿(17)

随笔分类

随笔档案

文章档案

友情链接

资料收藏

搜索

最新评论

阅读排行榜

评论排行榜

 
VC知识库BLOG   首页  新随笔  联系  聚合  登录 
  随笔-37 文章-8 评论-121 Trackbacks-0

先讲讲一个有趣的故事
       当初mpeg4的标准提出来后,微软最先实现了它。不过微软的代码不公开,并且只用在他自家的media player上。mpeg4视频压缩比大,图像质量好,非常适合盗版及网络共享。微软的做法激怒了广大人民。人民群众的力量是伟大的,大家发起了一个名叫divx的开源组织,破解了微软的mpeg4核心,于是乎网上铺天盖地的出现了divx格式的盗版电影。divx到版本3.11后已经占据了绝大部分的市场份额,这个时候divx的一些创办者露出了真面目,他们不再公开后继版本,并推出divx5.1收取许可费。愤怒和失望过后,开源社区剩下的人和divx的另一些创办者没有放弃,他们采用完全开源的协议,开始了重新实现mpeg4的工作。于是诞生了xvid。

       我这儿就选择了xvid代码做为基础。

目标:2410在300M主频时解码352*288的mpeg4标准码流速度达到 25帧

第一步精简xvid程序
        xvid的代码可以到http://www.xvid.org/下载,上面还提供了许多测试码流。
1. 在PC上编译代码
      代码的大部分修改调试工作先在PC上调试好。流媒体世界论坛http://bbs.lmtw.com/上有一些有用的资料。
       我用的vc7.0。 先下载个nasm-0.98.36-win32,解压后将里面的nasmw.exe改成nasm.exe,然后将nasm.exe拷贝到Microsoft Visual Studio .NET 2003\Vc7\bin目录下。
       工程文件在xvidcore\build\win32下,打开它。文件视图中右健点中一个asm文件,选中属性-自定义生成步骤-常规-命令行,将里面的内容改为nasm -f win32 -DPREFIX -o $(IntDir)\$(InputName).obj $(InputPath)。
 所有的asm文件都要改。因为nasm的命令行格式与微软定义的不同。
    
        改过来之后就可以编译了。 运行build\win32\bin下的xvid_decraw.exe
可以测试下效果。当然要先到http://www.xvid.org/上下载些测试视频。
      命令格式是: xvid_decraw -i test.mp4u -d -c rgb24 -f tga 

2.剔除多余代码
     代码中有很多是编码部分的,解码部分更本不需要。

3.移植到arm平台
   2410对程序的限制和普通cpu差不多,所以代码基本没什么需要修改的。不过2410上还没有操作系统,所以将所有的window头文件都去掉。有些函数要自己实现,如memcpy , memset ,strncmp 等。也没有动态分配内存,需要将程序中的malloc和free去掉,改成预先在内存中分配空间。

现在有了一个可以在2410上跑的基本程序了,不过速度很慢,需要优化。我在200M的主频下测试解码352*288码流只有11.5帧。离老大提出的要求很远,后面还任重道远呀。
 

posted on 2006-05-27 19:12 zgf的blog 阅读(4809) 评论(7)  编辑 收藏
Comments
  • # re: mpeg4解码在2410上的实现1
    HateMath
    Posted @ 2006-05-28 17:51
    好帖要顶.
    后面的看懂了一点点,不过前面的故事蛮有趣的.
  • # re: mpeg4解码在2410上的实现1
    zgf
    Posted @ 2006-05-29 08:54
    我们现在用的2410平台是个裸平台,所有的库函数都没有,所以要用这些函数只有自己实现。2410也是32位CPU,所以变量类型都不用改动,寄存器也足够多,定义局部变量时基本没什么太多限制。2410有浮点运算能力,虽然速度比较慢,但是第一步先实现解码功能时可以忽略过去,后面优化时再将浮点运算转换成定点运算。
  • # re: mpeg4解码在2410上的实现1
    晓寒
    Posted @ 2006-05-29 12:53
    有意思。
  • # re: mpeg4解码在2410上的实现1
    machaofeng
    Posted @ 2006-08-01 15:08
    看了你的东西,学了很多,但是还是有很多问题想请教一下,请你在百忙中给我来信mchaofeng@gmail.com,我想问问你关于移植的一些细节问题,比如xvid源码中的汇编部分怎么处理,等等
  • # re: mpeg4解码在2410上的实现1
    ash
    Posted @ 2006-08-31 22:06
    读了你的文章之后,深有感触,我最近也想在2410上面做mpeg4的解码工作,我想请问一下为什么不在linux操作系统上面做呢?如果我在linux操作系统上面用xvidcore解码mpeg4,那么优化的方法同样可以适用吗?谢谢,我是新手不懂,呵呵
  • # re: mpeg4解码在2410上的实现1
    ash
    Posted @ 2006-08-31 22:06
    读了你的文章之后,深有感触,我最近也想在2410上面做mpeg4的解码工作,我想请问一下为什么不在linux操作系统上面做呢?如果我在linux操作系统上面用xvidcore解码mpeg4,那么优化的方法同样可以适用吗?谢谢,我是新手不懂,呵呵
  • # re: ash
    zgf
    Posted @ 2006-09-04 19:21
    没什么区别,当时只是因为linux系统还没配置好,并且考虑到linux系统会消耗一些资源。用ADS仿真器跑统计的时间可能更准确些。
标题  
姓名  
主页
验证码 *
内容   
  登录  使用高级评论  Top
[使用Ctrl+Enter键可以直接提交]