Hatena::ブログ(Diary)

ラシウラ このページをアンテナに追加 RSSフィード Twitter

2007-07-19

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はどうやってフィルタリストを作ってるんだろうか。

はてなユーザーのみコメントできます。はてなへログインもしくは新規登録をおこなってください。

リンク元