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

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

Logitech HD Pro网络摄像头C920 [Captureer] => [VMR Input0]视频混合渲染器9

(当连接成为)

Logitech HD Pro网络摄像头C920 [Captureer] => [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会自动在两个连接的引脚之间放置必要的过滤器。它可以正常工作,但视频质量很差,看起来像素很多混合或损坏。我也没有任何证据表明已添加过滤器。是因为我没有以编程方式在它们之间放置解码器吗?如果可能的话,如何添加此过滤器?

在此先感谢您,并感谢您的英语。

最佳答案

问题在这里:


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





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


VMR-9与VMR-7。前者由Direct3D表面支持,框架可以通过硬件平滑缩放。相反,后者使用DirectDraw曲面,而缩放比例自Windows Vista开始就不可用,并且图像质量很差。

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

10-05 22:11