« URLエンコーディング | メイン | WMVの再生が出来るように »

2005年10月21日

吉里吉里 ムービー拡張日誌2:: WMソースフィルタの構造

    

初め出力ピンには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
Total : Today : Yesterday : なかのひと