= QDecoder = == 概要 DirectShow アーキテクチャー上で、Matroska コンテナの Theora/Vorbis コンテンツ 再生を実現する DirectShow フィルターである。 単体の Theora/Vorbis デコーダーのみを実現する場合は、DMO で実装することができるが、 Matroska のパーサーフィルター機能を包含するため、DirectShow フィルターとして実装する。 用途としては、組み込み専用とし、単体フィルターとしては使用できないものとする。そのため、 環境依存の外部フィルターに影響を受けることはない。また、別アプリケーションにおける障害の 原因となることがない。インストール作業も不要である。 DirectShow アーキテクチャーの思想としては、パーサーとデコーダーは別コンポーネントとなる のが普通であるが、アプリケーションへの組み込みを容易にするため、単一のコンポーネントとする。 DirectShow フィルターの実装では、SDK のサンプルとして提供されるフレームワーク ライブラリ (BaseClasses) を用いるのがほとんどであるが、今回は敢えて ATL のみを 使用して独自に実装する。 == 実装の詳細 DirectShow フィルターとして要求されるインターフェイスは、以下の通りである。 * IBaseFilter (IMediaFilter -> IPersist) * IMediaSeeking フィルターのピンには、以下のインターフェイスが必要である。 * IPin その他、サポート用のオブジェクトとして、以下のインターフェイスの実装が必要である。 * IEnumPins * IEnumMediaTypes フィルターは、モノリシック構成とする。入力ピンは持たず、Video と Audio を出力する2つの 出力ピンを固定的に備える。Video, Audio は、デコード済みの非圧縮フォーマットで出力する。 基本的に出力ピンは、レンダラーフィルターに直結されることを想定している。 IMediaSeeking をサポートし、基本的なシーク機能を実装する。 [QFilter フィルターの実装] [QPin ピンの実装] [QStreamer ストリーミングスレッドの実装]