博客日历
2024年05月 | ||||||
一 | 二 | 三 | 四 | 五 | 六 | 七 |
29 | 30 | 1 | 2 | 3 | 4 | 5 |
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 | 1 | 2 |
存档
2024年03月 04月 05月 2021年
01月 02月 11月 12月 2020年
02月 03月 04月 05月 06月 07月
09月 2018年
09月 2017年
01月 02月 07月 2016年
01月 04月 07月 08月 11月 12月
2015年
01月 02月 03月 05月 09月 10月
11月 2014年
01月 02月 03月 04月 05月 06月
07月 08月 09月 10月 11月 12月
2013年
01月 02月 03月 04月 05月 06月
07月 08月 09月 10月 11月 12月
2012年
01月 02月 03月 04月 05月 06月
07月 08月 09月 10月 11月 12月
2011年
01月 02月 03月 04月 05月 06月
07月 08月 09月 10月 11月 12月
2010年
01月 02月 03月 04月 05月 06月
07月 08月 09月 10月 11月 12月
2009年
03月 04月 05月 06月 07月 08月
09月 10月 11月 12月
用Visual C++ 6.0编译xvid
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)
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", ®.display_status,0},
分类:Win32/C++ 查看次数:6622 发布时间:2010/4/14 11:17:39
DirectShow.2 DirectShow原理
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文件的播放过程:
真正开发的时候,其实就是把这个图用代码描述出来。
真正开发的时候,其实就是把这个图用代码描述出来。
分类:Win32/C++ 查看次数:5969 发布时间:2010/4/11 10:33:49