CTransformFilter クラス
CTransformFilter クラスは、変換フィルタを実装する基底クラスである。このクラスは 1 つの入力ピンと 1 つの出力ピンを持つ変換フィルタを実装するために設計されている。入力ピンと出力ピンに別のアロケータを使う。インプレイスでデータを処理するフィルタを作成するには、CTransInPlaceFilter クラスを使うこと。
このフィルタは入力ピンに CTransformInputPin クラスを使い、出力ピンに CTransformOutputPin クラスを使う。通常、これらのピン クラスをオーバーライドする必要はない。大部分のピン メソッドは CTransformFilter クラスで対応するメソッドを呼び出すので、必要に応じてそのフィルタ メソッドをオーバーライドできる。フィルタはCTransformFilter::GetPin メソッド内で両方のピンを作成する。ピン クラスをオーバーライドする場合、GetPin をオーバーライドしてカスタム ピンを作成しなければならない。
このクラスを使うには、新しいクラスを CTransformFilter から派生し、以下のメソッドを実装する。
- CTransformFilter::CheckInputType
- CTransformFilter::CheckTransform
- CTransformFilter::DecideBufferSize
- CTransformFilter::GetMediaType
- CTransformFilter::Transform
フィルタの要求によって、他のメソッドを同様にオーバーライドする必要がある場合もある。
メディア タイプ
このフィルタの入力ピンは、どのメディア タイプも提示しない。接続のメディア タイプの提示をアップストリーム フィルタに依存する。このように設計されている理由は、ほとんどの場合アップストリーム フィルタがフォーマットについてより多くの情報を提供できるためである。たとえば、ビデオ フォーマットの場合、アップストリーム フィルタは、ビデオ ディメンジョンとフレーム レートを認識しているが、転送フィルタは、この情報を判断する方法を持たない。この動作を変更するには、入力ピンの GetMediaType メソッドをオーバーライドする。アップストリーム フィルタがメディア タイプを提示すると、入力ピンがフィルタの CheckInputType メソッド (純粋仮想) を呼び出す。
入力ピンが接続されるまで、出力ピンはすべての接続を拒否し、優先メディア タイプを何も返さない。入力ピンが接続されると、出力ピンはフィルタの GetMediaType メソッドを呼び出して優先タイプのリストを返す。出力ピンは、フィルタの CheckTransform メソッドを使って接続の出力タイプを調べる。(どちらのメソッドも純粋仮想である。) 通常、入力タイプは、使用可能な出力タイプの決定に影響を及ぼす。
フィルタによっては、フィルタ マッパー オブジェクトがフィルタを見つけられるように、フィルタでサポートされるいくつかのメディア タイプを登録した方がよい場合がある。詳細については、「DirectShow フィルタの登録方法」を参照すること。
ストリーミング
このクラスは出力データをキューに入れない。各出力サンプルは IMemInputPin::Receive メソッド内部から出力される。Receive メソッドは、フィルタの Transform メソッド (純粋仮想) を呼び出して、データを処理する。
要件
ヘッダー : Transfrm.h 内で宣言し、Streams.h をインクルードする。
ライブラリ : Strmbase.lib (リテール ビルド) または Strmbasd.lib (デバッグ ビルド) を使う。
プロテクト メンバ変数 | |
m_bEOSDelivered | フィルタがエンドオブストリーム (EOS) 通知を送ったかどうかを示すフラグ。 |
m_bSampleSkipped | 最新のサンプルが落とされたかどうかを示すフラグ。 |
m_bQualityChanged | 品質が変更されたかどうかを示すフラグ。 |
m_csFilter | フィルタの状態を保護するクリティカル セクション。 |
m_csReceive | ストリーミング状態を保護するクリティカル セクション。 |
m_pInput | 入力ピンへのポインタ。 |
m_pOutput | 出力ピンへのポインタ。 |
パブリック メソッド | |
CTransformFilter | コンストラクタ メソッド。 |
~CTransformFilter | デストラクタ メソッド。 |
GetPinCount | フィルタ上のピンの数を取得する。仮想。 |
GetPin | ピンを取得する。仮想。 |
Transform | 入力サンプルを変換して出力サンプルを作成する。仮想。 |
StartStreaming | フィルタがポーズ状態にスイッチしたときに呼び出される。仮想。 |
StopStreaming | フィルタが停止状態にスイッチしたときに呼び出される。仮想。 |
AlterQuality | 品質の変更が要求されたことをフィルタに通知する。仮想。 |
SetMediaType | メディア タイプがフィルタのピンの 1 つに設定されたときに呼び出される。仮想。 |
CheckConnect | ピン接続が適切かどうかを調べる。仮想。 |
BreakConnect | ピン接続を解除する。仮想。 |
CompleteConnect | ピン接続を完了する。仮想。 |
Receive | メディア サンプルを取得し、それを処理し、ダウンストリーム フィルタに出力サンプルを出力する。仮想。 |
InitializeOutputSample | 新しい出力サンプルを取得し、それを初期化する。 |
EndOfStream | 入力ピンからの追加データはないことをフィルタに通知する。仮想。 |
BeginFlush | フラッシュ処理を開始する。仮想。 |
EndFlush | フラッシュ処理を終了する。仮想。 |
NewSegment | この呼び出し後に受け取ったメディア サンプルがセグメントとしてグループ化されていることをフィルタに通知する。仮想。 |
純粋仮想メソッド | |
CheckInputType | 指定されたメディア タイプが入力として許容されるかどうかをチェックする。 |
CheckTransform | 入力メディア タイプが出力メディア タイプと互換性があるかどうかをチェックする。 |
DecideBufferSize | 出力ピンのバッファ要求を設定する。 |
GetMediaType | 出力ピン用の優先メディア タイプを取得する。 |
IMediaFilter メソッド | |
Stop | フィルタを停止する。 |
Pause | フィルタをポーズする。 |
IBaseFilter メソッド | |
FindPin | 指定した識別子でピンを取得する。 |