Show page source of QDecoder #42159

= 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 ストリーミングスレッドの実装]