捕获NTSC模拟板时,DirectShow像素出现故障

时间:2014-12-28 08:35:31

标签: c++ video directx directshow directx-11

我正在为Directshow编写自定义视频渲染过滤器。我的渲染器假设传入的像素一次被组织一行像素(正确的假设?)并使用DirectX纹理将它们blits到其他地方的另一个DirectX显示器。

这种方法适用于网络摄像头作为输入,但是当我使用模拟捕获板时,渲染器接收的样本不是任何预期的顺序(见左下图)。当我使用股票DirectShow视频渲染器渲染捕获时,它看起来很好(见下图右图)。所以directshow渲染器必须做一些额外的事情,而我的渲染器不是。知道它是什么吗?

更多细节:

  • 采集卡是NTSC,我不确定这是否重要。
  • 作为自定义渲染器的输入,我只接受MEDIASUBTYPE_RGB24,所以我认为这不是YUV问题(是吗?)。
  • 有点难以看到,但下面的第二张图片是我的滤镜图。我的自定义渲染器连接到最右侧的颜色空间转换器。
  • 我假设进入我的渲染器的像素一次都被组织成一行像素。这是正确的假设吗?

sample output

My Rendering Graph

1 个答案:

答案 0 :(得分:3)

也许纹理被填充以保持行对齐(乘以)每行32个字节?请注意,我没有使用过DirectShow,但这正是我在D3D中所期望的。

换句话说,你的输入可能会比你想象的有不同的步伐。不幸的是我不知道DS所以我只能假设计算输入/输出坐标的东西应该有不同的步幅因素,例如代码中的内容看起来像offset = y * stride + x