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

IMediaControl::GetState

GetState 메서드는, 필터 그래프 상태 (포즈, 실행, 또는 정지)를 얻어온다.

상태는 반드시 동기 해 처리 하면 한정되지 않는다. 따라서, 이 메서드를 호출했을 때, 필터 그래프는 새로운 상태로 처리하고 있는 도중일지도 모른다. 그 경우, 처리이 완료하는지, 또는 지정된 타임 아웃 시간이 지날 때까지, 메서드는 동작을 정지한다.

구문

HRESULT GetState(
  LONG msTimeout,
  OAFilterState *pfs
);

파라미터

msTimeout

[in] 타임 아웃의 시간폭 (밀리 세컨드 단위). 또는 타임 아웃 시간이 무제한한 것을 지정하는 INFINITE.

pfs

[out] FILTER_STATE 열거의 멤버를 받는 변수의 포인터.

반환값

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

설명
S_OK 성공.
VFW_S_STATE_INTERMEDIATE 필터 그래프는 취득된 상태에 처리중.
VFW_S_CANT_CUE 필터 그래프는 포즈 하고 있지만, 데이터를 큐에 넣을 수가 없다.
E_FAIL 실패.

주의

애플리케이션은 이 메서드를 사용해 IMediaControl::Run 호출 후 재생이 시작 되었는지 어떠했는지를 확인할 수가 있다. 일반적으로, 애플리케이션은 필터 그래프를 어느 상태로 했는지를 트랙 하는 메카니즘을 자기 자신으로 가져야 하는 것이다. 보통 애플리케이션은 현재 상태를 사용해, 어느 사용자 인터페이스 컨트롤을 사용 가능하게 할까를 결정한다. 예를 들어, 그래프가 실행 상태로 처리하면 애플리케이션은 [재생] 버튼을 사용 불가로 해,[정지] 버튼과 [포즈] 버튼을 사용 가능하게 한다.

필터 그래프가 새로운 상태에 처리중의 경우는, 이전 상태는 아니고 새로운 상태를 돌려준다.

메서드가 동작을 정지하고 있을 때, 다른 thread로부터 호출해 상태를 변경 하면, 이 메서드는 에러를 돌려준다.

GetState 에서의 대기중에 thread는 메시지를 처리할 수 없기 때문에, 타임 아웃값에의 INFINITE 의 지정은 피하는 것. Windows 메시지를 처리하는 thread로부터 GetState 를 호출하는 경우는, 사용자 입력에의 응답에 지장이 없게, 가능한 한 짧은 대기 시간을 지정하는 것. 특히, 네트워크나 인터넷 경유로 소스가 스트림 되는 경우는, 상태의 처리이 완료하기까지 시간이 걸리기 때문에, 주의가 필요하다.

필터 그래프 상태의 더 자세한 정보는, 「필터 그래프의 데이터 플로우」를 참조할것.

참조

↑TOP