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

IMediaControl::StopWhenReady

StopWhenReady 메서드는, 필터가 데이터를 큐에 넣어지도록(듯이) 필터 그래프를 포즈로 해, 다음에 필터 그래프를 정지한다.

구문

HRESULT StopWhenReady(void);

반환값

HRESULT 값을 돌려준다. 가능한 값은 다음과 같다.

설명
S_OK 성공.
S_FALSE 메서드가 돌아갔을 때에, 그래프는 포즈 상태에 처리중이었다.

주의

그래프가 정지하고 있을 때 필터 그래프를 시크 하는 경우, 이 메서드는 유용하다. 필터 그래프가 정지하고 있는 한, 현재 위치를 변경해도 새로운 프레임으로 비디오 윈도우는 재드로잉(Drawing) 하지 않는다. 따라서,IMediaSeeking::SetPositions 를 호출해도, 비디오 윈도우는 갱신되지 않는다. 시크 조작 후 윈도우를 갱신하려면 StopWhenReady 를 호출한다. 이 메서드는 그래프를 포즈 상태에 처리시켜, 포즈 조작이 완료하는 것을 기다려, 그래프를 정지상태태에 다시 처리 시킨다. 포즈 조작은 그래프의 데이터를 큐에 넣으므로, 비디오 렌더러는 새로운 프레임을 받아 표시한다.

이 메서드는 비동기이다. 별thread로 포즈가 완료할 때까지 대기한다. 호출원thread는 동작을 정지하지 않고, 애플리케이션이 사용자 입력에 응답할 수 있도록(듯이) 한다. 메서드가 돌아갔을 때, 포즈 조작이 완료하기 전이어도, 그래프의 논리 상태는 정지가 된다. 이 시점에서 IMediaControl::GetState 메서드를 호출하면 State_Stopped 가 돌아간다.

포즈 조작이 완료하기 전에, 애플리케이션으로부터 다른 상태 변경 커멘드 (포즈, 실행, 시크등)가 발행되면 새로운 커멘드는 보류 상태의 정지 커멘드를 캔슬한다. 포즈 조작은 완료하지만, 그래프는 정지하지 않는다.

참조

↑TOP