« メソッドとプロパティの追加 | メイン | インターフェイスの拡張 »

August 23, 2004

modeにいて

modeはopen前に設定されていた物を有効とすることにした。
それは、open時のクラス生成時に生成するクラスを振り分けることにしたからだ。
OverlayとLayerDrawの共通部を基底クラスにし、それを継承してOverlayとLayerDrawの各クラスを作ることにした。
動的再接続を使用して2つを切り替えるのは少々厳しそうだから諦めることにした。MPEG SplitterかDecoderのどちらか忘れた(あるいは両方)が、再接続に必要なインターフェイスを備えていないので、再接続しようとしたらかなり面倒だ。

メモ
デフォルトのフィルターなどもCOMだから、包含することで独自に機能拡張することも可能だ。
つまり、デフォルトのオーバーレイをラップして機能拡張が出来る・・・調べてみるとやりたいことは無理そうだ。

メモ2
フィルタグラフはIReferenceClock を使用して同期をとるようだ。
IReferenceClockではセマフォを使って同期をとるようだ。
DirectXのヘルプ"DirectShow のタイムとクロック"の項を読むとよいようだ。
時間は100ナノ秒単位。
10,000,000 = 1秒。
でも、返される値は意味がない。それは、基準クロックに依存するから。つまり、100ナノ秒単位できちんと増加するわけではない。
制御しづらそう。サウンドがある場合は、サウンドフィルタのクロックに同期化されるんだろうなぁ。
IMediaSample::GetMediaTimeを使えば、そのサンプルのフレーム番号がわかる。
IBasicVideo::get_AvgTimePerFrameを使えば、100ナノ秒単位のフレームレートが得られる。
IVideoFrameStep を使えばコマ送りが出来る。

投稿者 Takenori : August 23, 2004 11:57 PM

Trackback Pings

このエントリーのトラックバックURL:
http://blog.kaede-software.com/mt-tb.cgi/112

コメント

Total : Today : Yesterday :