簡體   English   中英

如何使用其他文件重用DirectShow過濾器圖

[英]How do you Reuse a DirectShow filter graph with different file

我有一個使用filterGraph.RenderEx()創建DirectShow圖的應用程序; 由於1it可能需要很長時間才能啟動並運行該圖,因此我想在應用程序的開頭創建一些圖,然后通過更改源文件來重用它們。

  1. 播放file1.wmv
  2. 等待文件完成
  3. 更改圖形以指向file2.wmv
  4. 播放文件2

您如何更改源文件,而不必為下一個文件重新創建整個圖形?

編輯:::

我不是要播放文件,而是要重疊。 圖形實際上是作為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM