xvid从上次开始就已经深深吸引住我的视线,上一篇已经讲解了vs2005下面编译它的方法,很多朋友会问,这个xvid-core编译完毕后,如何使用呢?我就写了一个解码的程序(vs2005下编译通过),感兴趣的朋友可以看附件。下面的是一个在vs2005下面运行的效果图,加入了非常简单的双缓冲技术,感兴趣的朋友可以下载它的源代码包看看。

有几个的设置需要注意的地方:
(1)vs2005的additional include directories里面需要加入xvidcore-1.1.2\src这个目录,这样编译器才会找到#include "xvid.h"
(2)在additional lib directories里面加入xvidcore-1.1.2\bin目录,然后在additional dependicies里面加入libxvidcore.lib这样,就可以把xvid静态的链接到你的程序里面了。
(3)具体的解码过程十分简单,读入mpeg4数据,然后解一帧出来,然后显示,然后解下一帧。这个过程是循环往复的,直到到达文件末尾。而且从代码上看起来,到达文件末尾后,似乎×××里面还有没有显示完的图像,所以又一个循环,去读取一下,就是后面的flush decoder里面的内容了。这也难怪,mpeg4本来就是那种预测型的视频编码,每一帧都是根据前一帧计算得出的,所以数据传入完了,还能继续预测出几帧的图像也是很正常的。
文件: XvidDecTest.rar
大小: 700KB
下载: 下载
很多朋友会问,你的那个test.mp4是怎么生成的,其实很简单,从网上下载一个yuv测试序列,注意必须是qcif的(176x144)的,然后进入xvidcore-1.1.2\build\win32\bin里面,找到xvid_encraw程序,然后运行它具体的命令行使用方式如下:
xvid_encraw -type 0 -i xxxxxx.yuv -w 176 -h 144 -o test.mp4
这时候会输出一大堆编码时候帧的信息。一会儿功夫就编码好了,注意这里是test.mp4,我们只需要把编码好的文件保存程test.mp4,然后把它放到与这个XvidDecTest.exe相同的目录下面,运行demo程序,就可以看到结果了。偶做了简单的双缓冲,其实还是太笨,而且也懒得直接显示yuv420的解码结果(yuv420转rgb的函数已经写好了),这个东西权当作练手的一个方法了。下次要开始像pocket pc上面移植了。
祝大家晚安。