DirectShow是Windows平台下的多媒体处理框架,早期(DirectX7.0、DirectX8.0)属于DirectX的范畴,在目前(DirectX9.0)微软已经将其放在了Windows platform SDK中,所以,你现在在最新版本的DirectX SDK目录中是找不到有关DirectShow的身影的。
中华视频网(www.chinavideo.org )一直致力于语音视频技术的研究和推广,早期也收编过多篇“智慧的鱼”的文章,本册《DirectShow SDK学习笔记》是一篇比较全面介绍DirectShow的资料,特收集整理成册,以供后来者学习。
“个人感觉开发自己的Filter还是要对dshow的基类要熟悉一些。所以才想起了要翻译这些东西,希望在9月底前完成这些东西。我不想它的句子有多么流畅,语法的错误有多少,我只希望能看明白就可以了!” ——智慧的鱼 由于某些原因,SDK中的有些章节没有翻译,如果哪位读者补充以后,可以将补充后的文档发给智慧的鱼或是中华视频网(vvoucom@gmail.com ),我们再整理更完整的版本并发布,互相学习的过程就是提高的过程。
中华视频网:www.chinavideo.org Ffmpeg工程组:www.ffmpeg.com.cn 佰锐科技:www.bairuitech.com
目录:
绪言 6 1 ABOUT DIRECTSHOW基础 7 1.1 设置DSHOW的开发环境 7 1.2 先演示一下DSHOW使用的一个例子 8 1.3 DIRECSHOW概述 8 1.4 FILTER GRAPH及其组成 8 1.5构建一个FILTER GRAPH图 15 1.6数据流在FILTER GRAPH里的流动(DATA FLOW) 15 1.7事件通知机制(EVENT NOTIFICATION) 19 1.8DIRECTSHOW中的时钟(TIME AND CLOCKS IN DSHOW) 21 1.9动态删除或增加FILTER(DYNAMIC GRAPH BUILDING) 23 1.10 PLUG-IN DISTRIBUTORS 25 2 DIRECTSHOW的应用(USING DIRECTSHOW) 25 2.1在GRAPHEDIT中模拟构建GRAPH(SIMULATING GRAPH BUILDING) 25 2.2DIRECTSHOW基本应用(BASIC TASKS) 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视频的捕捉(VIDEO CAPTURE) 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 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.5DIRECTSHOW EDITING SERVICES 85 2.6DVD应用(DVD APPLICATION) 85 2.7 MPEP_2支持 85 2.8WINDOWS MEDIA应用 85 2.9 TV应用 85 2.10使用视频混合RENDER 86 2.11 USING THE STREAM BUFFER ENGINE 86 2.12开发自己的FILTER 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 ENCODER AND DECODER开发 150 3DIRECTSHOW的基类学习 150 3.1 DSHOW的基类简介 150 3.2 FILTER和PIN的基类 153 3.2.1CBaseFilter 153 3.2.2CBasePin 159 3.2.3CBaseInputPin 168 3.2.4CBaseOutputPin 172 3.3几种常用FILTER的基类 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.4FILTER和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.1IMPLEMENTING A SEEK BAR 220 5.2DISPLAYING A FILTER'S PROPERTY PAGES 220 5.3GRABBING A POSTER FRAME 220 5.4USING THE SAMPLE GRABBER 220 5.5RECOMPRESSING AN AVI FILE 220 6C++在电视开发中的应用 220 6.1TV RATINGS REFERENCE 220 6.2VIDEO CONTROL C++ REFERENCE 220 6.3MICROSOFT UNIFIED TUNING MODEL C++ REFERENCE 220 6.4TRANSPORT INFORMATION INTERFACES 220 6.5BDA FILTER INTERFACES 220 6.6MPEG-2 SECTIONS AND TABLES FILTER REFERENCE 220 7DIRECSHOW提供的FILTER 220
|