CTransformFilter クラス

[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayerIMFMediaEngine、および Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayerIMFMediaEngineAudio/Video Capture を使用することを強くお勧めします。 Microsoft は、従来の API を使用する既存のコードを、可能であれば新しい API を使用するように書き直すよう提案しています。]

ctransformfilter クラス階層

クラスは CTransformFilter 、変換フィルターを実装するための基本クラスです。 このクラスは、1 つの入力ピンと 1 つの出力ピンを持つ変換フィルターを実装するために設計されています。 入力ピンと出力ピンに個別のアロケーターを使用します。 データをインプレースで処理するフィルターを作成するには、 CTransInPlaceFilter クラスを使用します。

このフィルターでは、 入力ピンに CTransformInputPin クラスを使用し、出力ピンに CTransformOutputPin クラスを使用します。 通常、これらのピン クラスをオーバーライドする必要はありません。 ほとんどの pin メソッドは、 クラスの対応するメソッドを CTransformFilter 呼び出すので、必要に応じてフィルター メソッドをオーバーライドできます。 フィルターは 、CTransformFilter::GetPin メソッドで両方のピンを作成します。 ピン クラスをオーバーライドする場合は、カスタム ピンを作成するために GetPin をオーバーライドする必要があります。

このクラスを使用するには、 から CTransformFilter 新しいクラスを派生させ、次のメソッドを実装します。

フィルターの要件によっては、他のメソッドもオーバーライドする必要がある場合があります。

メディアの種類

このフィルターの入力ピンでは、メディアの種類は提案されません。これはアップストリーム フィルターに依存して、接続のメディアの種類を提案します。 この設計の理由は、ほとんどの場合、アップストリーム フィルターが形式に関する詳細情報を提供できることです。 たとえば、ビデオ形式では、アップストリーム フィルターはビデオのディメンションとフレーム レートを認識しますが、変換フィルターにはこの情報を決定する方法がありません。 この動作を変更する場合は、入力ピンの GetMediaType メソッドをオーバーライドします。 アップストリーム フィルターがメディアの種類を提案すると、入力ピンはフィルターの CheckInputType メソッド (純粋仮想) を呼び出します。

入力ピンが接続されるまで、出力ピンはすべての接続を拒否し、優先メディアの種類は返しません。 入力ピンが接続されると、フィルターの GetMediaType メソッドを呼び出して、出力ピンから優先される型の一覧が返されます。 フィルターの CheckTransform メソッドを使用して、接続の出力の種類を確認します。 (どちらの方法も純粋仮想です)。通常、入力型は、許容される出力の種類を部分的に決定します。

フィルターに応じて、フィルターでサポートされているメディアの種類の一部を登録して、 Filter Mapper オブジェクトがフィルターを見つけられるようにすることができます。 詳細については、「 DirectShow フィルターを登録する方法」を参照してください。

ストリーム

このクラスは、出力データをキューに格納しません。 各出力サンプルは、 IMemInputPin::Receive メソッド内に配信されます。 Receive メソッドは、フィルターの Transform メソッド (純粋仮想も含む) を呼び出してデータを処理します。

このクラスの使用方法の詳細については、「 変換フィルターの記述」を参照してください。

保護されたメンバー変数 説明
m_bEOSDelivered フィルターがストリームの終了通知を送信したかどうかを示すフラグ。
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 ピン接続を完了します。 仮想。
受信 メディア サンプルを受信して処理し、出力サンプルをダウンストリーム フィルターに配信します。 仮想。
InitializeOutputSample 新しい出力サンプルを取得し、初期化します。
EndOfStream 入力ピンから追加のデータが必要ないことをフィルターに通知します。 仮想。
BeginFlush フラッシュ操作を開始します。 仮想。
EndFlush フラッシュ操作を終了します。 仮想。
NewSegment この呼び出し後に受信したメディア サンプルがセグメントとしてグループ化されることをフィルターに通知します。 仮想。
純粋仮想メソッド 説明
CheckInputType 指定したメディアの種類が入力可能かどうかを確認します。
CheckTransform 入力メディアの種類が出力メディアの種類と互換性があるかどうかを確認します。
DecideBufferSize 出力ピンのバッファー要件を設定します。
GetMediaType 出力ピンの優先メディアの種類を取得します。
IMediaFilter メソッド 説明
Stop フィルターを停止します。
一時 停止 フィルターを一時停止します。
IBaseFilter メソッド 説明
FindPin 指定した識別子を持つピンを取得します。

要件

要件
ヘッダー
Transfrm.h (Streams.h を含む)
ライブラリ
Strmbase.lib (製品版ビルド);
Strmbasd.lib (デバッグ ビルド)