利用DirectShow开发自己的filter

利用DirectShow开发自己的filter
利用DirectShow开发自己的filter

学习directshow已经有几天了,下面将自己的学习心得写下来,希望对其他的人有帮助。Filter实质是个COM组件,所以学习开发Filter之前你应该对com的知识有点了解。Com组件的实质是一个实现了纯虚指针接口的C++对象。关于com的东西,这里不多讲。

一给vc配置DirectShow的开发环境

无论开发Filter还是开发Dshow的应用程序都要配置一下开发环境的,其实就是包含一下dshow用到的头文件和动态库。选择Tools菜单下面的Options。在弹出的Option对话框配置如下

图1 添加头文件

选择动态库文件添加到工程中

图2 添加动态库

二创建工程以及Filter的入口函数

创建工程

一般情况下,创建Filter使用一个普通的Win32 DLL项目。而且,一般Filter项目不使用MFC。这时,应用程序通过CoCreateInstance函数Filter实例;Filter与应用程序在二进制级别的协作。另外一种方法,也可以在MFC的应用程序项目中创建Filter。

在vc里新建一个工程,选择win32动态库,如下图

图3

图4

这样生成了一个简单的DLL,只有一个Dllmain入口函数。

下面我要给这个filter添加入口函数了。

Filter是个基于DLL的com组件,所以一般的Filter都要实现下面几个入口函数

首先定义导出函数

要导出这些函数有两种方法,一是在定义函数时使用导出关键字_declspec(dllexport),另外一种方法是在创建DLL文件时使用模块定义文件.Def。使用导出函数关键字_declspec(dllexport)创建MyDll.dll就是在 .h文件中定义定义函数如下:

为了用.def文件创建DLL,往该工程中加入一个文本文件,命名为MyDll.def,再在该文件中加入如下代码:

LIBRARY MyFilter.ax

EXPORTS

DllMain PRIVATE

DllGetClassObject PRIVATE

DllCanUnloadNow PRIVATE

DllRegisterServer PRIVATE

DllUnregisterServer PRIVATE

其中LIBRARY语句说明该def文件是属于相应DLL的,EXPORTS语句下列出要导出的函数名称。我们可以在.def文件中的导出函数后加@n,如Max@1,Min@2,表示要导出的函数顺序号,在进行显式连时可以用到它。该DLL编译成功后,打开工程中的Debug目录,同样也会看到MyDll.dll和MyDll.lib文件。

然后要定义这些函数的实现了,其实这些工作dshow的基类里都已经替我们做好了,我们所要做的就拿来用就是了,最重要的三个函数的实现一般如下

STDAPI DllUnregisterServer()

{

return AMovieDllRegisterServer2(FALSE);

}

extern "C" BOOL WINAPI DllEntryPoint(HINSTANCE, ULONG, LPVOID);

BOOL APIENTRY DllMain(HANDLE hModule, DWORD dwReason, LPVOID lpReserved)

{

return DllEntryPoint((HINSTANCE)(hModule), dwReason, lpReserved);

}

其中DllEntryPoint 是在C:\DX90SDK\Samples\C++\DirectShow\BaseClasses\dllentry.cpp定义的,如果感兴趣我们可以去看看它的定义。AMovieDllRegisterServer2函数是在下面

C:\DX90SDK\Samples\C++\DirectShow\BaseClasses\dllsetup.cpp这个文件定义的,具体实现可以自己看看。

到了这里你恐怕要做点工作,还是要设置一下你的项目环境,否则恐怕你编译是通不过的,因为你用到了基类的一些东西,所以你要将你的dshow基类的定义和库文件包含进来。首先包含

#include Streams.h

其次在Project –Setting菜单下配置自己的Filter输出的名字和连接的lib文件

图5

其中library modules里的包含的动态库如下

c:\DX90SDK\Samples\C++\DirectShow\BaseClasses\debug\strmbasd.lib msvcrtd.lib quartz.lib vfw32.lib

winmm.lib kernel32.lib advapi32.lib version.lib largeint.lib user32.lib gdi32.lib comctl32.lib ole32.lib olepro32.lib oleaut32.lib uuid.lib

此时你编译一下,好像还是通不过,它提示有一个全局的用于实现COM接口的变量没有定义,不着急,下面我们就开始实现Filter的com接口。

三如何实现Filter 的类厂对象

我们知道一个Filter是一个com组件,所以它com特性的实现其实在其基类中实现的,比如IUnknown 接口,我们直接从基类派生出我们的Filter后,它就支持com接口了,它就是一个com组件了。

所有的com组件为了实现二进制的封装,所以连创建的接口都封装了,因此每个com对象都有个类对象(也叫类厂对象,本身也是com对象,用来创建com组件)来创建com组件。

下面温习一下com组件的创建过程,其中涉及到几个函数

1、当客户端要创建一个com组件时,它通过底层的COM API函数CoGetClassObject()使用SCM 的服务,这个函数请SCM把一个指针绑定到客户端请求的com组件的类对象上,其实在CoGetClassObject ()里它装载了该DLL的库,通过该dll的导出函数DllGetClassObject();DllGetClassObject根据客户端提供的com组件CLASSID,返回该com组件类对象的指针。下面com组件的创建和SCM无关了。

2、客户端利用组件的类对象(类厂对象)的IClassFactory::CreateInstance方法创建com组件。

Filter在这里使用了一个类厂模板类来当作Filter的类厂对象。下面看看类厂在DShow是怎么工作的。

类厂对象也是一个com组件。本来DllGetClassObject是应该由我们自己完成一个函数,在directshow 基类里已经完成了,我们不用管它了。它的功能就是来寻找这个DLL中的类厂对象,看是否有符合客户端请求的类厂对象。

DLL里声明了一个全局的类厂模板数组,当DllGetClassObject请求类厂对象的时候,它就搜索这个数组,看是否有和CLSID匹配的类厂对象。当它找到一个匹配的CLSID,它就创建一个类厂对象,然后讲类厂指针返回给CoGetClassObject,然后客户端可以根据返回去的类厂指针,调用

IClassFactory::CreateInstance方法创建组件,类厂就根据数组里定义的方法创建com组件。

factory template包含下列变量:

const WCHAR * m_Name; // Name

const CLSID * m_ClsID; // CLSID

LPFNNewCOMObject m_lpfnNew; // Function to create an instance of the component

LPFNInitRoutine m_lpfnInit; // Initialization function (optional)

const AMOVIESETUP_FILTER * m_pAMovieSetup_Filter; // Set-up information (for filters)

其中的两个函数指针m_lpfnNew and m_lpfnInit使用下面的定义

你可以参照如下的方式定义你的类厂对象

CUnknown * WINAPI CMyFilter::CreateInstance(LPUNKNOWN pUnk, HRESULT *pHr)

