DirectShowLibがうまく動かない
の処理を自動化するためにコードを書こうとしたけど、これで使ったDirectShowLibがうまく動かなかった。
単に使えるフィルタをリストアップしたいだけだが、そのフィルタがまったく出てこない。
using System; using System.Security.Permissions; using System.Runtime.InteropServices; using DirectShowLib; namespace listfilters { class Program { [SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)] static void Main(string[] args) { Console.WriteLine("Start"); IGraphBuilder graph = new FilterGraph() as IGraphBuilder; IEnumFilters filters = null; graph.EnumFilters(out filters); int fetched; IBaseFilter[] filter = new IBaseFilter[1]; while (filters.Next(1, filter, out fetched) == 0) { Console.WriteLine(filter[0]); FilterInfo info; filter[0].QueryFilterInfo(out info); Console.WriteLine(info.achName); Marshal.ReleaseComObject(filter[0]); } Marshal.ReleaseComObject(filters); Marshal.ReleaseComObject(graph); Console.WriteLine("End"); } } }
whileループに入らない。どうすればいいんだろうか。
どうやらEnumFiltersする前に、適当なファイルでgraph.RenderFile("test.avi", null)すれば、出てくるようになった。
ということはEnumFiltersは、graph中のフィルタを列挙してるだけに過ぎなくなる。GraphEditはどうやってフィルタリストを作ってるんだろうか。