バージョン 8.0.0 で DMO エンコーダが追加されました。さて、この DMO エンコーダ、エンコード設定を設定する方法がプログラミングレベルで見ると多少おかしなことになっています。具体的にいうと、DMO や DirectShow フィルタで推奨される ISpecifyPropertyPage/IPropertyPage インターフェースを使ったプロパティシートではなく、AVI コンプレッサフィルタで実装される IAMVfwCompressDialogs インターフェースで開かれるダイアログを使っています。

こんなことになっている理由ですが、ISpecifyPropertyPage/IPropertyPage をちゃんと実装するのが大変(というか面倒)であるためです。このインターフェースを使った枠組みでは、設定される側のオブジェクトと設定する側のプロパティページとは別個の存在になっていて、VCM コーデックから出発している今のコーデックの実装からは大幅に手を加えないといけない気がします。あと、COM オブジェクト特有のスレッドアパートメントの問題にも悩まされそうです。で、設定するインターフェイスがないよりは多少おかしくてもあったほうがマシなので、実装が簡単な IAMVfwCompressDialogs を実装しています。

あと、これは別に狙ったわけではないのですが、DirectShow ベースのキャプチャソフトでも IPropertyPage ではなく IAMVfwCompressDialogs でしか設定が行えないものがあり、そういったソフトでは後者を実装しないと設定できません。具体的な例としては、自分がメインで使っているくすのきTVHDなのですけど。

もちろん、この状態はあまりよくないことは認識していて、そのうち IPropertyPage を実装したいとは思っていますが、きれいな設計が思いつかないので全く進んでいません。

Trackback

no comment untill now

Add your comment now