0.xvid简介
Xvid(旧称为XviD)是一个开放源代码的MPEG-4视频编解码器,它是基于OpenDivX而编写的。
Xvid的主要竞争对手是DivX。但Xvid是开放源代码的,而DivX则只有免费(不是自由)的版本和商用版本。
详见百度百科:http://baike.baidu.com/view/30246.htm?fr=ala0_1
 
1.下载xvid源码
官方网站:http://www.xvid.org/
目前最新版本是Xvid 1.2.2 stable release(今天:2010年4月24日)
 
2.编译环境的设置
 
2.1 下载安装nasm汇编器(因为xvid的部分程序是用汇编写的)
下载地址:http://sourceforge.net/projects/nasm/
最新版本是nasm-2.07-installer.exe(今天:2010年4月24日)
这里将其安装在D:\NASM下
 
2.2 安装新版的Windows SDK(编译)
这里安装的是Microsoft Platform SDK for Windows XP SP2
下载地址:http://www.microsoft.com/msdownload/platformsdk/sdkupdate/XPSP2FULLInstall.htm
 
2.3 安装DirectX SDK(包括DirectShow SDK)
参见《DirectShow.1 最简单的DirectShow应用程序 — 播放视频
 
2.4 设置Visual C++ 6.0
 
a.Include files(添加在最前面)
D:\DXSDK\Include
D:\DXSDK\Samples\C++\DirectShow\BaseClasses
D:\Program Files\Microsoft Platform SDK for Windows XP SP2\Include
 
b.Library files(添加在最前面)
D:\DXSDK\Lib
D:\DXSDK\Samples\C++\DirectShow\BaseClasses\lib
 
c.Executable files(最后面)
D:\NASM
 
3.开始编译
 
3.1 几个VC++的project分别是
a.xvidcore-1.2.2\xvidcore\build\win32\xvidcore.dsw
  包括:
    libxvidcore.dsp
    libxvidcore_static.dsp
    xvid_bench.dsp
    xvid_decraw.dsp
    xvid_decraw_static.dsp
    xvid_encraw.dsp
    xvid_encraw_static.dsp
b.xvidcore-1.2.2\xvidcore\dshow\dshow.dsp
c.xvidcore-1.2.2\xvidcore\vfw\vfw.dsp
 
依次编译他们即可。
 
3.2 遇到错误的处理方法
 
a.提示xvidcore-1.2.2\xvidcore\src\plugins\plugin_2pass2.c(497) : error C2520: conversion from unsigned __int64 to double not implemented, use signed __int64
 
修改如下文件:
xvidcore-1.2.2\xvidcore\src\portab.h
行57:# define uint64_t unsigned __int64改为
# define uint64_t  __int64
 
b.提示xvidcore-1.2.2\xvidcore\vfw\src\status.c(246) : error C2520: conversion from unsigned __int64 to double not implemented, use signed __int64
修改如下文件:
xvidcore-1.2.2\xvidcore\vfw\src\status.h
行9:# define uint64_t unsigned __int64改为
# define uint64_t __int64

4.备注
调用压缩功能时会显示一个状态窗口,要让它不显示的话,需要在编译vfw工程时,修改
xvidcore-1.2.2\xvidcore\vfw\src\config.c的297行为:
{"display_status", &reg.display_status,0},
 

本文链接地址: 用Visual C++ 6.0编译xvid
https://blog.qingfengju.com/index.asp?id=214

分类:Win32/C++ 查看次数:6622 发布时间:2010/4/14 11:17:39

DirectShow使用Filter Graph模型来管理整个数据流的处理过程,它是一系列Filter构成的一条流水线,其中的每个Filter都是COM组件。
 
Filter主要有几个大类:
a.Filter:负责读取数据;
b.转换Filter:负责转换数据的格式,常见的视频解码器就是转换Filter
c.渲染Filter:负责输出数据,如播放或存盘操作。
 
每个Filter都有一个或几个引脚,各个Filter通过这些引脚相连形成一个Filter Graph
DirectX9.0 SDK中提供了一个工具GraphEdit,它可以演示Filter之间的连接关系,并执行这个Filter Graph

下面用GraphEdit来展示一个rmvb文件的播放过程:

真正开发的时候,其实就是把这个图用代码描述出来。

 


本文链接地址: DirectShow.2 DirectShow原理
https://blog.qingfengju.com/index.asp?id=213

分类:Win32/C++ 查看次数:5969 发布时间:2010/4/11 10:33:49