« DirectShowっていったい・・・ | メイン | BBS設置 »

August 03, 2004

DirectShow 実験プログラム第1段階 - 2

かなり長くなってしまったので分離する。
なんか計画性は皆無だな。

メモ
超高速描画の謎--以前読んだ気もする・・・

DirectShowを扱う部分のコードを吉里吉里のからコピペして、改良していく。
とその前に、コメントとルールを決めておくことにした。
基本的にはDoxygenで自動的にドキュメント(関数リファレンス)を吐かせたいから、Doxygenの書き方には従う。
で、後は項目や細かい書き方だな。
以前、会社で作ったものを参考にしながら、自分の書きたいように作り直す。(こうゆう規約を作るのは、自分が多かったなぁ・・・)
ヘッダーコメントは//スタイルよりも/**/の方が書く量が減るし、書き始めが左に少しずれるので/**/を使うことにした。
そんな感じでだいたい決めた。
そのうち内規として上げておこう。

で、早速コーディングだと意気込んで。
まずはプロジェクトにDirectShowに必要なライブラリなどを加える。
そして、コーディング・・・よくわからない。
ヘルプとサンプル、ソースコードを何度も見直す。
そのうち何とかわかってきた。
とりあえずここにある程度まとめる。

吉里吉里のコードIStream周りを追う。深い。止める。
今回は、ファイルが独立しているので、IFileSourceFilterですませることにした。
ここでふと、Texture3Dを改良したプログラムで音が鳴っていなかったことに気付く。
そこで、GraphEditでシミュレートしようと思うが、独自に拡張したフィルタを追加する方法がわからない。GraphEditのヘルプを見ればいいんだろうが面倒だなぁと思っていると、実行中プロセスのフィルタグラフを見る方法があると書かれている。
そのためには、実行中オブジェクト テーブル (ROT)にプログラムで登録する必要があるらしい。
ここってハッと気付く、Texture3DのソースでなんとかROTと言う関数があって、よくわからない処理をしていたことを。
そう言うことだったのか。
今後は、DirectShowのプログラムを書くときは、デバッグ用にROTへの登録処理を書くことにする。
ちょっと話がそれたが、Texture3Dではそのままでグラフを見ることが出来るようなので、GraphEditで見る。
サウンドの出力がない。
とりあえず、練習用にこれにサウンドの出力を追加してみるか。

まず、DirectSoundのフィルターがなんかよくわからなかったので、IAMDirectSoundかな?と思い、おもむろにグラフビルダーにQueryInterfaceしてみる。後で気付くが、これははっきり言ってアホな行為です。
たぶん、IAMDirectSoundはフィルターではありません。DirectSoundフィルタのインターフェイスの一つです。
しかも、IGraphBuilderにQueryInterfaceしても見つからないと思われる。
まあ、このあたりのことはさらに理解が深まったときに書くとして、結果としてどうやったかを書きます。
CoCreateInstanceでCLSID_DSoundRenderを使い、DirectSoundフィルターを生成します。
フィルタグラフにDirectSoundフィルタを追加します。
MPEG-I Stream SplitterフィルタをフィルタグラフにFindFilterByNameで見つけます。
後は、両者のピンで合致するものを検索してつなげればできあがりです。
見事に音が鳴りました。
にしても、インターフェイスの継承関係を表したクラス図と、各インターフェイスが所持しているインターフェイスがわかる図がほしいなぁ。
どこかにないだろうか?
昔、macromedia DirectorのXDKを使ってXtra(プラグイン)を作るために、そんな感じの図を書いた記憶が・・・
DirectShowで似たようなものを書くのはちょっとしんどいな。便利そうだけど。
落ちていないかなぁ・・・うーむぅ。
まあ、それはいいとして、この実験でDirectShowについての理解がかなり深まった。

続く・・・

投稿者 Takenori : August 3, 2004 07:00 AM

Trackback Pings

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

コメント

Total : Today : Yesterday :