DirectShow重要接口.doc_第1页
DirectShow重要接口.doc_第2页
DirectShow重要接口.doc_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

DirectShow重要接口DirectShow 的重要接口DirectShow采用了COM标准,所以很多重要的功能都是通过COM接口来完成。下面就列举一些重要的DirectShow的接口。(1) IGraphBuilder接口用于构造Filter Graph的接口,建立和管理一系列的Filter,过滤和处理源媒体流。(2) IMediaControl接口用于控制多媒体流在过滤器图表中的流动,如流的启动和停止。(3) IMediaEvent接口用于捕获播放过程中发生的事件,并通知应用程序,如EC_COMPLETE等。(4) IVideoWindow接口用于控制视频窗口的属性。(5) IMeadiaSeeking接口用于查找媒体的接口,定位流媒体,控制多媒体数据播放提供精确控制。(6) IBaseFilter接口从ImediaFilter接口继承,用来定义一个具体的过滤器指针,并对多媒体数据进行处理。(7) IPin接口用于管理两个过滤器之间的Pin,从而连接过滤器。(8) IsampleGrabberCB接口是Sample Grabber过滤器的一个接口,用于当流媒体数据通过过滤器时进行采样以获得帧图象。 用DirectShow来使用摄像头,一般要求摄像头的驱动是WDM格式的,当然,一些比较老的驱动格式DirectShow也可支持。在DirectShow中,有一个Sample Grabber过滤器,它是一个可以被插入流的过滤器,它有自己的缓冲,存放采样。我们就可以用它来从一个视频文件中简单的扑获一桢。DirectShow通过图形过滤管理器(Filter Graph Manager)来与上层应用程序和下层的驱动进行联系。DirectShow通过捕获过滤器(Capture Filter)来支持对摄像头的捕获,一个捕获过滤器有多个插口(pin),其中的预览(preview)插口可用来进行显示祯图象。 1、创建图形过滤管理器Filter Graph 如上面原理所述,首先要创建Filter Graph: CComPtr IGraphBuilder m_pGraph; hr=m_pGraph.CoCreateInstance( CLSID_FilterGraph ); 2、连接设备 还要创建系统枚举器组件对象: CComPtrICreateDevEnumpCreateDevEnum;pCreateDevEnum.CoCreateInstance( CLSID_SystemDeviceEnum ); 然后使用接口方法CreateClassEnumerator ()为指定的Filter注册类型目录创建一个枚举器,并获得IenumMoniker接口: CComPtr IEnumMoniker pEm; pCreateDevEnum-CreateClassEnumerator(CLSID_VideoInputDeviceCategory, &pEm, 0 ); 接着在调用BindToObject()以后,可以将设备标识生成一个DirectShow Filter,将其加到Filter Graph中就可以参与工作了。 CComPtr IMoniker pM; CComPtr IPropertyBag pBag; hr=pM-BindToStorage(0,0,ID_IPropertyBag, (void*) &pBag ); 3、创建Sample Grabber过滤器 CComPtr ISampleGrabber m_pGrabber hr=m_pGrabber.CoCreateInstance( CLSID_SampleGrabber ); 当创建好SampleGrabber以后,在Sample Grabber 过滤器连接到别的过滤器之前你必须配置它。然后查询IsampleGrabber接口,还要设置流媒体类型: m_pGrabber-SetMediaType(); 可以仅仅指定主媒体类型;或者主类型加子类型;或者主类型,子类型和类型格式。然后就把它加载到FilterGraph中去: m_pGraph-AddFilter(pGrabBase,Grabber ); 4、查找Filter Graph 的Pin并完成后续连接。 接下来就可以通过调用IGraphBuilder 的FindPin()接口来查找过滤管理器中的Pin接口,并通过ICaptureGraphBuilder2 中的接口RenderStream()来完成后续的连接。 hr=pCGB2-FindPin(pCap,PINDIR_OUTPUT,&PIN_CATEGORY_VIDEOPORT, NULL,FALSE,0,&pVPPin); hr=pCGB2-RenderStream(&PIN_CATEGORY_CAPTURE,&MEDIATYPE_Video, pCap,pGrabBase,pRenderer); 5、获取流媒体类型并运行 通过GetConnectedMediaType()获取连接流媒体的类型以后,我们可以通过IsampleGrabberCB类的接口BufferCB()来把视频的数据拷贝到自定义的缓冲区中

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论