DirectShow DirectShow 에 대해 DirectShow 에서의 이벤트 통지 이벤트의 취득   [목차열람] [주소복사] [슬롯비우기]
이벤트의 취득
 
Microsoft DirectX 9.0

이벤트의 취득

필터 그래프 매니저는 이벤트 통지를 지원 하는 3 개의 인터페이스를 공개하고 있다.

필터는, 필터 그래프 매니저에 대한 IMediaEventSink::Notify 메서드를 호출하는 것에 의해, 이벤트 통지를 송신한다. 이벤트 통지는, 이벤트의 타입을 정의하는 이벤트 코드와 부가 정보를 제공하는 2 개의 DWORD 파라미터로 구성된다. 이벤트 코드에 응해, 파라미터에는 포인터, 반환 코드, 기준 타임, 또는 그 외의 정보가 포함된다. 모든 이벤트 코드와 파라미터의 일람에 대해서는, 「이벤트 통지 코드」를 참조할것.

큐로부터 이벤트를 얻어오기 위해 애플리케이션은 필터 그래프 매니저에 대해서 IMediaEvent::GetEvent 메서드를 호출한다. 이 메서드는, 돌려주는 이벤트가 발생할 때까지, 또는 지정된 시간이 경과할 때까지 블록 한다. 큐내에 이벤트가 있어, 메서드가 이벤트 코드와 2 개의 이벤트 파라미터를 돌려주었다고 한다. 애플리케이션은,GetEvent 를 호출한 후 반드시 IMediaEvent::FreeEventParams 메서드를 호출해, 이벤트 파라미터에 관련된 리소스를 릴리즈 할 필요가 있다. 예를 들어, 파라미터는, 필터 그래프에 의해 할당된 BSTR 값인 경우가 있다.

다음 샘플 코드는, 큐로부터 이벤트를 얻어온다 방법의 개요를 나타내고 있다.

long evCode, param1, param2;
HRESULT hr;
while (hr = pEvent->GetEvent(&evCode, &param1, &param2, 0), SUCCEEDED(hr))
{
    switch(evCode) 
    { 
        // 처리하는 각종 이벤트에 대해, 애플리케이션 정의의
        // 함수를 호출한다.
    } 
    hr = pEvent->FreeEventParams(evCode, param1, param2);
}

이벤트에 대한 필터 그래프 매니저의 디폴트 처리를 오버라이드(override) 하려면 , 파라미터에 이벤트 코드를 지정한 IMediaEvent::CancelDefaultHandling 메서드를 호출한다. 디폴트 처리는,IMediaEvent::RestoreDefaultHandling 메서드를 호출하는 것에 의해 복원할 수 있다. 필터 그래프가 지정된 이벤트 코드에 대해서 디폴트 처리를 실행하지 않는 경우는, 이러한 메서드를 호출해도 효과는 없다.

↑TOP