DirectShow DirectShow 의 사용법 DirectShow 의 기본 태스크 그래프 클럭의 설정   [목차열람] [주소복사] [슬롯비우기]
그래프 클럭의 설정
 
Microsoft DirectX 9.0

그래프 클럭의 설정

필터 그래프를 생성 할 때 필터 그래프 매니저는 자동적으로 그래프의 기준 클럭을 선택한다. 그래프의 모든 필터는 기준 클럭에 동기 된다. 특히, 렌더러 필터는 기준 클럭을 사용해, 각 샘플의 프레젠테이션 타임을 조사한다.

보통, 필터 그래프 매니저에 의한 기준 클럭의 선택을 애플리케이션이 오버라이드(override) 할 필요는 없다. 그러나, 오버라이드(override) 하는 경우는, 필터 그래프 매니저에 대해서 IMediaFilter::SetSyncSource 메서드를 호출한다. 이 메서드는, 클럭의 IReferenceClock 인터페이스의 포인터를 받는다. 그래프의 정지중에 메서드를 호출한다. 다음의 예는 클럭의 지정 방법을 나타내고 있다.

IGraphBuilder *pGraph = 0;
IReferenceClock *pClock = 0;

CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, 
    IID_IGraphBuilder, (void **) &pGraph);

// 그래프를 생성 한다.
pGraph->RenderFile(L"C:\\Example.avi", 0);

// 클럭을 생성 한다.
hr = CreateMyPrivateClock(&pClock);
if (SUCCEEDED(hr))
{
    // 그래프 클럭을 설정한다.
    IMediaFilter *pMediaFilter = 0;
    pGraph->QueryInterface(IID_IMediaFilter, (void**) &pMediaFilter);
    pMediaFilter->SetSyncSource(pClock);
    pClock->Release();
    pMediaFilter->Release();
}

이 예에서는, CreateMyPrivateClock 가 클럭을 생성 해,IReferenceClock 포인터를 돌려주는 애플리케이션 정의 함수인 것을 가정하고 있다.

또, NULL 값을 사용해 SetSyncSource 를 호출하면, 클럭을 사용하지 않고 필터 그래프를 실행하도록(듯이) 설정할 수 있다. 클럭이 없는 경우, 그래프는 가능한 한 고속으로 실행된다. 클럭이 없는 경우, 렌더러 필터는 샘플의 프레젠테이션 타임을 대기하지 않는다. 각 샘플은, 도착하자마자 렌더링 된다. 데이터를 고속으로 처리하는 경우, 실시간으로 프리뷰 하는 것보다, 클럭없이 그래프를 실행하도록(듯이) 설정하는 쪽이 도움이 된다.

참조

↑TOP