`
gaofen100
  • 浏览: 1228148 次
文章分类
社区版块
存档分类
最新评论

DirectShow 视频捕获(2)

 
阅读更多

Capture Performance

原文:http://msdn.microsoft.com/en-us/library/aa452496.aspx

这部分描述一些使用directShow时主要影响捕获性能的因素。要看整体的DirctShow结构看View Capture章节。

你为设备组件选择的颜色空间对你设备的捕获性能有重要的影响。最主要考虑的因素是捕获的数据从一种颜色空间转换到另一种颜色空间穿过捕获图的次数。一般情况下,Capture Graph Builder发现两个相连的引脚之间的颜色空间不一样时会插入一个颜色空间转换过滤器。

要避免颜色空间转换,特别是当你使用一个不能实时的编码器。当你的编码器不能实时编码,Capture Graph Builder会插入一个缓冲过滤器到捕获图表中。为了能够流畅的预览,缓冲过滤器运行在BELOW_NORMAL优先级的线程中。这样减缓了捕捉过程,使得图表中的其他部分效率低下,例如颜色转换,整体消耗更大。

除了简单的增加捕获过程的计算负担,颜色空间转换过滤器的出现有两个而外的副作用。首先,它限制了 下游过滤器的输入格式 到 颜色空间转换的输入格式 的选择。例如,颜色空间转换过滤器不能处理YCbCr4:2:2平面格式到RGB16格式的转换。结果是YCbCr4:2:2平面颜色不能用来预览显示,因为预览显示必须能够用GDI渲染,因而必须转换成RGB格式。通过第三方的颜色转换过滤器能够解决这样的问题。

其次,颜色空间转换过滤器不能传递一个指向覆盖面的指针到摄像头驱动。颜色转换器内部保留这个指向覆盖面的指针,用传递指向系统内存的指针到摄像驱动代替。摄像驱动会用图像数据填充系统内存,颜色空间转换会拷贝这些数据到覆盖表面的缓冲区。这种设计对于控制驱动安全和支持不支持聚散DMA的硬件都有帮助。摄像驱动只会填充在初始化时注册的缓冲区。在初始化时,视频渲染器还不知道DirectShow并且没有创建DirectShow表面。

如果预览显示设备使用GDI渲染,那么3引脚的摄像设备应能能够使用RGB格式,而不要声明。如果你相同情境下使用两引脚的摄像设备,那么你必须确认编码器是否支持RGB颜色格式。如果你的编码器只支持YCbCr格式,那么你必须使用第三方颜色转换器。

如果显示预览显示设备使用DirectShow渲染RGB涂层,那么你必须明确的引入颜色 转换过滤器到捕获图中。Windows Mobile 5.0摄像应用不能处理这种情况。

静态图片捕获

使用windows Mobile 5.0 ,你可以使用影像下沉过滤器从视频流中捕获一个静态的图片(参考Image Sink Filter)。YCbCr格式比RGB格式更紧凑,因此在视频数据中更适合,但是在影像下沉过滤器不支持输入YCbCr格式。一种解决从YCbCr数据格式获取静态图片的方法是引入第三方颜色转换过滤到过滤图表中。如果你的硬件支持,更好性能的方法是通过硬件加速在显示设备上支持YCbCr数据格式。

为了在硬件上支持JPEG编码,摄像设备必须暴露MEDIASUBTYPE_IJPG媒体数据类型,这样驱动可以直接编码。驱动只要一次出入包含编码好的JPEG数据的缓冲区到捕获图表中,影像下沉过滤器就可以直接通过简单的I/O操作记录数据。

视频预览

有些时候摄像驱动的分辨率和预览显示的不匹配,所以视频渲染必须在预览 管道上执行缩放操作。最高效的解决方法是使用DirectDraw暴露的硬件内置的缩放设备。如果DirectDraw支持不能用,那么缩放操作可以通过GDi在软件层操作,但数据只有在RGB格式的情况下才能用。如果视频数据是YUV格式的,那么你必须在你的显示驱动中剔红自己的优化的缩放路由。

分享到:
评论

相关推荐

    通过DirectShow进行视频预览和捕获

    1. **捕获滤波器(Capture Filter)**:这是视频捕获的核心,它可以控制设备的捕获参数,并处理来自设备的数据。 2. **文件写入滤波器(File Writer Filter)**:将捕获的数据写入文件,如ASF Writer Filter用于创建...

    视频捕获源程序 directShow视频捕获

    这个压缩包中的"视频捕获源程序 directShow视频捕获"是一个基于DirectShow的示例程序,它提供了视频捕获的功能,可以帮助开发者深入理解如何利用DirectShow SDK来创建自己的视频捕获应用。 DirectShow主要由两部分...

    VC通过DirectShow进行视频预览和捕获

    对于视频捕获,你还需要配置捕获设备的属性,如分辨率、帧率等,然后使用Sample Grabber或Media Sample Grabber滤镜来截取视频帧。捕获的帧可以保存为文件,或者实时处理。 9. **错误处理**: 在开发过程中,必须...

    directshow 视频捕获例子

    这个压缩包中的内容是一个DirectShow视频捕获的例子,对于初学者或者开发者来说,这是一个非常实用的学习资源。下面将详细解析这个例子中的关键知识点。 1. **DirectShow概念与架构**: DirectShow是一个组件对象...

    利用VC++实现基于DirectShow的视频捕获.pdf

    2. **理解关键COM接口**:DirectShow通过一系列COM接口控制视频捕获过程。其中,IGraphBuilder用于创建过滤器图形,ICaptureGraphBuilder2用于与底层硬件驱动建立连接,而IVideoWindow和IMediaControl则分别管理视频...

    基于directshow的视频捕获

    基于directshow的视频捕获.pdf,视频捕获,过滤器

    基于DirectShow视频及图片捕获软件的开发

    ### 基于DirectShow视频及图片捕获软件的开发 #### 一、DirectShow概述 **DirectShow** 是微软公司推出的一个强大的流媒体处理框架,主要应用在Windows平台上。DirectShow不仅支持视频和音频的播放,也支持媒体...

    一个简单的基于DirectShow的视频捕获程序

    DirectShow是微软开发的一个强大的...这个简单的DirectShow视频捕获程序的实现,为初学者提供了理解多媒体处理和DirectShow框架的良好起点。通过深入学习和实践,开发者可以构建更复杂的应用,如视频录制、直播推流等。

    基于DirectShow的视频捕获

    #### 五、DirectShow视频捕获实现 在DirectShow中实现视频捕获主要涉及以下步骤: 1. **初始化**:创建过滤器图表管理器对象。 2. **添加过滤器**:将源过滤器(如视频捕获设备)和渲染过滤器添加到过滤器图表中。...

    DirectShow 开发视频捕获.rar

    本压缩包文件"DirectShow 开发视频捕获.rar"显然包含了关于如何使用DirectShow进行视频捕获的实例代码或教程。 在DirectShow中,视频捕获通常涉及以下核心概念和技术: 1. **过滤器(Filters)**:DirectShow的...

    DirectShow视频预览捕获

    这个程序示例是基于DirectShow的视频捕获和预览功能,非常适合初学者学习和理解DirectShow的工作原理。 在DirectShow中,视频捕获涉及到以下几个关键概念: 1. **Filter Graph**:Filter Graph是DirectShow的核心...

    F# + DirectShow.NET 捕获摄像头视频源码

    DirectShow.NET是一个开源项目,它为.NET Framework提供了对Microsoft DirectShow API的全面封装,允许开发者轻松地创建多媒体应用程序,如视频播放器、视频编辑工具以及我们的案例——摄像头视频捕获。 首先,让...

    DirectShow 开发视频捕获_Vc_

    2. **视频捕获流程**: - 视频捕获通常涉及到捕获设备(如摄像头)的初始化、选择合适的捕获格式、设置帧率和分辨率、以及将捕获的数据传输到内存或文件。 - 在DirectShow中,这个过程可以通过创建一个Graph...

    directshow实现视频捕获(源码)vs2005

    代码中,`CCaptureClass`是自定义的类,它封装了DirectShow视频捕获的核心功能。这个类的成员包括对滤波器链表的管理、捕获和预览视频的相关接口。例如,`EnumDevices`方法用于枚举可用的视频设备,`ConfigCameraPin...

    DirectShow视频音频捕捉

    在这个“DirectShow视频音频捕捉”的项目中,我们将深入探讨如何利用DirectShow来实现摄像头画面的捕获以及系统声音的捕获。 首先,`CaptionVideo.vcxproj`和`.vcxproj.user`是Visual Studio的项目文件,用于定义...

    DirectShow进行视频预览和捕获.rar

    DirectShow主要应用于Windows平台,它构建在COM(组件对象模型)之上,提供了丰富的API接口,能够实现高质量的媒体播放、视频捕获、视频编码和解码等多种功能。在视频预览和捕获方面,DirectShow提供了一整套的类和...

    Windows下通过DirectShow控制USB摄像头,捕获视频流

    在这个场景下,我们将使用"视频捕获"过滤器来获取摄像头的实时视频流。 要实现这个功能,你需要具备以下关键步骤: 1. **安装DirectX SDK**:如描述中所述,编译和运行相关的DirectShow程序之前,确保已安装了...

    DirectShow 视频捕获源码示例,C 技术实现.rar

    采用C 的DirectShow技术编写的视频捕获源码示例,测试电脑没有摄像头,可能程序还有些小错误,不过对于了解视频捕获原理及编写方法应该有帮助,有这方面需要的朋友可以下载参考一下。

    C# WinForm DirectShow视频采集及图片抓取实例DxSnap(绝对源码)

    1. **视频捕获设备选择**:项目首先需要识别并枚举系统中可用的视频捕获设备,如内置摄像头或外接USB摄像头。这可以通过`ICaptureGraphBuilder2`接口的`FindSourceByCategory`方法实现。 2. **过滤器图构建**:构建...

Global site tag (gtag.js) - Google Analytics