我有一个应用程序使用filterGraph.RenderEx()创建directshow图形; 因为1it可能需要很长时间才能启动并运行图形,我想在应用程序的开头创建一些图形,然后通过更改源文件来重用它们。即
如何更改源文件,以便不必为下一个文件重新创建整个图形?
编辑:::
我不是想连续播放文件,而是重叠。这些图实际上是作为d3d应用程序的一部分呈现给texture2d对象。
这是我正在做的事情。 我正在使用:
添加sourceFilterIBaseFilter sourceFilter;
int hr = filterGraph.AddSourceFilter(file, file, out sourceFilter);
/* We will want to enum all the pins on the source filter */
IEnumPins pinEnum;
hr = sourceFilter.EnumPins(out pinEnum);
DsError.ThrowExceptionForHR(hr);
IntPtr fetched = IntPtr.Zero;
IPin[] pins = { null };
/* Counter for how many pins successfully rendered */
int pinsRendered = 0;
/* Loop over each pin of the source filter */
while (pinEnum.Next(pins.Length, pins, fetched) == 0)
{
if (filterGraph.RenderEx(pins[0], AMRenderExFlags.None, IntPtr.Zero) >= 0)
pinsRendered++;
Marshal.ReleaseComObject(pins[0]);
}
Marshal.ReleaseComObject(pinEnum);
当文件完成播放时,在将来的某个时刻,我想将源过滤器设置为另一个文件(相同类型),所以我不必完全重建图形,这可能非常创造缓慢。 有什么我可以将sourceFilter对象强制转换为允许我将其设置为另一个文件吗?
答案 0 :(得分:1)
GMFBridge可用于此目的。 .NET AFAIK有端口。看看http://directshownet.sourceforge.net/about.html中提到的GMFPlay应用程序。
使用intelligent connect会降低图表构建过程的速度。使用直接连接也可以加快这个过程。