{

CMyFilter *pFilter = new CMyFilter(NAME("my Filter"), pUnk, pHr);

if (pFilter== NULL)

{

*pHr = E_OUTOFMEMORY;

}

return pFilter;

}

你可以声明自己的类厂数组如下:

CFactoryTemplate g_Templates[1] =

{

{

L"my filter", // Name

&CLSID_MYFilter, // CLSID

CMyFilter::CreateInstance, // Method to create an instance of MyComponent

NULL, // Initialization function

&sudInfTee // Set-up information (for filters)

}

};

int g_cTemplates = sizeof(g_Templates) / sizeof(g_Templates[0]);

如果在这个com组件中你要支持多个filter,你可以在这个数组中继续添加就是了。

四如何实现自己的Filter

在这里就要讲如何创建自己的Filter了,下面我们以写一个CTransformFilter为例

1、选择一个基类,声明自己的类

创建filter很简单,你只要根据自己的需要选择不同的基类Filter派生出自己的Filter,它就已经支持com特性了。

从逻辑上考虑,在写Filter之前,选择一个合适的Filter基类是至关重要的。为此,你必须对几个Filter 的基类有相当的了解。在实际应用中,Filter的基类并不总是选择CBaseFilter的。相反,因为我们绝大部分写的都是中间的传输Filter(Transform Filter),所以基类选择CTransformFilter和CTransInPlaceFilter

的居多。如果我们写的是源Filter,我们可以选择CSource作为基类;如果是Renderer Filter,可以选择CBaseRenderer或CBaseVideoRenderer等。

总之,选择好Filter的基类是很重要的。当然,选择Filter的基类也是很灵活的,没有绝对的标准。能够通过CTransformFilter实现的Filter当然也能从CBaseFilter一步一步实现。

下面,笔者就从本人的实际经验出发,对Filter基类的选择提出几点建议供大家参考。

首先,你必须明确这个Filter要完成什么样的功能,即要对Filter项目进行需求分析。请尽量保持Filter 实现的功能的单一性。如果必要的话,你可以将需求分解,由两个(或者更多的)功能单一的Filter去实现总的功能需求。

其次,你应该明确这个Filter大致在整个Filter Graph的位置,这个Filter的输入是什么数据,输出是什么数据,有几个输入Pin、几个输出Pin等等。你可以画出这个Filter的草图。弄清这一点十分重要,这将直接决定你使用哪种“模型”的Filter。比如,如果Filter仅有一个输入Pin和一个输出Pin,而且一进一处的媒体类型相同,则一般采用CTransInPlaceFilter作为Filter的基类;如果媒体类型不一样,则一般选择CTransformFilter作为基类。

再者,考虑一些数据传输、处理的特殊性要求。比如Filter的输入和输出的Sample并不是一一对应的,这就一般要在输入Pin上进行数据的缓存,而在输出Pin上使用专门的线程进行数据处理。这种情况下,Filter的基类选择CSource为宜(虽然这个Filter并不是源Filter)。当Filter的基类选定了之后,Pin的基类也就相应选定了。接下去,就是Filter和Pin上的代码实现了。有一点需要注意的是,从软件设计的角度上来说,应该将你的逻辑类代码同Filter的代码分开。下面,我们一起来看一下输入Pin的实现。你需要实现基类所有的纯虚函数,比如CheckMediaType等。在CheckMediaType内,你可以对媒体类型进行检验,看是否是你期望的那种。因为大部分Filter采用的是推模式传输数据,所以在输入Pin上一般都实现了Receive方法。有的基类里面已经实现了Receive,而在Filter类上留一个纯虚函数供用户重载进行数据处理。这种情况下一般是无需重载Receive方法的,除非基类的实现不符合你的实际要求。而如果你重载了Receive方法,一般会同时重载以下三个函数EndOfStream、BeginFlush和EndFlush。我们再来看一下输出Pin的实现。一般情况下,你要实现基类所有的纯虚函数,除了CheckMediaType进行媒体类型检查外,一般还有DecideBufferSize以决定Sample使用内存的大小,GetMediaType提供支持的媒体类型。

最后,我们看一下Filter类的实现。首先当然也要实现基类的所有纯虚函数。除此之外,Filter还要实现CreateInstance以提供COM的入口,实现NonDelegatingQueryInterface以暴露支持的接口。如果我们创建了自定义的输入、输出Pin,一般我们还要重载GetPinCount和GetPin两个函数。

这里我主要为了举例,所以简单写的filter没有Pin接口,但在我的demo里的Filter,却是有个out pin 和一个input pin。

我的Filter类的定义如下:

static CUnknown * WINAPI CreateInstance(LPUNKNOWN pUnk, HRESULT *phr);

CBasePin *GetPin(int n);

int GetPinCount();

}

注:因为基类是一个纯虚的基类,所以在你的filter一定要派生一个其中的纯虚函数,否则编译器会提示你的派生类也是一个纯虚类,

你在创建这个com组件对象的时候,纯虚类是没法创建对象的。

2、给自己的Filter生成一个CLSID

你可以用Guidgen or Uuidgen给自己的Filter生成一个128位的ID号,然后利用DEFINE_GUID宏在Filter的头文件声明该Filter的CLSID;

[myFilter.h]

这个CLSID_MYFilter在类厂数组用到,在注册Filter时也要用到。

3 CMyFilter类的简单实现

这个类纯粹为了演示用,所以特别简单,你可以参考我的demo,那个filter写的功能比较全。

CMyFilter::CMyFilter(TCHAR *pName,LPUNKNOWN pUnk,HRESULT *hr)

:CBaseFilter(NAME("my filter"), pUnk, this, CLSID_MYFilter)

{ }

CMyFilter::~CMyFilter()

{}

// Public method that returns a new instance.

CUnknown * WINAPI CMyFilter::CreateInstance(LPUNKNOWN pUnk, HRESULT *pHr)

{

CMyFilter *pFilter = new CMyFilter(NAME("my Filter"), pUnk, pHr);

if (pFilter== NULL)

{

*pHr = E_OUTOFMEMORY;

}

return pFilter;

}

CBasePin * CMyFilter::GetPin(int n)

