次の方法で共有


CBaseAllocator::GetBuffer

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 タイム アウト。

注意

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

取得したメディア サンプルは割り当てられたバッファへの有効なポインタを持つ。呼び出し元は、タイム スタンプ、メディア タイム、同期ポイント プロパティなどのサンプルの他のプロパティを設定する役割を果たす。詳細については、「IMediaSample」を参照すること。

基底クラスでは、pStartTimepEndTime パラメータは無視される。派生クラスはこれらの値を使うことができる。たとえば、ビデオ レンダラ フィルタのアロケータはこれらの値を使って、Microsoft® DirectDraw® サーフェイス間の切り替えの同期を行う。

メソッドがサンプルを待つ必要があるとき、待ちオブジェクト数 (CBaseAllocator::m_lCount) をインクリメントし、セマフォ (CBaseAllocator::m_hSem) の WaitForSingleObject 関数を呼び出す。サンプルが使用可能になったとき、アロケータの CBaseAllocator::ReleaseBuffer メソッドを呼び出し、m_lCount によってセマフォ カウントをインクリメント (したがって待ちスレッドを解放) し、 m_lCount をゼロに戻す。

参照