1 Filter
source,transform,render,splitter,mux
2 Filter Graph Manage
状态,参考时钟,连接,事件
3 Media Type
AM_MEDIA_TYPE
类型,子类型,sample是大小否固定,sample大小,是否压缩,内存块格式,大小,指针
4 Sample
指向未发送内存的指针,时间戳,一些标志,媒体类型(一般类型不变,没有这个变量)
5 Allocator
两个Pin连接,必须有一个Pin提供Allocator。
流开始之前,Allocator会创建一个内存池,开始发送数据后,Source Filter将数据填充到内存池中一个空闲的buffer,然后传递给下面的Filter。
Source Filter并不是直接把buffer的指针传递下去,而是通过Sample,Allocator创建Sample来管理内存。
Allocator通过Sample的引用计数防止buffer冲突,当所有Filter都释放了对Sample的引用,Sample才返回内存池。
6 DirectShow提供硬件访问
DirectShow工作在UerMode Ring 3
硬件工作在KernelMode Ring0
VFM,WDM等