{

这样基本上就实现了一个filter,但是这个filter没有与之相联系的PIN,但是实现Filter的基本过程就时这样了,至于逻辑上的东西,比如Filter和pin如何连接,数据流是如何流动的,你都要去看看sdk了,按照上面的步骤你就可以写一个Filter的框架出来。

下面我们总结一下写一个Filter至少需要那些东西。

1、Filter的实现类

在这里就是CMyFilter类,在这个类里你可以实现自己的逻辑上的功能,包括定义你的filter的特性,给你的filter配备pin接口等。

2、com组件的引出函数

五个全局函数:

DllMain //dll的入口函数

DllGetClassObject //获得com组件的类厂对象

DllCanUnloadNow //com组件是否可以卸载

DllRegisterServer //注册com组件

DllUnregisterServer //卸载com组件

其中DllGetClassObject 已经由基类完成你自己只要完成三个函数即可DllMain,DllRegisterServer,DllUnregisterServer。

3、com组件的类厂对象

类厂对象是用来生成Filter对象的,用的模板类定义了一个全局的模板类对象数组,一般格式如下

CFactoryTemplate g_Templates[1] =

{

{

L"my filter", // Name

&CLSID_MYFilter, // CLSID

CMyFilter::CreateInstance, // Method to create an instance of MyComponent

NULL, // Initialization function

&sudInfTee // Set-up information (for filters)

}

4、关于你自己定义的Filter以及Pin的信息

这些是一个全局的结构变量,用于描述你的Filter和你定义的pin,在注册Filter的时候会用到,如下

AMOVIESETUP_FILTER 描述一个Filter

AMOVIESETUP_PIN 描述pin

AMOVIESETUP_MEDIATYPE 描述数据类型

下面的代码描述了一个Filter带有一个output PIN

static const WCHAR g_wszName[] = L"Some Filter";

AMOVIESETUP_MEDIATYPE sudMediaTypes[] = {

{ &MEDIATYPE_Video, &MEDIASUBTYPE_RGB24 },

{ &MEDIATYPE_Video, &MEDIASUBTYPE_RGB32 },

};

AMOVIESETUP_PIN sudOutputPin = {

L"", // Obsolete, not used.

FALSE, // Is this pin rendered?

TRUE, // Is it an output pin?

FALSE, // Can the filter create zero instances?

FALSE, // Does the filter create multiple instances?

&GUID_NULL, // Obsolete.

NULL, // Obsolete.

2, // Number of media types.

sudMediaTypes // Pointer to media types.

};

AMOVIESETUP_FILTER sudFilterReg = {

&CLSID_SomeFilter, // Filter CLSID.

g_wszName, // Filter name.

MERIT_NORMAL, // Merit.

1, // Number of pin types.

&sudOutputPin // Pointer to pin information.

};

最后如果你还是调试通不过,看看你是否包含了下面的头文件

DirectShow之接口实战篇

在正确安装好DirectX SDK后,我们必须设置DirectX SDK的头文件和库文件,使其在Visual Studio的搜索路径内。对于Visual Studio .NET 2003可如下进行设置:菜单→工具→选项→项目→VC++目录,在包含文件中加入D:\DXSDK\Include,在库文件中加入 D:\DXSDK\lib(我的SDK的安装路径是D:\DXSDK): 头文件 文件名称描述 Dshow.h所有的DirectShow应用都必须包含库文件 文件名称描述 Strmiids.lib此库文件中导出类标识(CLSID)和接口标识 (IID),所有的DirectShow应用都必须包含此 文件。 Quartz.lib此库文件中导出函数AMGetErrorText,如果 你的程序中调用了此函数,则必须包含此库 文件。 DirectShow之接口实战篇(一) 现今自己编程做一个多媒体播放工具是一件很令人开心愉悦的事情,但如果使用MediaPlay 控件开发则会受到很多限制,自己的很多好的创意想法都无法或者很难实现,如果利用微软的DirectX接口开发则可以充分的将作者的独特想法付诸于实现,何乐而不为呢!!不过关于DirectShow接口的开发说明文档实在是少之又少,仅有的一些不是英文的就是一些关于理论方面的,真正关于接口实战编程而且是用Delphi开发工具实现的更是凤毛麟角,使很多人都望而却步。在这里,我把我应用Directshow开发的心得以及我搜集到一些资料重新整理编辑出来公布,希望对所有由此兴趣的同仁有所帮助,就算达到了我的目的。废话少说,进入正文。 既然是接口实战篇,就先把一些常用的接口列出来,让大家有一些基本的认识,都是用来做什么的,什么时候我们会需要用到此接口。 IFilterGraph 过滤通道接口 IFilterGraph2 增强的IFilterGraph IGraphBuilder 最为重用的COM接口,用于手动或者自动构造过滤通道Filter Graph Manager IMediaControl 用来控制流媒体,例如流的启动和停止暂停等,播放控制接口 IMediaEvent 播放事件接口,该接口在Filter Graph发生一些事件时用来创建事件的标志信息并传送给应用程序 IMediaEventEx 扩展播放事件接口 IMediaPosition 播放的位置和速度控制接口(控制播放位置只能为设置时间控制方式) IMediaSeeking 另一个播放的位置和播放速度控制接口,在位置选择方面功能较强.设置播放格式,多种控制播放方式.常用的有:(1)TIME_FORMAT_MEDIA_TIME单位100纳秒。(2)TIME_FORMAT_FRAME按帧播放 IBasicAudio 声音控制接口

利用DirectShow开发自己的filter

学习directshow已经有几天了,下面将自己的学习心得写下来,希望对其他的人有帮助。Filter实质是个COM组件,所以学习开发Filter之前你应该对com的知识有点了解。Com组件的实质是一个实现了纯虚指针接口的C++对象。关于com的东西,这里不多讲。 一给vc配置DirectShow的开发环境 无论开发Filter还是开发Dshow的应用程序都要配置一下开发环境的,其实就是包含一下dshow用到的头文件和动态库。选择Tools菜单下面的Options。在弹出的Option对话框配置如下 图1 添加头文件 选择动态库文件添加到工程中

图2 添加动态库 二创建工程以及Filter的入口函数 创建工程 一般情况下,创建Filter使用一个普通的Win32 DLL项目。而且,一般Filter项目不使用MFC。这时,应用程序通过CoCreateInstance函数Filter实例;Filter与应用程序在二进制级别的协作。另外一种方法,也可以在MFC的应用程序项目中创建Filter。 在vc里新建一个工程,选择win32动态库,如下图 图3 图4

这样生成了一个简单的DLL,只有一个Dllmain入口函数。 下面我要给这个filter添加入口函数了。 Filter是个基于DLL的com组件,所以一般的Filter都要实现下面几个入口函数 首先定义导出函数 要导出这些函数有两种方法,一是在定义函数时使用导出关键字_declspec(dllexport),另外一种方法是在创建DLL文件时使用模块定义文件.Def。使用导出函数关键字_declspec(dllexport)创建MyDll.dll就是在 .h文件中定义定义函数如下: 为了用.def文件创建DLL,往该工程中加入一个文本文件,命名为MyDll.def,再在该文件中加入如下代码: LIBRARY MyFilter.ax EXPORTS DllMain PRIVATE DllGetClassObject PRIVATE DllCanUnloadNow PRIVATE DllRegisterServer PRIVATE DllUnregisterServer PRIVATE 其中LIBRARY语句说明该def文件是属于相应DLL的,EXPORTS语句下列出要导出的函数名称。我们可以在.def文件中的导出函数后加@n,如Max@1,Min@2,表示要导出的函数顺序号,在进行显式连时可以用到它。该DLL编译成功后,打开工程中的Debug目录,同样也会看到MyDll.dll和MyDll.lib文件。 然后要定义这些函数的实现了,其实这些工作dshow的基类里都已经替我们做好了,我们所要做的就拿来用就是了,最重要的三个函数的实现一般如下

DirectX+9.0b+sdk和OpenCV_1.0和VC6.0配置

OpenCV环境配置步骤 首先声明:我是在WindowsXP下,使用VC++6.0 + sp6编译器,其他的版本我没有试过。 安装DirectX 9.0b sdk和OpenCV_1.0,这是我的搭配,实践过肯定可以说没问题,以后OpenCV肯定会再更新,届时有什么注意的再说。安装最好选择默认的安装目录(另选目录的话环境变量和别人的不一样,工程拷贝给别人的话可能需要调整),directX sdk要带Sample一起安装,因为其中的一些文件在配置OpenCV的时候要用到。 1、安装directX sdk。 2、进入C:\DXSDK\Samples\C++\DirectShow\BaseClasses目录,把这个工程在Debug和Release下编译后,将生成的STRMBASE.lib和strmbasd.lib复制到C:\DXSDK\Lib下面。 1、安装OpenCV后系统变量一般会自动设置,不过还是检查一下,没有的话就要在操作系统环境变量path下添加 C:\Program files\OpenCV\bin。加入后需要注销当前Windows用户(或重启)后重新登陆才生效。(可以在任务管理器里重启explorer.exe) 2、只要在cvaux\include文件夹下的cvaux.h文件,在文件中搜到foreground_regions所在的行,将 CvMemStorage* storage; /*storage for 揻oreground_regions?/ \ CvSeq* foreground_regions /*foreground object contours*/ 中的?改为*就可以了 3、到OpenCV安装目录\_make下找到opencv.dsw并打开 菜单Tools->Options->Directories 选择Library files,在下方填入路径: C:\Program Files\DXSDK\Lib 选择include files,在下方填入路径: C:\Program Files\DXSDK\Include C:\PROGRAM FILES\DXSDK\SAMPLES\C++\DIRECTSHOW\BASECLASSES 选择source files,在下方填入路径: 然后在Debug和Release下全部编译,选择build-> batch build. 在OpenCV/Lib生成所有库文件。 1、配置VC的环境全局设置 菜单Tools->Options->Directories 选择Library files,在下方填入路径: C:\Program Files\OpenCV\lib 选择include files,在下方填入路径: C:\Program Files\OpenCV\cxcore\include C:\Program Files\OpenCV\cv\include C:\Program Files\OpenCV\cvaux\include C:\Program Files\OpenCV\ml\include C:\Program Files\OpenCV\otherlibs\highgui C:\Program Files\OpenCV\otherlibs\cvcam\include 选择source files,在下方填入路径: C:\Program Files\OpenCV\cv\src C:\Program Files\OpenCV\cxcore\src C:\Program Files\OpenCV\cvaux\src C:\Program Files\OpenCV\otherlibs\highgui C:\Program Files\OpenCV\otherlibs\cvcam\src\windows 2、项目设置

实现DirectShow技术开发准备

C#实现DirectShow技术开发准备 时间:2009-10-21 23:45 点击:73次字体:[大中小] DirectShow组件在“C:WINDOWSsystem32”目录下的Quartz.dll动态库中,要使C#代码引用COM对象和接口,必须将COM类型库转换为.NET框架元数据,从而有效地创建一个可以从任何托管语言调用的托管包装。在转换过程中需要使用FrameWork SDK自带的TlbImp命令工具,该命令工具在“D:Program FilesMicrosoft Visual Studio 8SDKv2.0BinTlbImp.exe”目录下(取决于Visual Studio 2005的安装路径)。该命令的使用方法为: TlbImp C:WINDOWSsystem32quartz.dll out:C:WINDOWSsystem32quartzDriectShow.dll 在DOS命令下执行转换成功。 转换完成后需在应用程序引用quartzDriectShow,引用quartzDriectShow.dll组件步骤如下: (1)在Visual Studio 2005开发环境中,选择菜单“项目”/“添加引用”命令,弹出“添加引用”对话框。 (2)选择“浏览”选项卡,通过浏览找到引用quartzDriectShow.dll所在的位置,并引用到程序中来。 (3)最后引入using quartzDriectShow,在程序中可以开发相关多媒体程序了。 开发人员还可以通过编写自己的过滤器扩展DirectShow多媒体支持。下面是DirectShow组件的接口。 l IFilterGraph:过滤通道接口。 l IFilterGraph2:增强的IfilterGraph。 l IGraphBuilder:最为重用的COM接口,用于手动或者自动构造过滤通道Filter Graph Manager。 l IMediaControl:用来控制流媒体(如流的启动和停止暂停等)播放控制接口。 l IMediaEvent:播放事件接口,该接口在FilterGraph发生一些事件时用来创建事件的标志信息并传送给应用程序。 l IMediaEventEx:扩展播放事件窗口。 l IMediaPosition:播放的位置和速度控制接口(控制播放放置只能为设置时间控制方式)。 l IMediaSeeking:另一个播放的位置和播放速度控制接口,在位置选择方面功能较强,设置播放格式。常用的控制播放方式有:TIME_FORMAT_MEDIA_TIME单位100纳秒;TIME_FORMAT_FRAME按帧播放。 l IBasicAudio:声音控制接口。

三维重建模型内窥镜图像综合分析软件产品技术要求

三维重建模型/内窥镜图像综合分析软件产品技术要求 结构组成:产品为单机架构;版本号:V1.0; 本软件以光盘形式交付(光盘包括软件安装包、产品说明书); 软件主要由模型导入模块、患者信息查看模块、器官分类模块、姿态控制模块、摄录模块、操作教程模块组成。 适用范围:适用于符合DICOM标准的CT图像以.rx3d格式存储的三维模型数据和内窥镜影像的导入、显示、叠加查看的操作。 1.1 软件型号规格:RXFQJMR-I 1.2 发布版本 软件发布版本:V1.0 1.3 版本命名规则 软件的完整版本命名由四部分组成,完整版本型号:VX.Y.Z.B ,分类描述如下: 字母V为版本Version的缩写; * X:主版本号,也是发布版本号,表示重大增强类软件更新,初始值为1,当软件进行了重大增强类软件更新,该号码加1; * Y:子版本号,表示轻微增强类软件更新,初始值为0,当软件进行了轻微增强类软件更新,该号码加1; * Z:修正版本号,表示纠正类软件更新,初始值为0,当软件进行了纠正类软件更新,该号码加1; * B:构建号,表示软件编译生成一个工作版本,符合软件更新的定义,初始值为0,当软件进行了构建更新,该号码加1。 2.1 通用要求 2.1.1 处理对象 软件针对腹腔镜影像、软件定义的.rx3d格式的三维数据进行处理。 2.1.2 最大并发数 软件运行的网络环境为单机环境,支持读取影像数据的最大用户数为1。 2.1.3 数据接口 软件通过高清数字视频信号DVI、SDI、VGA接口,与医疗设备进行影像传输,支持模拟视频信号接口。

2.1.4特定软硬件 特定硬件:广播级视频采集卡,支持SDI、VGA、DVI接口,对于非DICOM标准的视频输出的医疗设备,选用支持DirectShow的视频采集卡。 2.1.5 临床功能 登录界面功能: 1)显示登录用户名,密码。 2)密码隐藏功能,点击输入框后面显示按钮可查看登陆密码。 3)点击登录或按键盘Enter键,均可登录。 操作界面功能: 1)文件导入模块:在软件菜单栏点击模型导入按钮,在软件右侧功能栏即显示患者三维模型信息的导入按钮列表。点击三维模型信息按钮可导入相应的三维模型。 2)患者信息录入模块:在软件菜单栏点击患者信息按钮,在软件右侧功能栏即显示三维模型中已存的患者信息(包括姓名、性别、入院编号、主治医师、病例诊断和手术类型),亦可在此对患者信息进行修改或重新录入。 3)三维模型器官分类模块:在软件菜单栏点击器官分类按钮,在软件右侧功能栏即显示器官分类。在此模块中,亦可通过点击代表各器官、组织的各色按钮来控制三维模型各器官、组织的显示或隐藏,以及拖动滑动条调整各器官、组织的透明度。 4)三维模型姿态调整模块:在软件菜单栏点击姿态调整按钮,在软件右侧功能栏即显示三维模型位置操作按钮,含上、下、左、右移动4个按键,远、近移动2个按键和三个可控制X/Y/Z轴的滑动按钮。在此模块可控制三维模型的姿态变换。 5)摄录模块:在软件的菜单栏点击摄录按钮,在软件右侧功能栏即显示录像和截屏按钮,点击录像按钮可录制手术的操作过程,点击截屏按钮可随时截屏,为后期的视频教学保存相关资料。 6)软件使用帮助模块:在软件的菜单栏点击软件使用帮助按钮,在右侧功能栏即显示鼠标和键盘操作的示意图,在主窗口显示操作视频,可观看学习软件快速上手视频。

