关于DirectShow中Sample Grabber的范围

时间:2011-06-22 08:01:52

标签: directshow webcam

我的网络摄像头实时捕捉应用程序有2个相关问题。

  1. 网络摄像头以不同的格式捕获数据,如YUY2,RGB24,I420,MJPG等。无论输入格式如何,我都需要将捕获的数据转换为I420。因此,我需要知道Direct Show内置转换滤波器的当前范围/功能,例如Sample Grabber。 Sample Grabber是否至少支持这些转换?或者我是否必须编写自己的自定义过滤器?

  2. 许多网络摄像头似乎都有多种格式输出。当我将介质类型设置为I420的Sample Grabber连接时,Sample Grabber过滤器将与Web摄像头驱动程序通信,以确保Webcam的数据输出为I420(如果Web摄像头有支持)。

    < / LI>

    我已经发布了与上述相关的问题,但无法完全回答。请帮忙。

2 个答案:

答案 0 :(得分:1)

Sample Grabber不会更改数据的媒体类型,但如果在连接之前设置首选媒体类型,则需要输入流为该媒体类型。只需使用RenderStream(智能连接,而不是直接连接),DirectShow将插入所需的解码器或变换器(如果它们存在)。

答案 1 :(得分:0)

看一下directx sdk中的RGBFilters示例。例如,其中一个过滤器是TransNull24。该过滤器将未经修改地传递所有样本,但只能在输入为MEDIASUBTYPE_RGB24时进行连接。您所做的是将网络摄像头过滤器连接到TransNull24,将TransNull24连接到samplegrabber。如果网络摄像头能够输出RGB24,将使用它。否则,将在网络摄像头和TransNull24之间自动添加变换过滤器。现在,您只会在samplegrabber中收到RGB24,即使网络摄像头不直接支持RGB24也是如此。

当然你不需要RGB24,但你可以简单地修改示例过滤器并创建自己的TransNullI420过滤器。我不确定标准色彩空间转换过滤器是否可以输出I420,因此您可能需要安装ffdshow,将其配置为转换未压缩视频。