次の方法で共有


CBaseAllocator.GetBuffer メソッド

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

メソッドは GetBuffer 、バッファーを含むメディア サンプルを取得します。 このメソッドは、 IMemAllocator::GetBuffer メソッドを 実装します。

構文

HRESULT GetBuffer(
   IMediaSample   **ppBuffer,
   REFERENCE_TIME *pStartTime,
   REFERENCE_TIME *pEndTime,
   DWORD          dwFlags
);

パラメーター

ppBuffer

バッファーの IMediaSample インターフェイスへのポインターを受け取ります。 呼び出し元はインターフェイスを解放する必要があります。

pStartTime

サンプルの開始時刻へのポインター。

pEndTime

サンプルの終了時刻へのポインター。

dwFlags

0 個以上のフラグのビットごとの組み合わせ。 基底クラスは、次のフラグをサポートしています。

説明
AM_GBF_NOWAIT
バッファーが使用可能になるまで待つ必要はありません。

戻り値

次のいずれかの HRESULT 値を返します。

リターン コード 説明
S_OK
成功しました。
VFW_E_NOT_COMMITTED
アロケーターがコミットされませんでした。
VFW_E_TIMEOUT
タイムアウトしました。

解説

呼び出し元が dwFlagsAM_GBF_NOWAIT フラグを指定しない限り、このメソッドは次のサンプルが使用可能になるまでブロックします。

取得したメディア サンプルには、割り当てられたバッファーへの有効なポインターがあります。 呼び出し元は、タイム スタンプ、メディア時刻、同期ポイント プロパティなど、サンプルの他のプロパティを設定する必要があります。 詳細については、「 IMediaSample」を参照してください。

基底クラスでは、 pStartTime パラメーターと pEndTime パラメーターは無視されます。 派生クラスでは、これらの値を使用できます。 たとえば、 ビデオ レンダラー フィルターのアロケーターは、これらの値を使用して DirectDraw サーフェス間の切り替えを同期します。

メソッドがサンプルで待機する必要がある場合は、待機オブジェクトの数 (CBaseAllocator::m_lCount) をインクリメントし、セマフォ (CBaseAllocator::m_hSem) で WaitForSingleObject 関数を呼び出します。 サンプルが使用可能になると、アロケーターで CBaseAllocator::ReleaseBuffer メソッドを呼び出します。これにより、セマフォ数 がm_lCount 増加し (これにより待機スレッドが解放されます) 、m_lCount 0 に戻ります。

要件

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

関連項目

CBaseAllocator クラス