基于DirectShow视频及图片捕获软件的开发

基于DirectShow视频及图片捕获软件的开发 我们知道目前很多工业相机的图像数据采集都是基于DirectShow的,常见的有映美精等。DirectShow是微软公司提供的一套在Windows平台上进行流媒体处理的开发包,与DirectX开发包一起发布。DirectShow为多媒体流的捕捉和回放提供了强有力的支持。运用DirectShow,我们可以很方便地从支持WDM驱动模型的采集卡上捕获数据,并且进行相应的后期处理乃至存储到文件中。它广泛地支持各种媒体格式,包括Asf、Mpeg、Avi、Dv、Mp3、Wave等等,使得多媒体数据的回放变得轻而易举。另外,DirectShow还集成了DirectX其它部分(比如DirectDraw、DirectSound)的技术,直接支持DVD的播放,视频的非线性编辑,以及与数字摄像机的数据交换。更值得一提的是,DirectShow提供的是一种开放式的开发环境,我们可以根据自己的需要定制自己的组件。 笔者使用visual studio 2005 来开发了基于DirectShow的视频捕获软件,并用开发的软件对映美精相机进行了测试。本软件不但可以实现对相机的视频捕获,而且还可以抓取图像帧。软件运行时自动搜索所连接的相机,预览后可以对相机参数进行设置。下面是软件的主界面。 预览视频后可以对视频格式和图像参数进行设置。开始预览时,捕获的视频是黑白的,我们将颜色空间设置为UYVY即可捕获彩色视频。

