XVid实践(一)

来源:互联网 发布:生物学网络微盘 编辑:程序博客网 时间:2024/04/27 08:01

学习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项目进行阅读了.

原创粉丝点击