学习XVid的实践过程(一) (原创) 作者: winne
笔者先从XVID网站的下载到版本为1.0.2的代码。解压以后可以看到有以下几个目录
build
debian
doc
dshow
examples
src
vfw
依次对应相应的开发。其中src目录下的文件是core。如果使用VC编译项目的话,进入build/win32目录下,打开Xvidcore.dsp即可。
在dshow目录下是一个Decoder Filter,你可以通过它编译出一个基于CVideoTransformFilter的Filter。
在vfw目录下,你可以采用vfw的编程方式。
在doc目录下,Install是DOS文件格式,你可以通过阅读这个文章,知道如何获取最新的xvid的代码,如果编译xvidcore等。
另外你如果想编译成功的话可能需要下载nasm.exe程序.
编译分为Ia32和Ia64两部分.
目录结构如下:
decoder.c /
encoder.c /
xvid.c /
bitstream/bitstream.c / ---对字节流操作的代码
bitstream/mbcoding.c / ---对VLC和VOP字节操作
bitdustream/cbp.c /
dct/fdct.c / ---DCT变换
dct/idct.c / ---DCT逆变换
dct/simple_idct.c /
image/colorspace.c / ---颜色空间变化
image/image.c /
image/interpolate8x8.c / ---8*8/16*16低通的转换
image/font.c / ---字符处理部分
image/postprocessing.c / ---图像处理部分
image/qpel.c /
image/reduced.c /
motion/estimation_bvop.c / ---B帧vop预测部分
motion/estimation_common.c / ---模版搜索
motion/estimation_gmc.c /
motion/estimation_pvop.c / ---P帧VOP预测部分
motion/estimation_rd_based.c /
motion/gmc.c /
motion/motion_comp.c / ---运动补偿
motion/vop_type_decision.c / ---VOP类型描述
motion/sad.c /
prediction/mbprediction.c / ---mpeg 宏块预测
plugins/plugin_single.c / ---流控操作
plugins/plugin_2pass1.c /
plugins/plugin_2pass2.c /
plugins/plugin_lumimasking.c /
plugins/plugin_dump.c /
plugins/plugin_psnr.c /
quant/quant_h263.c / ---h263 的量化
quant/quant_matrix.c / ---量化参数
quant/quant_mpeg.c /
utils/emms.c /
utils/mbtransquant.c /
utils/mem_align.c / ---内存对齐操作
utils/mem_transfer.c / ---内存转换
utils/timer.c
SRC_IA32 = /
bitstream/x86_asm/cbp_3dne.asm / ---优化字节流操作
bitstream/x86_asm/cbp_mmx.asm /
bitstream/x86_asm/cbp_sse2.asm /
dct/x86_asm/fdct_mmx_ffmpeg.asm / ---用MMX优化ffmpeg
dct/x86_asm/fdct_mmx_skal.asm /
dct/x86_asm/fdct_sse2_skal.asm /
dct/x86_asm/idct_3dne.asm /
dct/x86_asm/idct_mmx.asm /
dct/x86_asm/idct_sse2_dmitry.asm /
dct/x86_asm/simple_idct_mmx.asm /
image/x86_asm/colorspace_rgb_mmx.asm / ---rgb/yuv的转换
image/x86_asm/colorspace_yuv_mmx.asm /
image/x86_asm/colorspace_yuyv_mmx.asm /
image/x86_asm/interpolate8x8_3dn.asm /
image/x86_asm/interpolate8x8_3dne.asm /
image/x86_asm/interpolate8x8_mmx.asm /
image/x86_asm/interpolate8x8_xmm.asm /
image/x86_asm/reduced_mmx.asm /
image/x86_asm/qpel_mmx.asm /
motion/x86_asm/sad_xmm.asm /
motion/x86_asm/sad_sse2.asm /
motion/x86_asm/sad_mmx.asm /
motion/x86_asm/sad_3dne.asm /
motion/x86_asm/sad_3dn.asm /
quant/x86_asm/quantize_h263_mmx.asm / ---针对Intel和AMD优化H263的量化参数
quant/x86_asm/quantize_h263_3dne.asm /
quant/x86_asm/quantize_mpeg_xmm.asm /
quant/x86_asm/quantize_mpeg_mmx.asm /
utils/x86_asm/mem_transfer_mmx.asm / ---针对Intel和AMD优化内存转换
utils/x86_asm/mem_transfer_3dne.asm /
utils/x86_asm/interlacing_mmx.asm /
utils/x86_asm/cpuid.asm
仅仅列举了一部分的代码树, 以上这部分的代码是重要的. 这时候你可以打开libxvidcore项目进行阅读了.