下面是捕获的一帧图像,图像质量虽然没有映美精自带的软件效果好,但已经实现了所需各项基本功能,接下来的工作将会进一步提高软件性能。 另外我们还可以捕获视频,点击“捕获视频”按钮,输入要保持的文件名,注意要以.avi后缀结尾,点确定就开始捕获视频。 从我们开发的软件可以看到,映美精的相机能够很好的支持DirectShow的驱动,我们的软件对映美精相机的识别是如此的容易。接下来我们将继续开发基于其它驱动的图像捕获软件,为最终实现在一个软件中识别各种相机而努力。我们将逐步开放我们的源代码,以便更多的同行一起来探讨相机的图像采集技术。 下面是详细的软件开发过程。 一、安装DirectShow和visual studio 2005 首先我们安装DirectShow SDK,它有许多版本,作者使用的是2003年发布的dx90bsdk.exe,安装在D盘的DXSDK下。软件下载地址为 https://www.360docs.net/doc/0b11781647.html,/download/b/6/a/b6ab32f3-39e8-4096-9445-d38e6675de85/dx90bsdk.exe。 然后安装好visual studio 2005。安装完以后我们将进行开发环境的配置。 二、开发环境配置

基于DirectShow视频及图片捕获软件的开发

我们知道目前很多工业相机的图像数据采集都是基于DirectShow的,常见的有映美精等。DirectShow是微软公司提供的一套在Windows平台上进行流媒体处理的开发包,与DirectX开发包一起发布。DirectShow为多媒体流的捕捉和回放提供了强有力的支持。运用DirectShow,我们可以很方便地从支持WDM驱动模型的采集卡上捕获数据,并且进行相应的后期处理乃至存储到文件中。它广泛地支持各种媒体格式,包括Asf、Mpeg、Avi、Dv、Mp3、Wave等等,使得多媒体数据的回放变得轻而易举。另外,DirectShow还集成了DirectX其它部分(比如DirectDraw、DirectSound)的技术,直接支持DVD的播放,视频的非线性编辑,以及与数字摄像机的数据交换。更值得一提的是,DirectShow提供的是一种开放式的开发环境,我们可以根据自己的需要定制自己的组件。 笔者使用visual studio 2005 来开发了基于DirectShow的视频捕获软件,并用开发的软件对映美精相机进行了测试。本软件不但可以实现对相机的视频捕获,而且还可以抓取图像帧。软件运行时自动搜索所连接的相机,预览后可以对相机参数进行设置。下面是软件的主界面。 预览视频后可以对视频格式和图像参数进行设置。开始预览时,捕获的视频是黑白的,我们将颜色空间设置为UYVY即可捕获彩色视频。 下面是捕获的一帧图像,图像质量虽然没有映美精自带的软件效果好,但已经实现了所需各项基本功能,接下来的工作将会进一步提高软件性能。 另外我们还可以捕获视频,点击“捕获视频”按钮,输入要保持的文件名,注意要以.avi后缀结尾,点确定就开始捕获视频。 从我们开发的软件可以看到,映美精的相机能够很好的支持DirectShow的驱动,我们的软件对映美精相机的识别是如此的容易。接下来我们将继续开发基于其它驱动的图像捕获软件,为最终实现在一个软件中识别各种相机而努力。我们将逐步开放我们的源代码,以便更多的同行一起来探讨相机的图像采集技术。 下面是详细的软件开发过程。 一、安装DirectShow和visual studio 2005 首先我们安装DirectShow SDK,它有许多版本,作者使用的是2003年发布的,安装在D盘的DXSDK下。软件下载地址为。 然后安装好visual studio 2005。安装完以后我们将进行开发环境的配置。 二、开发环境配置

