블로그 이미지
대갈장군

calendar

1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

Notice

2009. 3. 17. 23:02 프로그래밍/DirectShow

앞서본 널 렌더링이나 필터 추가후 렌더링의 경우 RenderFile() 함수를 사용해서 자동으로 필터 그래프가 완성되도록 했으나 필터 렌더링은 필터의 Output 핀을 사용한 렌더링이다.

즉, 가장 세밀한 조작이 가능한 렌더링 방식이다. 그중에서도 소스 필터 자동 렌더링이 있는데 이는 RenderFile() 함수를 IGraphBuilder::AddSourceFilter() 함수와 IGraphBuilder::RenderFilter() 함수가 대체하는 방식이다.

1. 필터 그래프 매니저 생성
JIF(CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void**)&m_pGB);


2. AddSourceFilter() 함수로 소스 필터 추가하면서 pSourceFilter에 그 소스필터의 진입점(포인터) 얻어 오기
IBaseFilter *pSourceFilter;
JIF(m_pGB->AddSourceFilter(wFileName, wFileName, &pSourceFilter);


3. 필터 렌더링!
if(pSourceFilter != NULL)
      LIF(RenderFilter(m_pGB, pSourceFilter));


4. AddSourceFilter에 의해 추가로 생성된 필터 인터페이스 (리모컨) 삭제
SAFE_RELEASE(pSourceFilter);

근디... 자동 소스 필터 렌더링과 수동 소스 필터 렌더링은 그 차이가 크지 않네...

수동 소스 필터 렌더링은 우선적으로 소스로 사용할 필터를 추가시켜 놓고 자동 필터 렌더링과 마찬가지로 AddSourceFilter와 RenderFilter 함수를 차례로 호출하는 것일뿐 차이가 없다.

결국 정리하지만 자동 소스 필터 렌더링은 파일이나 URL를 이용해 AddSourceFilter() 를 수행하고 곧바로 RenderFilter를 이용해 Output Pins를 렌더링 한다.

반면 수동 소스 필터 렌더링은 소스 필터로 사용하고자 하는 필터를 우선 추가한 후, 필터들을 그래프에 추가시키고 그 다음에 AddSourceFilter()와 RenderFilter() 함수를 이용해 Pin 렌더링 수행.
posted by 대갈장군