0

我创建了一个c++ dll ,它使用DirectShow API在面板句柄处显示相机实时流。我的相机是罗技 c920 网络摄像头。我的相机在第三个输出引脚上提供 H264 编解码器。

当我使用 graphEdit 时,如果我将Logitech Webcam 3rd output Pin连接到Video Mixing Render 9 1st input pin,它会自动在连接之间添加 DTV-DVD microsoft 解码器,如下所示:

Logitech HD Pro Webcam C920 [Capturer] => [VMR Input0] Video Mixing Renderer 9

(当连接成为)

Logitech HD Pro Webcam C920 [Capturer] => [video Input1] Microsoft DTV-DVD Video Decoder [video Output 1] => [VMR Input0] Video Mixing Renderer 9

质量非常好,我在活动电影窗口上的视频流速度很快。

这是它变得不正确的地方。在我的代码中,我已将捕获源的第 3 个引脚直接连接到 vmr7 输入引脚(未添加 dt-dvd 解码器)。我还使用 IAMStreamConfig 将视频设置设置为 1600x896 和 H264 Mediatype。

我在 msdn 上读到(如果我理解正确的话),directshow 会自动在两个连接的引脚之间放置必要的过滤器。它工作正常,但视频质量很糟糕。看起来有很多像素混合或损坏。我也没有任何证据表明添加了过滤器。是因为我没有以编程方式将解码器放在它们之间吗?如果可以的话,我该如何添加这个过滤器?

在此先感谢并为英语感到抱歉。

4

1 回答 1

1

问题在这里:

如果我将 Logitech Webcam 3rd output Pin 连接到 Video Mixing Render 9

相对

我已将捕获源的第 3 个引脚直接连接到 vmr7 输入引脚

VMR-9 与 VMR-7。前者由 Direct3D 表面支持,帧由硬件平滑缩放。相反,后者使用自 Windows Vista 以来无法缩放的 DirectDraw 表面,并且图片质量很差。

将 EVR 用作视频渲染器(或 VMR-9)以获得最佳图像质量。

于 2013-08-23T20:25:05.363 回答