中文版MeGUI的x264编码配置详细解读

本帖最后由宁战网络于2012-7-30 14:58 编辑 中文版MeGUI的x264编码配置详细解读 有人向往和膜拜科班出身的,这个我同意,但若无视艹根的存在,那么我很生气,往往是民间高手如林,自己何必妄自菲薄。一早我也说过不敢在压制的方向前进,那是因为这是个苦力不讨好的工作,有空我还不如多看看美女…… 只要关注,网络上的东西随处可以学习到,就对这个x264编码配置来说,网络上的资源多如脚毛。我嫉妒恨的是科班出身的总会先天就有优势,民间人士门要蛋定,不要比,不要计较,自己玩自己的,不用理正统不正统。我们的优势在于,科班人士再厉害他也没有拍电影也没做导演也没潜了哪个女优,嘎嘎,扯远了。 本文主要讲解x264编码的设置问题,是对应本人推荐的中文版MeGUI所做的一次详细配置论述,请用英文版的英雄路过不要取笑,也应该不要盲目的路过。我还是传统的图文方式来一起研究,当然我说的不一定对,那是因为网络上也是这么教的,可能一直都错着我也用错的来说,在这次解释中,我会用一些自己理解的来说话,也许更能让民间人士理解。 普及一下别的知识,在各大影视论坛基本不允许发布以RMVB格式的影片,你只要用上x264的编码就意味着你和RMVB说88了。民间人士普遍认为RMVB体积小画面清晰,但科班的人士会用理论的知识告诉你,同样的片源和同样的码率下,x264的mkv绝对比rmvb画质更好,文件更小。这是为什么?你要问这是为什么?那是因为x264的编码机制发挥了无法想像的作用,你只要实践了就会明白这是真的,打住不说了反正就像磁带被光盘取代,windows98被xp顶上。 科班厉害之处是懂得比较多,早前的x264.exe是命令参数实现压制的,DOS级的工具很怕黑的就不要尝试了。GUI,是图形界面操作,适合民间高手使用。曾被科班出身的嘲笑过,说使用MeGU压制的都是水货,嘎嘎,我笑笑不能回答。科班告诉我就这GUI不是只有Me 的,这下你明白没?像ripbot、staxrip 等都是GUI……行了行了,民间人士也不用惭愧,至少MeGUI能自动更新编码,还有汉化版可以用,batch的是高手,不和他们一起玩! 安装MeGUI简体中文版(请回顾本人以前的大作,这里略去几百万字……)仿图挂,可下载 中文版MeGUI的x264编码配置详细解读或是到QQ空间查阅软件下载转到论坛页面以前的中文版本MeGUI太不专业了,直到你碰到我这个民间人士才集合了比较强大的中文版MeGUI,不要怕出错,出错不是你的错。等弄得差不多了可以还原成英文版更新你的编码,更上一层楼,英盲也用英文版,没人敢笑你。 正题: 在MeGUI用内置工具AVS创建一个简单脚本(这里暂时不介绍AVS的各种滤镜使用参数),要求在点击DirectShowsource(手工、专业)能弹出视频预览窗就可以保存AVS了。此时内建的AVS会自动加载到MeGUI 主界面,进入本文主题压制参数x264配置。

DirectShow获取一张图片

