[英]Directshow - Stop and close a file (but reuse graph and some filters)
[英]How do you Reuse a DirectShow filter graph with different file
我有一個使用filterGraph.RenderEx()創建DirectShow圖的應用程序; 由於1it可能需要很長時間才能啟動並運行該圖,因此我想在應用程序的開頭創建一些圖,然后通過更改源文件來重用它們。 即
您如何更改源文件,而不必為下一個文件重新創建整個圖形?
編輯:::
我不是要播放文件,而是要重疊。 圖形實際上是作為d3d應用程序的一部分渲染到texture2d對象的。
這是我在做什么。 我正在使用以下方法添加sourceFilter:
IBaseFilter 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對象強制轉換為允許我將其設置為另一個文件的東西嗎?
GMFBridge可以用於此目的。 .NET AFAIK有端口。 看一下http://directshownet.sourceforge.net/about.html上提到的GMFPlay應用程序。
使用智能連接可能會減慢圖形構建過程。 使用直接連接也應加快該過程。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.