CTransformFilter クラス
[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayer、IMFMediaEngine、および Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayer、IMFMediaEngine、Audio/Video Capture を使用することを強くお勧めします。 Microsoft は、従来の API を使用する既存のコードを、可能であれば新しい API を使用するように書き直すよう提案しています。]
クラスは CTransformFilter
、変換フィルターを実装するための基本クラスです。 このクラスは、1 つの入力ピンと 1 つの出力ピンを持つ変換フィルターを実装するために設計されています。 入力ピンと出力ピンに個別のアロケーターを使用します。 データをインプレースで処理するフィルターを作成するには、 CTransInPlaceFilter クラスを使用します。
このフィルターでは、 入力ピンに CTransformInputPin クラスを使用し、出力ピンに CTransformOutputPin クラスを使用します。 通常、これらのピン クラスをオーバーライドする必要はありません。 ほとんどの pin メソッドは、 クラスの対応するメソッドを CTransformFilter
呼び出すので、必要に応じてフィルター メソッドをオーバーライドできます。 フィルターは 、CTransformFilter::GetPin メソッドで両方のピンを作成します。 ピン クラスをオーバーライドする場合は、カスタム ピンを作成するために GetPin をオーバーライドする必要があります。
このクラスを使用するには、 から CTransformFilter
新しいクラスを派生させ、次のメソッドを実装します。
- CTransformFilter::CheckInputType
- CTransformFilter::CheckTransform
- CTransformFilter::D ecideBufferSize
- CTransformFilter::GetMediaType
- CTransformFilter::Transform
フィルターの要件によっては、他のメソッドもオーバーライドする必要がある場合があります。
メディアの種類
このフィルターの入力ピンでは、メディアの種類は提案されません。これはアップストリーム フィルターに依存して、接続のメディアの種類を提案します。 この設計の理由は、ほとんどの場合、アップストリーム フィルターが形式に関する詳細情報を提供できることです。 たとえば、ビデオ形式では、アップストリーム フィルターはビデオのディメンションとフレーム レートを認識しますが、変換フィルターにはこの情報を決定する方法がありません。 この動作を変更する場合は、入力ピンの 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 | 指定した識別子を持つピンを取得します。 |
要件
要件 | 値 |
---|---|
ヘッダー |
|
ライブラリ |
|