次の方法で共有


CBaseInputPin.Receive メソッド

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

メソッドは Receive 、ストリーム内の次のメディア サンプルを受け取ります。 このメソッドは 、IMemInputPin::Receive メソッドを実装します。

構文

HRESULT Receive(
   IMediaSample *pSample
);

パラメーター

pSample

サンプルの IMediaSample インターフェイスへのポインター。

戻り値

HRESULT 値を返します。 次の表に示す値を指定できます。

リターン コード 説明
S_OK
成功しました。
S_FALSE
ピンは現在フラッシュ中です。サンプルは拒否されました。
E_POINTER
NULL ポインター引数。
VFW_E_INVALIDMEDIATYPE
メディアの種類が無効です。
VFW_E_RUNTIME_ERROR
実行時エラーが発生しました。
VFW_E_WRONG_STATE
ピンが停止しています。

解説

アップストリーム出力ピンは、このメソッドを呼び出して、入力ピンにサンプルを配信します。 入力ピンは、次のいずれかを実行する必要があります。

  • 戻る前にサンプルを処理します。
  • ワーカー スレッドでサンプルを返して処理します。
  • サンプルを拒否します。

ピンでワーカー スレッドを使用してサンプルを処理する場合は、このメソッド内のサンプルに参照カウントを追加します。 メソッドが戻った後、アップストリーム ピンによってサンプルが解放されます。 サンプルの参照カウントが 0 に達すると、サンプルは再使用のためにアロケーターに戻ります。

このメソッドは同期的であり、ブロックできます。 メソッドがブロックされる可能性がある場合、ピンの CBaseInputPin::ReceiveCanBlock メソッドはS_OKを返す必要があります。

基底クラスでは、このメソッドは次の手順を実行します。

  1. CBaseInputPin::CheckStreaming メソッドを呼び出して、ピンがサンプルを今すぐ処理できることを確認します。 たとえば、ピンを停止できない場合、メソッドは失敗します。
  2. サンプル プロパティを取得し、形式が変更されたかどうかを確認します (以下を参照)。
  3. 形式が変更された場合、メソッドは CBasePin::CheckMediaType メソッドを呼び出して、新しい形式が許容されるかどうかを判断します。
  4. 新しい形式が受け入れられない場合、メソッドは CBasePin::EndOfStream メソッドを呼び出し、EC_ERRORABORT イベントをポストし、エラー コードを返します。
  5. エラーがなかったと仮定すると、メソッドは S_OKを返します。

次のように、形式の変更をテストします。

  • サンプルで IMediaSample2 インターフェイスがサポートされている場合は、AM_SAMPLE2_PROPERTIES構造体の dwSampleFlags メンバーをチェックします。 AM_SAMPLE_TYPECHANGED フラグが存在する場合、形式は変更されています。
  • それ以外の場合、サンプルで IMediaSample2 がサポートされていない場合は、 IMediaSample::GetMediaType メソッドを呼び出します。 メソッドが NULL 以外の値を返す場合、形式は変更されています。

基底クラスでは、このメソッドはサンプルを処理しません。 派生クラスは、このメソッドをオーバーライドして処理を実行する必要があります。 (これに伴う内容は、フィルターによって完全に異なります)。派生クラスは基底クラス メソッドを呼び出して、前に説明したエラーをチェックする必要があります。

要件

要件
ヘッダー
Amfilter.h (Stream.h を含む)
ライブラリ
Strmbase.lib (小売ビルド);
Strmbasd.lib (デバッグ ビルド)

関連項目

CBaseInputPin クラス