DirectShow SDK 学习笔记
学习笔记学习笔记
学习笔记
作者:智慧的鱼
编辑:中华视频网
中华视频网:http://www.chinavideo.org
佰锐科技:http://www.bairuitech.com
DirectShow SDK 学习笔记 作者:智慧的鱼 中华视频网 整理
- 2 -
目
目目
目 录
录录
录
绪言
绪言绪言
绪言.............................................................................................................................................................6
1 ABOUT DIRECTSHOW 基础
基础基础
基础 ..............................................................................................................7
1.1
设置
DSHOW
的开发环境 .................................................................................................................7
1.2
先演示一下
DSHOW
使用的一个例子 .............................................................................................8
1.3
D
IRECSHOW
概述...............................................................................................................................8
1.4
F
ILTER
G
RAPH
及其组成 ...................................................................................................................8
1.5 构建一个 F
ILTER
G
RAPH
图 ............................................................................................................15
1.6 数据流在 F
ILTER
G
RAPH
里的流动(D
ATA
F
LOW
) .....................................................................15
1.7 事件通知机制(E
VENT
N
OTIFICATION
).......................................................................................19
1.8D
IRECTSHOW
中的时钟(T
IME AND
C
LOCKS IN
D
SHOW
).............................................................21
1.9 动态删除或增加 F
ILTER
(D
YNAMIC
G
RAPH
B
UILDING
).............................................................23
1.10
P
LUG
-
IN
D
ISTRIBUTORS
.................................................................................................................25
2 DIRECTSHOW 的应用
的应用的应用
的应用(
((
(USING DIRECTSHOW)
))
) ......................................................................25
2.1 在 G
RAPH
E
DIT
中模拟构建 G
RAPH
(S
IMULATING
G
RAPH
B
UILDING
) .......................................25
2.2D
IRECTSHOW
基本应用(B
ASIC
T
ASKS
).......................................................................................33
2.2.1
视频提交(
Video Rendering
)
...............................................................................................33
2.2.2
如何处理事件通知(
Event Notification
)
............................................................................36
2.2.3
如何枚举系统的设备和过虑器
..............................................................................................37
2.2.4
如何枚举
Graph
图中的对象(
filter
,
pin
)
.........................................................................41
2.2.5
构建
Graph
图常用技术
.........................................................................................................43
2.2.5.1
如何根据
CLSID
向
graph
中添加
filter..............................................................................43
2.2.5.2
如何查找
filter
空闲的
pin
。
...............................................................................................44
2.2.5.3
如何连接两个
Filter.............................................................................................................45
2.2.5.4
如何获得
filter
或者
pin
的接口指针
..................................................................................47
2.2.5.5
如何查找和某个
filter
的上下相连的
filter.........................................................................49
2.2.5.6
如何删除
graph
中的所有
filter...........................................................................................52
2.2.5.7
如何利用
Capture Graph Builder
构建
Graph
图表
...........................................................53
2.2.6 Seeking Filter graph.................................................................................................................55
2.2.7
如何设置
Graph
时钟(
Setting Graph Clock
)
....................................................................57
2.2.8
在
Dshow
中如何调试
.............................................................................................................58
2.3 音频的捕捉.....................................................................................................................................58
2.4 视频的捕捉(V
IDEO
C
APTURE
)...................................................................................................59
2.4.1
关于视频捕捉(
About Video Capture in Dshow
)
.................................................................59
2.4.2
选择一个视频捕捉设备(
Select capture device
)
................................................................63
2.4.3
预览视频(
Previewing Video
)
..............................................................................................65
2.4.4
如何捕捉视频流并保存到文件(
Capture video to File
)
....................................................65
2.4.5
如何控制
Capture Graph
(
Controlling Capture Graph
)
.....................................................69
2.4.6
视频捕捉的任务(
Video Capture Tasks
)
.............................................................................71
2.4.6.1
如何配置一个视频捕捉设备
...............................................................................................71
2.4.6.2Working With Crossbars.........................................................................................................74
DirectShow SDK 学习笔记 作者:智慧的鱼 中华视频网 整理
- 3 -
2.4.6.3
将设备从系统中移走时的事件通知(
Device remove Notify
)
.........................................74
2.4.6.4
从静止图像
pin
中捕捉图片
................................................................................................75
2.4.7
数字视频
DV
(
Digital Video in Direcshow
)
........................................................................78
2.4.7.1
关于
Directshow
中的
DV
应用
...........................................................................................78
2.4.7.2
如何将
DV
捕捉到一个文件中
............................................................................................78
2.4.7.3
如何将文件中的
DV
读入到盘中
........................................................................................78
2.4.7.4 DVINFO Field Settings in the MSDV Driver........................................................................78
2.4.8
如何控制
DV
便携式摄像机(
Controlling a DV Camcorder
)
...........................................78
2.4.9
模拟电视的视频捕捉(
Analog Television
)
..........................................................................78
2.4.10
视频捕捉的高级话题
............................................................................................................78
2.4.10.1
处理视频重画事件
.............................................................................................................78
2.4.10.2
如何确定
pin
的种类(
Pin Categories
)
..........................................................................79
2.4.10.3
如何使用一个
SmartTee Filer............................................................................................81
2.4.10.4
如何使用一个重叠混合器(
Overlay Mixer in Video Capture
)
......................................81
2.4.10.5Video Port Pins.....................................................................................................................81
2.4.10.6VideoInfo2 Format Type.......................................................................................................81
2.4.10.7
手动添加
WDM
类驱动
filter.............................................................................................81
2.4.10.8
如何创建内核
filter ............................................................................................................83
2.5D
IRECTSHOW
E
DITING
S
ERVICES
......................................................................................................85
2.6DVD 应用(DVD
A
PPLICATION
) ..................................................................................................85
2.7
MPEP_2 支持..................................................................................................................................85
2.8W
INDOWS
M
EDIA
应用.....................................................................................................................85
2.9
TV 应用...........................................................................................................................................85
2.10 使用视频混合 R
ENDER
.................................................................................................................86
2.11
U
SING THE
S
TREAM
B
UFFER
E
NGINE
.............................................................................................86
2.12 开发自己的 F
ILTER
.......................................................................................................................86
1
如何开发自己的
filter..................................................................................................................86
2filter
的连接
....................................................................................................................................95
3filter
间的数据流动
........................................................................................................................98
4pin
连接时数据格式的动态改变
.................................................................................................101
4 Threads and Critical Sections ......................................................................................................101
5
质量控制管理
..............................................................................................................................107
6dshow
和
com................................................................................................................................107
7
如何写
Transform Filter ..............................................................................................................120
8
如何写视频播放过滤器
Video Renderer Filter ..........................................................................131
9
如何写捕捉
filter
(源)
.............................................................................................................137
10
创建
filter
属性页
.....................................................................................................................141
11 capture and compression formats...............................................................................................148
12Graph
如何定位
filter
的位置并加载
........................................................................................150
2.13
E
NCODER AND
D
ECODER
开发.....................................................................................................150
3DIRECTSHOW 的基类学习
的基类学习的基类学习
的基类学习 ..............................................................................................................150
3.1
D
SHOW
的基类简介 ......................................................................................................................150
3.2
F
ILTER
和
PIN
的基类 ....................................................................................................................153
3.2.1CBaseFilter .............................................................................................................................153
DirectShow SDK 学习笔记 作者:智慧的鱼 中华视频网 整理
- 4 -
3.2.2CBasePin.................................................................................................................................159
3.2.3CBaseInputPin ........................................................................................................................168
3.2.4CBaseOutputPin......................................................................................................................172
3.3 几种常用 F
ILTER
的基类 ..............................................................................................................176
3.3.1CSource...................................................................................................................................176
3.3.2CSourceStream........................................................................................................................178
3.3.3CTransformFilter ....................................................................................................................182
3.3.4CTransformInputPin................................................................................................................188
3.3.5CTransformOutputPin.............................................................................................................189
3.3.6CTransInPlaceFilter................................................................................................................191
3.3.7 CTransInPlaceInputPin..........................................................................................................193
3.3.8CTransInPlaceOutputPin........................................................................................................193
3.3.4CVideoTransformFilter ...........................................................................................................193
3.3.9CBaseRenderer........................................................................................................................194
3.3.10CRendererInputPin ...............................................................................................................205
3.3.11CBaseVideoRenderer.............................................................................................................206
3.3.12 CBaseAllocator ....................................................................................................................210
3.3.13 CMediaSample.....................................................................................................................212
3.4F
ILTER
和
PIN
经常用到的类 .........................................................................................................214
3.4.1CPullPin..................................................................................................................................214
3.4.2COutputQueue.........................................................................................................................216
3.4.3CSourceSeeking.......................................................................................................................216
3.4.4CEnumPins..............................................................................................................................216
3.4.5CEnumMediaTypes..................................................................................................................216
3.4.6CMemAllocator.......................................................................................................................216
3.4.7CMediaSample ........................................................................................................................216
3.4.8CBaseReferenceClock .............................................................................................................219
3.4.9CMediaType ............................................................................................................................219
3.5 几个比较重要的类 .......................................................................................................................219
4DIRECSHOW 提供的接口学习
提供的接口学习提供的接口学习
提供的接口学习.........................................................................................................220
5DIRECTSHOW TUTORIALS...........................................................................................................220
5.1I
MPLEMENTING A
S
EEK
B
AR
............................................................................................................220
5.2D
ISPLAYING A
F
ILTER
'
S
P
ROPERTY
P
AGES
.......................................................................................220
5.3G
RABBING A
P
OSTER
F
RAME
...........................................................................................................220
5.4U
SING THE
S
AMPLE
G
RABBER
........................................................................................................220
5.5R
ECOMPRESSING AN
AVI
F
ILE
.........................................................................................................220
6C++在电视开发中的应用
在电视开发中的应用在电视开发中的应用
在电视开发中的应用....................................................................................................................220
6.1TV
R
ATINGS
R
EFERENCE
................................................................................................................220
6.2V
IDEO
C
ONTROL
C++
R
EFERENCE
..................................................................................................220
6.3M
ICROSOFT
U
NIFIED
T
UNING
M
ODEL
C++
R
EFERENCE
.................................................................220
6.4T
RANSPORT
I
NFORMATION
I
NTERFACES
..........................................................................................220
6.5BDA
F
ILTER
I
NTERFACES
................................................................................................................220
DirectShow SDK 学习笔记 作者:智慧的鱼 中华视频网 整理
- 5 -
6.6MPEG-2
S
ECTIONS AND
T
ABLES
F
ILTER
R
EFERENCE
.....................................................................220
7DIRECSHOW 提供的
提供的提供的
提供的 FILTER .........................................................................................................220