DirectShow DirectShow 에 대해 필터 그래프의 생성 그래프 생성의 개요   [목차열람] [주소복사] [슬롯비우기]
그래프 생성의 개요
 
Microsoft DirectX 9.0

그래프 생성의 개요

필터 그래프를 생성 하려면 , 우선 필터 그래프 매니저의 인스턴스를 생성 한다.

IGraphBuilder* pIGB;
HRESULT hr = CoCreateInstance(CLSID_FilterGraph,
    NULL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder,
    (void **) &pIGB);

필터 그래프 매니저는, 다음의 그래프 생성 메서드를 지원 한다.

이러한 메서드는, 다음과 같은 그래프 생성의 3 종류의 어프로치를 제공한다.

  1. 필터 그래프 매니저에 의한 그래프 전체의 생성.
  2. 필터 그래프 매니저에 의한 그래프의 일부의 생성.
  3. 애플리케이션에 의한 그래프 전체의 생성.

필터 그래프 매니저에 의한 그래프 전체의 생성

AVI, MPEG, WAV, 또는 MP3 등, 인식되고 있는 포맷으로 생성 된 파일을 재생하는 경우는,RenderFile 메서드를 사용한다. 이 방법에 대해서는, 「파일의 재생법」을 참조할것.

RenderFile 메서드는, 우선, 레지스트리내에서, 파일을 해석할 수 있는 소스 필터를 찾는다. 프로토콜 (파일명의 "http://" 등), 파일 확장자(extension), 또는 파일내의 정의 끝난 바이트 패턴을 사용해, 소스 필터를 특정한다. 더 자세한 정보는, 「커스텀 파일 타입의 등록」을 참조할것.

그래프의 나머지의 부분을 생성 하기 위해서, 필터 그래프 매니저는 반복적인 처리를 실시해, 출력 핀상에서 필터가 지원 하는 미디어 타입을 받아, 레지스트리로 그 미디어 타입을 입력으로서 받아들이는 필터를 검색한다. 검색을 좁혀, 필터의 우선 순위를 붙이기 위해서(때문에), 몇개의 조건을 사용한다.

필터 그래프 매니저는,필터 맵퍼 개체를 사용해 레지스트리를 검색한다.

각 필터를 추가 하면, 필터 그래프 매니저는, 필터를 전의 필터의 출력 핀에 접속하려고 한다. 필터는 접속이 가능한가 어떤가 및 접속 가능한 경우는 접속에 사용하는 미디어 타입을 결정하기 위한 네고시에이트를 실시한다. 새로운 필터를 접속할 수 없는 경우, 필터 그래프 매니저는 그 필터를 파기해, 다른 필터를 시험한다. 각 스트림이 렌더링 될 때까지, 이 처리가 속행된다.

필터 그래프 매니저에 의한 그래프의 일부의 생성

단순한 파일의 재생 이상의 처리를 실시하려면 , 애플리케이션으로 적어도 몇개의 그래프 생성 처리를 실시할 필요가 있다. 예를 들어, 비디오 캡춰 애플리케이션에서는, 캡춰 소스 필터를 선택해, 그래프에 추가할 필요가 있다. 데이터를 AVI 파일에 기입하는 경우는, AVI Mux 필터와 파일 라이터 필터를 그래프에 추가할 필요가 있다. 다만, 필터 그래프 매니저로 그래프를 생성 할 수 있는 경우도 있다. 예를 들어,Render 메서드를 호출해, 프리뷰용의 핀에 렌더링 할 수 있다.

애플리케이션에 의한 그래프 전체의 생성

상황에 따라서는, 애플리케이션이 각 필터를 추가 및 접속해, 그래프를 생성 해야 하는 것이 있다. 이러한 경우, 어느 필터를 그래프에 추가해야 할까가 명확하게 알고 있는 것이 많다. 이 어프로치에서는, 애플리케이션은 AddFilter 를 호출해 각 필터를 추가해, 필터 위에의 핀을 열거해,Connect 또는 ConnectDirect 의 어느쪽이든을 호출해 필터를 접속한다.

참조

↑TOP