ISampleGrabber::SetCallback
SetCallback メソッドは、サンプル到着時に呼び出すコールバック メソッドを指定する。
構文
HRESULT SetCallback(
ISampleGrabberCB *pCallback,
long WhichMethodToCallback
);
パラメータ
pCallback
コールバック メソッドが格納された ISampleGrabberCB インターフェイスへのポインタ。コールバックを取り消すときは NULL を指定する。
WhichMethodToCallback
コールバック メソッドを指定するインデックス。次のいずれかの値を指定する。
値 | 説明 |
0 | ISampleGrabberCB::SampleCB メソッドを呼び出す。 |
1 | ISampleGrabberCB::BufferCB メソッドを呼び出す。 |
戻り値
次のいずれかの値を返す。
戻りコード | 説明 |
E_INVALIDARG | サンプルはバッファリングされていない。 |
S_OK | 成功。 |
注意
サンプルが Microsoft® DirectDraw® サーフェイスである場合、そのサーフェイスはコールバック中にロックされる。Win16 ロック (Win16Mutex とも呼ばれる) も、ロックされることがある。これらのロックによって、デッドロックの可能性が生じる。コールバック スレッドが DirectDraw API を呼び出そうとしているスレッドを待っている場合、デッドロックが発生する可能性がある。さらに、Win16 ロックが保持されている場合、コールバックにクリティカル セクションが保持されているか、または他のスレッドが処理を完了するのを待っていると、デッドロックが発生する可能性がある。
そのため、コールバックは動作を停止させる可能性のある処理を実行してはならない。これには、クリティカル セクションの保持や、他のスレッド待ちが含まれる。また、ウィンドウを動かすような GDI や USER32.DLL API を呼び出してはならない。Win16 ロックについての詳細は、Knowledge Base 文章 Q125867 : Understanding Win16Mutex を参照すること。
データ処理スレッドは、コールバック メソッドから戻るまで動作を停止する。コールバック メソッドから戻るまでに時間がかかると、再生に影響が出る可能性がある。
サンプルの内容の修正は推奨されない。サンプル グラバを使うのではなく、サンプルのコピーを作成するか、カスタム フィルタを記述する。
フィルタは、プリロール サンプル、または AM_SAMPLE2_PROPERTIES 構造体の dwStreamId メンバが AM_STREAM_MEDIA ではないサンプルのコールバック関数は呼び出さない。
参照