DirectShow:图片的抓取 zz 在播放媒体文件的过程中,有一个很有用的功能,就是在当前播放的位置抓取图,实现这种图片抓取功能的方法很多,我们这里只介绍常用的两种。 第1种方法最简单,它使用1BasicVideo::GetCurrentImage接口方法,代码如下。 boolSnapshotBitmap(IBasicVideo*pBa8icVideo,ê? constchar*OutFile) if (pBasicVldeo) { long bitmapSize=0;ê? //首先获得图像大小 if(SUCCEEDED(pEasicVidee->GetcurrentImage(&bitmapSize,ê?0))) { bool pass=false;ê? //分¤?配?图a?像?帧?内¨2存?? unsignedchar*buffer=newunsignedchar[bitmapSize]; //获?取¨?图a?像?帧?数oy据Y if(SUCCEEDED(pBasicVideo->GetCurrentImage(&bitmapSize,(long*)buffer)) ) { BITMAPFILEHEADER hdr;ê? LPBITMAPINFOHEADER ipbi;ê? ipbi=(LPBITMAPINFOHEADER)buffer;ê? int nColors=1<biBitCount;ê? if(nColors>256) //always is”?àBM”?à hdr.bfType =((WORD)(‘?M’?¥<<8)|’?¥B’?¥);ê? hdr.ê?bfSize =bitmapSize+sizeof(hdr);ê? hdr.ê?bfReservedl =0; hdr.ê?bfReserved2 =0;ê? hdr.ê?bfOffBits =(DWORD) (sizeof(BITMAPFILEHEADER)+lpbi->biSize+nColors*sizeof(RGBQUAD)); CFilebitmapFile(outFile,ê?CFile:êo:êomodeReadWrite | CFile:êo:êomodeCreate | CFile:êo:êotypeBinary);ê? //写??入¨?位?图a?文?件t头a?¤ bitmapFile.ê?Write{&hdr,ê?sizeof 【?BITMApFILEHEADER)); //写??入¨?图a?像?帧?数oy据Y(包?¨1括¤?§BITMAPINFOHEADER信?息?é) bitmapFile.ê?Write(buffer,ê?bitmapSize);ê? bitmapFile.ê?Close();ê?

C++摄像头视频捕捉程序

Visual C++编程实现摄像头视频捕捉 摘要:本文主要讲述用Directshow进行视频捕捉(捕捉静态图像)的编程思路,并提供针对摄像头编程的一个视频捕捉类CcaptureVideo和一个示例。 前言 DirectShow是微软公司提供的一套在Windows平台上进行流媒体处理的开发包,与DirectX开发包一起发布。DirectShow为多媒体流的捕捉和回放提供了强有力的支持。用DirectShow开发应用程序,我们可以很方便地从支持WDM驱动模型的采集卡上捕获数据, 并且进行相应的后期处理乃至存储到文件中。 DirectShow是基于COM的,为了编写DirectShow应用程序,需要了解COM客户程序编写的基础知识。DirectShow提供了大量的接口,但在编程中发现还是不够方便,如果能构 建一个视频捕捉类把常用的一些动作封装起来,那么就更方便了。 编程思路 为了更加容易建立视频捕捉应用程序,DirectShow提供了一个叫做Capture Graph Builder的对象,Capture Graph Builder提供IcaptureGraphBuilder2接口,该接口可以建立和控制Capture Graph。 建立视频捕捉程序,必须首先获取并初始化IcaptureGraphBuilder2接口,然后选择一个适当的视频捕捉设备。选择好设备后,为该设备创建Capture filter,然后调用AddFilter 把Capture filter添加到Filter Graph。 如果仅仅希望用摄像头来进行实时监控的话,只需要在上面的基础上调用ICaptureGraphBuilder2::RenderStream就可以了: ICaptureGraphBuilder2 *pBuild; // Capture Graph Builder //省略初始化部分代码 IBaseFilter *pCap; // Video capture filter. //省略初始化和添加到Filter Graph部分代码 pBuild->RenderStream(&PIN_CATEGORY_PREVIEW, &MEDIATYPE_Video, pCap, NULL, NULL); DirectShow提供了一个捕捉静态图像的方法:使用Sample Grabber filter。依次按照以下三个步骤就可以了: 第一步, 定义一个类实现Sample Grabber的回调接口IsampleGrabberCB: class CSampleGrabberCB : public ISampleGrabberCB { //在后面提供的类中具体完成 }

利用DirectShow实现视频文件播放

DirectShow 媒体文件回放总结收藏 作者:Inkick 1.概述 DirectShow中媒体文件回放的过程也就是一个为媒体文件选择相应所需的Filter、构建Filter Graph、并对Filter Graph的状态进行维持、控制的过程。这里所说的媒体文件,不仅仅是指音频、视频文件,同时也包括bmp、jpeg、gif等图形图像格式以及midi等数字化音乐序列。 因此,使用DirectShow进行媒体文件的回放需要经过以下的步骤: 2.构建Filter Graph Filter Graph为Filter提供了一个容器,一个构建完整的Filter Graph也就是一个完整的Filter 连路,这个连路对于程序是透明的,可控制的。而对于每一个媒体文件来说,Filter Graph 与媒体文件存在着对应的关系。也就是说,一个Filter Graph只能实现一个(种)文件的回放。 在DirectShow中,Filter Graph是由接口对象IGraphBuilder实现的,我们可以调用Win32 API 函数CoCreateInstance()建立一个实体。Filter Graph实体建立之后并不具有任何的Filter,因此不具有任何实际用途。因此我们需要连接需要的Filter来完成FilterGraph的构建。 智能连接这个术语覆盖了一系列Filter Graph Manager用于构建所有或部份filter graph的算法。任何时候,当Filter Graph Manager需要添加filter来完成graph时,它大致做以下几件事情: 如果有一个filter存在于graph中,而且这个filter有至少一个没有连接的input pin,Filter Graph Manager试着去试用这个filter。 否则,Filter Graph Manager在已注册的filter中寻找连接时可以接受合适的媒体类型的filter。每一个filter都注册有一个Merit值,这个值用以标记哪个filter最容易被Filter Graph Manager 选中来完成graph。Filter Graph Manager按Merit值的顺序来选择filter,Merit值越大,被选中的机会越大。对于每种流类型(如音频、视频、MIDI),默认的renderer具有一个很高的Merit值,解码器同样是,专用filter具有低Merit值。 如果Filter Graph Manager选择的filter不合适,它会返回来尝试另外的filter组合。 我们有三种构建graph的途径: 1.filter graph manager构建整个graph 2.filter graph manager构建部分graph

DirectShow视频采集方案

2.3 DirectShow视频采集方案 流媒体处理技术以其复杂性和技术性一直受到人们的关注。随着网络技术的不断发展,流媒体在网络上得到了广泛地应用。如何能够简单、有效地进行流媒体处理,已成为一个焦点问题。为此,Microsoft推出了DirectShow,DirectShow 是Microsoft推出的基于Windows平台的流媒体处理开发包,它与DirectX一起发布。DirectShow对流媒体的捕捉、回放提供了强大的支持,使用它还可以在基于WDM驱动的采集卡上进行数据捕捉。本节将介绍有关DirectShow的相关知识。 2.3.1 DirectShow系统结构分析 DirectShow主要由过滤器(Filter Graph)图表构成。过滤图表中包含了各种Filter,这些Filter能够按一定顺序连接在一起,构成一条流水线。从功能的角度划分,Filter大体可以分为3类,Source Filters、Transform Filters和Rendering Filters。Source Filters主要负责获取数据,可以是一个文件、一个采集卡、声卡或数码相机等。Transform Filters负责数据的转换、传输。例如各种编码器、解码器等。Rendering Filters负责数据的最终去向,例如将数据传送到声卡、显卡或存储为文件。 在开发DirectShow应用程序时,通常需要设计一个过滤图表(Filter Graph),向过滤图表中添加相应的过滤器,最后连接过滤器的引脚就完成了功能的设计。例如,实现一个简单的视频预览功能,需要向过滤图表中添加一个视频捕捉源过滤器和一个Video Renderer过滤器,将视频捕捉源过滤器的输出引脚与Video Renderer过滤器的输入引脚相连就可以了。而在程序中只需要按照设计过滤图表的捕捉添加过滤器并连接过滤器引脚就可以了。在连接过滤器引脚时需要注意:只能是输出过滤器引脚与输入过滤器引脚相连,两个输出过滤器或两个输入过滤器引脚是不能相连的。 为了在程序中使用DirectShow,需要单独安装DirectX,当前DirectX的最新版本为9.0,即DirectX9.0,用户可以从Microsoft的官方网站上免费下载。在安装DirectX之后,程序中需要引用“dshow.h”头文件,并导入“Strmiids.lib”库文件和“quartz.lib”库文件才可以使用DirectShow。代码如下: #pragma comment (lib,"Strmiids") #pragma comment (lib,"quartz") #include 2.3.2 Filter图表设计 为了方便用户设计过滤图表,DirectX提供了一个Graph Edit工具。用户可以单击“开始”菜单下的“Microsoft DirectX 9 SDK\DirectX Utilities\Graph Edit”菜单项打开Graph Edit工具,如图2.10所示。

VS2010 C++学习(5):基于DirectShow视频预览录像程序

VS2010C++学习(5):基于DirectShow的视频 预览录像程序 学习VC++编制的基于DirectShow视频捕获程序,主要练习基于DirectShow程序的应用。 一、主要内容: 1.基于DirectShow视频预览; 2.基于DirectShow视频录像; 二、设计实现: (一)、安装DirectShow 首先我们安装DirectShow SDK,由于现在directShow没有和direcxtx一起发布,而是和windows sdk打包发布了,可以到官网下载最新的windows sdk开发包。一个可用的下载地址为https://www.360docs.net/doc/0b11781647.html,/07/hh/DXSDK_Feb10.rar 然后安装好windows SDK。安装完DirectShow SDK的目录为C:\Program Files\Microsoft SDKs\Windows\v7.1\Samples\multimedia\directshow。 (二)、开发环境配置 开发环境的配置主要有两个工作要做: 一是在使用Directshow SDK开发自己的程序时需要的DirectShow的有关静态库的配置, 二是visual C++开发环境的配置。 1)生成DirectShow SDK开发库

使用DirectShow SDK开发用户自己的程序需要几个静态链接库:quartz.lib、strmbasd.lib、STRMBASE.lib和strmiids.lib。中间两个lib需要用户自己编译生成,而其他两个微软已经提供。下表列出了使用DirectShow SDK开发程序所有要使用的库。 2)更改添加的include内容: C:\Program Files\Microsoft SDKs\Windows\v7.1\Samples\multimedia\directshow\baseclasses; C:\Program Files\Microsoft SDKs\Windows\v7.1\Include; 添加过程如下。选择“Ex005属性”→“选项”→“VC++目录”→“包含目录”,将上面的2个Include内容添加进去。 3)更改添加lib路径 要添加的lib内容: C:\Program Files\Microsoft SDKs\Windows\v7.1\Samples\multimedia\directshow\baseclasses\Debug; C:\Program Files\Microsoft SDKs\Windows\v7.1\Lib; 添加过程和Include内容相似,选择“Ex005属性”→“选项”→“VC++目录”→“库文件”选项。 4)添加链接库支持 C:\Program Files\Microsoft SDKs\Windows\v7.1\Samples\multimedia\directshow\baseclasses\Debug;

