我正在使用VMR将位图与视频流混合。我在无窗口模式下运行渲染器。
由于我需要在渲染器上有多个流,我首先将渲染器添加到图形中,然后将IFilterGraph2 :: RenderEx与AM_RENDEREX_RENDERTOEXISTINGRENDERERS一起使用。
大部分时间都可以正常工作,但我有一个.avi文件可以使用RenderFile进行渲染,但在我的图表中渲染时最终会显示所有黑色。我用graphedit比较了这两个图,它们是相同的:
capture.avi -> AVI Splitter -> Color Space Converter -> Video Renderer
图表之间的唯一区别是Color Space Renderer的设置不同:graphedit显示图表中的以下设置有效:
Input:
Major Type: Video
Sub Type: ARGB32
...
XForm Out:
Major Type: Video
Sub Type: RGB32
在我的图表中显示:
Input: (same)
XForm Out:
Major Type: Video
Sub Type: ARGB32
所以看起来转换器基本上什么都不做。我环顾四周,无法找到Color Space Converter过滤器的任何配置界面。我还在VMR输入引脚和色彩空间转换器输出引脚上尝试使用IPin :: QueryAccept和IFilterGraph2 :: ReconnectEx进行不同的操作,尝试强制将Converter转换器的输出转换为RGB32,但我运气不好。希望有人能指出我正确的方向!
答案 0 :(得分:1)
据我所知,Color Space Converter过滤器没有接口,但您也不需要它。您可以通过插入仅接受RGB32的过滤器强制Color Space Converter过滤器转换为RGB32。 RGBFilters示例中的TransNull32确实显示了这一点。您的图表将如下所示:
capture.avi -> AVI Splitter -> Color Space Converter -> TransNull32 -> Video Renderer
另请参阅Regarding the scope of Sample Grabber in DirectShow,其中我解释了如何使用TransNull24过滤器。