Direct Show基础

概述

Direct Show是微软提供的一个开发包,用于在windows上处理各种格式的媒体文件的回放、音频视频采集等高性能要求的多媒体应用,提供的一种解决方案。

DirectShow采用一种流水线技术,各个功能部件为filter,可以将各个filter想象成生产线上的工段,每个工段完成各自的任务,并串联成一条流水线。

filter主要分为3类:

1、source filters:负责获取数据,数据源可以是媒体文件、采集卡摄像机等。

2、Transform filters:负责数据的格式转换。如音频视频流分离,解码/编码。

3、rendering filters:负责数据的最终去向。如将数据送给显卡或声卡,并演示。或送入文件存储。

 

可以使用GraphEdit工具,打开一个媒体文件,就可以看到每个媒体文件所需要使用到的filter及线路走向。

 

COM基础

以下代码简单的描述了一个COM组件

class Interface

{

   public:

   virtual Method1(...)=0;

   virtual Method2(...)=0;

};

 

class Com : public Interface

{

   public:

   virtual Method1(...){...}

   virtual Method2(...){...}

}

其中,Interface类就是接口类,而Com类就代表了COM组件。

COM规范规定,任何组件或接口,都必须从IUnknown继承而来。IUnknown有三个重要函数:

1、QueryInterface:负责组件对象的接口查询

2、AddRef:增加引用计数

3、Release:减少引用计数

COM的引用计数与内核对象的计数机制类似,当计数器为0时,则组件对象就会调用delete this来销毁自己。

 

COM规范规定,每个组件,都必须实现一个与之对应的类工厂接口,IClassFactory.

IClassFactory继承于IUnknown,另定义了两个方法:

1、CreateInstance:创建与之对应的组件对象。

2、LockServer:Locks an object application open in memory.

 

filter是一种进程内组件。

 

CoCreateInstance://创建组件对象

1、CoGetClassObject获取类工厂指针

2、类工厂指针->CreateInstance创建组件对象

 

SDK源代码中,已经实现了filter的COM基本特性。

你可能感兴趣的:(windows,filter,application,delete,Class,interface)