CBaseInputPin.Receive メソッド
[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayer、IMFMediaEngine、および Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayer、IMFMediaEngine、Audio/Video Capture を使用することを強くお勧めします。 Microsoft は、従来の API を使用する既存のコードを、可能であれば新しい API を使用するように書き直すよう提案しています。]
メソッドは Receive
、ストリーム内の次のメディア サンプルを受け取ります。 このメソッドは 、IMemInputPin::Receive メソッドを実装します。
構文
HRESULT Receive(
IMediaSample *pSample
);
パラメーター
-
pSample
-
サンプルの IMediaSample インターフェイスへのポインター。
戻り値
HRESULT 値を返します。 次の表に示す値を指定できます。
リターン コード | 説明 |
---|---|
|
成功しました。 |
|
ピンは現在フラッシュ中です。サンプルは拒否されました。 |
|
NULL ポインター引数。 |
|
メディアの種類が無効です。 |
|
実行時エラーが発生しました。 |
|
ピンが停止しています。 |
解説
アップストリーム出力ピンは、このメソッドを呼び出して、入力ピンにサンプルを配信します。 入力ピンは、次のいずれかを実行する必要があります。
- 戻る前にサンプルを処理します。
- ワーカー スレッドでサンプルを返して処理します。
- サンプルを拒否します。
ピンでワーカー スレッドを使用してサンプルを処理する場合は、このメソッド内のサンプルに参照カウントを追加します。 メソッドが戻った後、アップストリーム ピンによってサンプルが解放されます。 サンプルの参照カウントが 0 に達すると、サンプルは再使用のためにアロケーターに戻ります。
このメソッドは同期的であり、ブロックできます。 メソッドがブロックされる可能性がある場合、ピンの CBaseInputPin::ReceiveCanBlock メソッドはS_OKを返す必要があります。
基底クラスでは、このメソッドは次の手順を実行します。
- CBaseInputPin::CheckStreaming メソッドを呼び出して、ピンがサンプルを今すぐ処理できることを確認します。 たとえば、ピンを停止できない場合、メソッドは失敗します。
- サンプル プロパティを取得し、形式が変更されたかどうかを確認します (以下を参照)。
- 形式が変更された場合、メソッドは CBasePin::CheckMediaType メソッドを呼び出して、新しい形式が許容されるかどうかを判断します。
- 新しい形式が受け入れられない場合、メソッドは CBasePin::EndOfStream メソッドを呼び出し、EC_ERRORABORT イベントをポストし、エラー コードを返します。
- エラーがなかったと仮定すると、メソッドは S_OKを返します。
次のように、形式の変更をテストします。
- サンプルで IMediaSample2 インターフェイスがサポートされている場合は、AM_SAMPLE2_PROPERTIES構造体の dwSampleFlags メンバーをチェックします。 AM_SAMPLE_TYPECHANGED フラグが存在する場合、形式は変更されています。
- それ以外の場合、サンプルで IMediaSample2 がサポートされていない場合は、 IMediaSample::GetMediaType メソッドを呼び出します。 メソッドが NULL 以外の値を返す場合、形式は変更されています。
基底クラスでは、このメソッドはサンプルを処理しません。 派生クラスは、このメソッドをオーバーライドして処理を実行する必要があります。 (これに伴う内容は、フィルターによって完全に異なります)。派生クラスは基底クラス メソッドを呼び出して、前に説明したエラーをチェックする必要があります。
要件
要件 | 値 |
---|---|
ヘッダー |
|
ライブラリ |
|