« URLエンコーディング | メイン | WMVの再生が出来るように »
2005年10月21日
吉里吉里 ムービー拡張日誌2:: WMソースフィルタの構造
Tweet @jin1016をフォロー初め出力ピンにはVideoとAudioが必要だろうと言うことで、次のような構造にした。
ただし、一番初めはCDemuxOutputPinはなく、Video等の出力ピンはCSourceStreamを直接継承していた。
が、コーディングしていくうちに、ほとんどのメソッドが共通になると思い、CDemuxOutputPinを追加。
さらに書いていくと、VideoとAudioにほとんど違いがないことに気付く。
IDemuxReaderにはGetVideoMediaTypeやGetAudioMediaTypeなど、単にAudioやVideoの文字だけが違うメソッドを用意していたのだが、CDemuxVideoOutputPinとCDemuxAudioOutputPinの違いは、その呼ぶメソッドだけが違うだけだ。(各メソッドの引数にはCMediaTypeなどがあり、これによってAudioやVideoなどのメディアタイプは抽象化され、ソースフィルタとしてはその違いを意識する必要はなくなっている)
呼ぶメソッドが違うだけなら、CDemuxOutputPinだけ作り、CDemuxVideoOutputPinなどは必要なく出来る。
で、どのような実装にするか考える。
まず、GetMediaTypeなどの引数を増やし、ストリーム番号などをとるようにすることを思い付いたが、面倒な上にイマイチ。
もう少し考えて気付く、ストリーム番号ではなく出力ピンがインターフェイスを持つようにすればいいんじゃないかと。
つまり、次のようなクラス図になる。
このような構造であればソースフィルタ側はVideoやAudioの違いを意識することはなくなるし、VideoやAudio以外にも楽に対応できる。
また、メディアタイプを知っているのはリーダーになるので、本来あるべき姿のようにも思う。
ってことで、このような設計で行こう。
投稿者 Takenori : 2005年10月21日 11:08
comments powered by Disqus