德国坦克声卡使用手册

德国坦克声卡使用手册(适用型号:剧场版SiXPack 5.1+)

前言 感谢您购买使用本公司的产品,为了让您更方便与正确的安装使用,本手册提供了开於硬件及驱动程式的安装详细解说。请您务必依照本手册之指示完成程序。倘若仍有其他疑问或安装使用上的困难,请来电或以电子邮件将您的问题告诉我们,我们一定全力为您服务。谢谢您!

主要功能 1 采用知名crystal cs4630高效能处理晶片 2 420 mips高速运算的独家(cclstn)音讯处理技术 3 符合ac 97 2.1、pci 2.1规范 4 完全支援windows 98se/me/2000/xp作业系统相容 5 完全硬体支援微软directsound、directsound3d、directlnput、以及声波合成技术 6 支援最新sensaura 3d定位音效技术,支援2/4声道 7 相容及支援eax 1.0、eax 2.0、a3d 1.0、i3dl2、macrofx、multidrive zoomfx、environmentfx、(dolby surround)多声道音效技术 8 支援同时64个硬体声波合成发声 9 内建8mb音色取样且与mpu—401/gm/yamaha xg midi规范相容 10 支援midi dls技术无限制软体音色声波合成支援 11 支援硬体wavetable音源子卡 12 支援对netmeeting网路语音视讯软体提供aec自动回授抑制功能 13 支援16bit全双工且与soundblasterpro完全相容 14 符合pci电源管理规范apm 1.2和acpi 1.0版 15 符合pc 98和pc 99规范要求 16 s/n讯噪比达90 db以上,音质传真自然 17 具备18bita/d类比/数位转换器 18 具备20bit d/a数位/类比转换器 19 支援利用directshow和directsound 3d输出播放 20 支援立体声,4声道和6声道喇叭模式输出 21 支援标准24bit s/pdif光纤数位输入(32/44.1/48khz)和输出(48kh pcm数位讯号,如ac—35.1讯号。 22 内建10段硬体可调式彩色eq等化器 23 耳机专用放大输出功能(与line in切换共用) 基本系统需求 1 pentium iii cpu或amd k6iii 500以上 2 pci插槽(相容pci 2.1规范) 3 64mb以上记忆体 4 显示支援16bit,800×600以上模式 5 80mb以上可用硬碟空间 6 cd—rom或dvd—rom光碟机 7 microsoftwindows@me、98se、2000、xp作业系统 8 directx 6.0以上、win 2000必须安装sp2以上、winxp必须安装spl 9 至少具备立体式耳机或喇叭(2/4/6声道)

directshow安装

Visual范例宝典中采用的DirectX SDK为Microsoft Show SDK(April 2006),Direct Show SDK为DirectX SDK Extras Frebruary 2005 在这里和大家分享下DirectShow9 DirectX9.0c已经将DShow分离出去了,下载时请选DirectX9.0b或者一下一个单独的,地址为: https://www.360docs.net/doc/0b11781647.html,/SDK/DX9SDK.rar 下面是配置过程: 1,使用VC向导生成一个具体项目,如Win32 Dynamic-Link; 2,包含头文件streams.h; 3,在VC的菜单中选择Project|Settings|C/C++,在弹出的对话框中的Category中选择Code generation,然后在Calling convention中选择_stdcall; 4,使用多线程语言运行时库,即在VC的菜单中选择Project|Settings|C/C++,在弹出的对话框中的Category中选择Code generation,然后在Use run-time library中,Debug版选择Debug Multithreaded,Release版选择Multithreaded。 5,配置必要的链接库文件,即在VC的菜单中选择Project|Settings|Link,在弹出的对话框中的Category 中选择General,然后在Object/library modules中输入如下代码: Debug版本strmbasd.lib, msvcrtd.lib, winmm.lib Release版本strmbase.lib, msvcrt.lib, winmm.lib 并且选中Ignore all default libraries。 DirectShow SDK建议,DirectShow应用程序应该至少连接库文件strmiids.lib和quartz.lib。前者定义了DirectShow标准的CLSID和IID,后者定义了导出函数AMGetErrorText(如果应用程序中没有使用到这个函数,也可以不连接这个库)。如果程序里包含了头文件streams.h,则一般库文件还要连接strmbasd.lib、uuid.lib、winmm.lib。 6,将DirectX SDK的Include和Lib目录配置到VC的系统目录中去,并且放在标准的VC目录之前,以保证编译器能够拿到最新版本的源文件。选择Tools|Options|Directories,在弹出的对话框中的Show directories for中选择Include files,配置如下(假设DirectX SDK安装在D:\\DXSDK目录下,VC安装在C:\\Program Files下): D:\\DXSDK\\Include D:\\DXSDK\\SAMPLES\\C++\\DIRECTSHOW\\BASECLASSES

相关文档
最新文档