目前我正在使用一个VMR9渲染器并将其放在XNA纹理上,同时渲染两个不同的视频。我目前使用的代码管理一个视频渲染,但它在两个视频上做了一些讨厌。在我的工作设置上,完整的视频播放工作完美无缺,但当我尝试切换计算机时,它会让我成为黑屏。
我正在使用本主题中建议的过滤器图表:Can one Video Mixing Renderer 9 (VMR9) render more video streams?
如果我在当前运行的程序上附加GraphStudioNext,它将显示以下图表: http://s11.postimg.org/z7d3qyyxf/graph.png
起初我认为问题在于编解码器设置之间存在一些差异,但是在我在两台不同的机器上管理相同的配置后,只有图形发生了变化:即使一台机器正确显示视频而另一台机器只显示一条,它们也会变得相同黑屏。
我甚至试图手动重新制作图表,看看图表本身是否有任何问题并且运行顺畅。
我使用以下代码段将视频源添加到VMR9渲染器:
protected override HRESULT OnInitInterfaces()
{
IBaseFilter bsFilter;
m_GraphBuilder.AddSourceFilter(@"C:\Video\Digitales CLP_tic tac Strawberry Mix_HUN_FIN.mp4", "first", out bsFilter);
IEnumPins ePins;
bsFilter.EnumPins(out ePins);
IPin[] pins = new IPin[1];
IntPtr fetched = IntPtr.Zero;
ePins.Next(1, pins, fetched);
int hr = m_GraphBuilder.Render(pins[0]);
m_GraphBuilder.AddSourceFilter(@"C:\Video\UIP_StarTrek.mp4", "second", out bsFilter);
bsFilter.EnumPins(out ePins);
ePins.Next(1, pins, fetched);
hr = m_GraphBuilder.Render(pins[0]);
return (HRESULT)hr;
}
任何帮助都将不胜感激。
答案 0 :(得分:0)
问题在于NVidia驱动程序。以下代码段导致错误:
VMR9NormalizedRect r1 = new VMR9NormalizedRect(0, 0, 0.5f, 1);
VMR9NormalizedRect r2 = new VMR9NormalizedRect(0.5f, 0, 1, 1);
hr = (HRESULT)mix.SetOutputRect(0, ref r1);
hr = (HRESULT)mix.SetOutputRect(1, ref r2);
如果使用除0,0,1,1之外的任何参数初始化VMR9NormalizedRect,它将仅显示黑屏。代码在我试过的任何ATI卡上运行都很完美。
似乎自2006年以来NVidia无法修复此错误: https://forums.geforce.com/default/topic/358347/