次の方法で共有


CBaseOutputPin.Deliver メソッド

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

メソッドは Deliver 、接続された入力ピンにメディア サンプルを配信します。

構文

virtual HRESULT Deliver(
   IMediaSample *pSample
);

パラメーター

pSample

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

戻り値

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

リターン コード 説明
S_OK
成功しました。
VFW_E_NOT_CONNECTED
ピンが接続されていません。

解説

このメソッドは、入力ピンで IMemInputPin::Receive メソッドを呼び出します。 Receive は、 IMemInputPin::ReceiveCanBlock メソッドがS_OKを返す場合にブロックできます。

このメソッドを呼び出した後、サンプルをリリースします。 入力ピンはサンプルの参照カウントを保持する可能性があるため、サンプルを再利用しないでください。 新しいサンプルを取得するには、 常に CBaseOutputPin::GetDeliveryBuffer メソッドを呼び出します。

このメソッドを呼び出す前に、フィルターのクリティカル セクションを保持します。 それ以外の場合、メソッド呼び出し中にピンが切断される可能性があります。 フィルターがワーカー スレッドを使用してサンプルを配信する場合は、フィルターがサンプルを配信する準備ができたらクリティカル セクションを保持します。 それ以外の場合は、フィルターがサンプルを処理するフィルターの IMemInputPin::Receive メソッドに critical セクションを保持できます。

ワーカー スレッドによってデッドロックが発生する可能性があります。 スレッドがクリティカル セクションを保持すると、フィルターの状態の変化を待機する可能性があります。 同時に、状態の変更がスレッドの完了を待機している可能性があります。 これを防ぐために、状態変更コードはスレッドを終了するイベントを通知し、スレッドが完了したことを通知するまで待つ必要があります。

要件

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

関連項目

CBaseOutputPin クラス