DirectShow DirectShow 레퍼런스 인터페이스 ISampleGrabber SetCallback   [목차열람] [주소복사] [슬롯비우기]
ISampleGrabber::SetCallback
 
Microsoft DirectX 9.0

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 라고도 부른다)도, 잠금 되는 일이 있다. 이러한 잠금에 의해, 데드 록의 가능성이 생긴다. 콜백 thread가 DirectDraw API 를 호출하려 하고 있는 thread를 기다리고 있는 경우, 데드 록이 발생할 가능성이 있다. 게다가 Win16 잠금이 보관 유지되고 있는 경우, 콜백에 크리티컬 섹션이 보관 유지되고 있는지, 또는 다른 thread가 처리를 완료하는 것을 기다리고 있으면 데드 록이 발생할 가능성이 있다.

그 때문에, 콜백은 동작을 정지시킬 가능성이 있는 처리를 실행해서는 안 된다. 이것에는, 크리티컬 섹션의 보관 유지나, 다른 thread 대기가 포함된다. 또, 윈도우를 움직이는 것 같은 GDI 나 USER32.DLL API 를 호출해서는 안 된다. Win16 잠금에 대한 자세한 것은, Knowledge Base 문장 Q125867 : Understanding Win16Mutex 를 참조할것.

데이터 처리 thread는, 콜백 메서드로부터 돌아올 때까지 동작을 정지한다. 콜백 메서드로부터 돌아올 시간이 걸리면 재생에 영향이 나올 가능성이 있다.

샘플의 내용의 수정은 추천하지 않는다. 샘플 grabber를 사용하는 것이 아니라, 샘플의 복사를 생성 하는지, 커스텀 필터를 기술한다.

필터는,프리롤 샘플 , 또는 AM_SAMPLE2_PROPERTIES 구조체의 dwStreamId 멤버가 AM_STREAM_MEDIA 가 아닌 샘플의 콜백 함수는 호출하지 않는다.

참조

↑TOP