Microsoft DirectX 8.0

ISampleGrabber インターフェイス

このインターフェイスは、フィルタ グラフ内を通る個々のメディア サンプルを取得するメソッドを提供する。

サンプル グラバ フィルタは、このインターフェイスを公開する。アプリケーションでは、このインターフェイスのメソッドを呼び出して、メディア サンプルを取得できる。詳細については、「メディア サンプルの入手」を参照すること。

要件

Requires Qedit.h が必要である。

vtable 順のメソッド

IUnknown メソッド説明
QueryInterfaceサポートされているインターフェイスへのポインタを取得する。
AddRef参照カウントをインクリメントする。
Release参照カウントをデクリメントする。
ISampleGrabber メソッド説明
SetOneShotサンプルを 1 つ受け取ったらフィルタがグラフを停止すべきかどうかを指定する。
SetMediaTypeサンプル グラバの入力ピン上の接続に使用するメディア タイプを指定する。
GetConnectedMediaTypeサンプル グラバの入力ピン上の接続に使用するメディア タイプを取得する。
SetBufferSamplesフィルタ内を通るサンプルをバッファにコピーするかどうかを指定する。
GetCurrentBufferフィルタが受け取った最新サンプルのコピーを取得する。
GetCurrentSample現在は実装されていない。
SetCallbackサンプル到着時に呼び出すコールバック メソッドを指定する。

ISampleGrabber::GetConnectedMediaType

ISampleGrabber インターフェイス

サンプル グラバの入力ピン上の接続に使用するメディア タイプを取得する。

構文

HRESULT GetConnectedMediaType( 
    AM_MEDIA_TYPE *pType 
);

パラメータ

pType
AM_MEDIA_TYPE 構造体を受け取る変数へのポインタ。

戻り値

次のいずれかの値を返す。

E_POINTERNULL ポインタ引数。
S_OK成功。
VFW_E_NOT_CONNECTEDフィルタが接続されていない。

ISampleGrabber::GetCurrentBuffer

ISampleGrabber インターフェイス

最新サンプルに関連付けられたバッファのコピーを取得する。

構文

HRESULT GetCurrentBuffer(
    long *pBufferSize,
    long *pBuffer
);

パラメータ

pBufferSize
[in, out] バッファのサイズへのポインタ。pBuffer が NULL の場合、このパラメータは必要なサイズを受け取る。pBuffer が NULL でない場合、このパラメータはバッファのサイズを示す。
pBuffer
[out] サンプルのコピーを受け取るバッファへのポインタ、または NULL。

戻り値

次のいずれかの値を返す。

E_INVALIDARGサンプルがバッファリングされていない。
E_POINTERNULL ポインタ引数。
S_OK成功。
VFW_E_NOT_CONNECTEDフィルタが接続されていない
VFW_E_WRONG_STATEフィルタが不適切な状態にある。

注意

バッファリングをアクティブにするには、値 TRUE で SetBufferSamples を呼び出す。

ISampleGrabber::GetCurrentSample

ISampleGrabber インターフェイス

現在は実装されていない。

構文

HRESULT GetCurrentSample(	
    IMediaSample **ppSample
);

ISampleGrabber::SetBufferSamples

ISampleGrabber インターフェイス

フィルタ内を通るサンプルをバッファにコピーするかどうかを指定する。

構文

HRESULT SetBufferSamples(
    BOOL BufferThem
);

パラメータ

BufferThem
サンプル データをバッファリングするかどうかを指定するブール型の値。TRUE の場合、フィルタはサンプル データを内部バッファにコピーする。

戻り値

S_OK を返す。

ISampleGrabber::SetCallback

ISampleGrabber インターフェイス

サンプル到着時に呼び出すコールバック メソッドを指定する。

構文

HRESULT SetCallback( 
    ISampleGrabberCB *pCallback, 
    long WhichMethodToCallback 
);

パラメータ

pCallback
コールバック メソッドが格納された ISampleGrabberCB インターフェイスへのポインタ、または NULL。コールバックを取り消す場合に、NULL を指定する。
WhichMethodToCallback
コールバック メソッドを指定するインデックス。次のいずれかの値を指定する。
0ISampleGrabberCB::SampleCB メソッドを呼び出す。
1ISampleGrabberCB::BufferCB メソッドを呼び出す。

戻り値

次のいずれかの値を返す。

E_INVALIDARGサンプルはバッファリングされていない。
S_OK成功。

注意

サンプルが Microsoft® DirectDraw® サーフェスである場合、そのサーフェスはコールバック中にロックされる。Win16 ロック (Win16Mutex とも呼ばれる) も、ロックされることがある。これらのロックによって、デッドロックの可能性が生まれる。コールバック スレッドが DirectDraw API を呼び出そうとしているスレッドを待っている場合、デッドロックが発生する可能性がある。さらに、Win16 ロックが保持されている場合、コールバックにクリティカル セクションが保持されているか、またはほかのスレッドが処理を完了するのを待っていると、デッドロックが発生する可能性がある。

そのため、コールバックはブロックを発生させる可能性のある処理を実行してはならない。これには、クリティカル セクションの保持や、ほかのスレッド待ちが含まれる。また、ウィンドウを動かすような GDI や USER32.DLL API を呼び出してはならない。Win16 ロックについての詳細は、Knowledge Base 文章 Q125867 : Understandign Win16Mutex ((http://support.microsoft.com/support/kb/articles/Q125/8/67.asp) を参照すること。

データ処理スレッドは、コールバック メソッドから戻るまでブロックする。コールバック メソッドから戻るまでに時間がかかると、再生に影響が出る可能性がある。

ISampleGrabber::SetMediaType

ISampleGrabber インターフェイス

サンプル グラバの入力ピン上の接続に使用するメディア タイプを指定する。

構文

HRESULT SetMediaType( 
    const AM_MEDIA_TYPE *pType 
);

パラメータ

pType
メディア タイプを指定する AM_MEDIA_TYPE 型の変数へのポインタ。構造体メンバをすべて設定する必要はない。このパラメータでは、メジャー タイプだけを指定したり、メジャー タイプとサブタイプを指定したり、メジャー タイプ、サブタイプ、およびフォーマット タイプを指定したりすることができる。その他の構造体メンバは無視される。

戻り値

S_OK を返す。

注意

デフォルトでは、サンプル グラバに優先メディア タイプはない。サンプル グラバを正しいフィルタに確実に接続するには、グラフをレンダリングする前にこのメソッドを呼び出す。

ISampleGrabber::SetOneShot

ISampleGrabber インターフェイス

サンプルを 1 つ受け取ったらフィルタがグラフを停止すべきかどうかを指定する。

構文

HRESULT SetOneShot(
    BOOL OneShot
);

パラメータ

OneShot
サンプルを 1 つ受け取ったらフィルタがグラフを停止すべきかどうかを指定するブール型の値。TRUE の場合、最初のサンプルを受け取ると、フィルタは停止し、EC_COMPLETE を通知する。FALSE の場合、フィルタは通常どおり実行を続ける。

戻り値

S_OK を返す。

注意

値 TRUE でこのメソッドを呼び出し、希望の時間までシークし、グラフを実行すると、特定時間のサンプルを取得できる。