DirectShow DirectShow 에 대해 필터 그래프의 생성 인텔리전트 접속   [목차열람] [주소복사] [슬롯비우기]
인텔리전트 접속
 
Microsoft DirectX 9.0

인텔리전트 접속

인텔리전트 접속은, 필터 그래프 매니저가 필터 그래프를 생성 하기 위해서 사용하는 메카니즘이다. 인텔리전트 접속은, 필터를 선택해, 필터를 필터 그래프에 추가하기 위한 몇개의 관련하는 알고리즘으로 구성되어 있다. 애플리케이션 프로그래밍에서는, 인텔리전트 접속의 상세를 알고 있을 필요는 거의 없다. 특정의 필터 그래프를 생성 할 때에 문제가 발생해, 문제를 해결할 필요가 있는 경우나, 독자적인 필터를 생성 해 자동 그래프 생성으로 이용할 수 있도록(듯이) 하고 싶은 경우는, 이 섹션을 참조할것.

인텔리전트 접속에서는, 다음과 같은 IGraphBuilder 메서드가 사용된다.

Render 메서드는 그래프의 서브 섹션을 생성 한다. 접속되지 않은 출력 핀으로부터 시작해, 다운 스트림 방향으로 처리해, 필요에 따라서 새로운 필터를 추가한다. 최초의 필터는 이미 그래프에 포함되지 않으면 안 된다. 각 순서로,Render 메서드는 전의 필터에 접속할 수 있는 필터를 검색한다. 접속하는 필터가 복수의 출력 핀을 가지는 경우, 스트림은 분기 할 수 있다. 각 스트림이 렌더러를 가진 시점에서 검색은 종료한다. Render 메서드는, 처리에 막히면 최초로 돌아와 다른 필터세트를 사용한다.

각 출력 핀을 접속하기 위해서,Render 메서드는 다음의 처리를 실시한다.

  1. 핀이 IStreamBuilder 인터페이스를 지원 하고 있는 경우, 필터 그래프 매니저는 처리 전체를 핀의 IStreamBuilder::Render 메서드에 위임한다. 이 인터페이스를 공개하는 것에 의해, 핀은 렌더러까지의 그래프의 나머지의 부분을 생성 하는 처리를 맡는다. 다만, 이 인터페이스를 지원 하는 핀은 거의 없다.
  2. 필터 그래프 매니저는, 메모리내에 캐쉬된 필터가 있는 경우는, 그 필터를 사용한다. 인텔리전트 접속 처리를 통해서, 필터 그래프 매니저는 그 처리전의 순서로 사용된 필터를 캐쉬하고 있는 경우가 있다. 「동적 그래프 생성」도 참조할것.
  3. 필터 그래프내에 미접속의 입력 핀을 가지는 필터가 포함되어 있는 경우, 필터 그래프 매니저는 다음에 그 필터를 시험한다. Render 를 호출하기 전에 특정의 필터를 그래프에 추가해,Render 메서드로 특정의 필터를 사용하도록(듯이) 강제할 수 있다.
  4. 마지막으로, 필터 그래프 매니저는 IFilterMapper2::EnumMatchingFilters 메서드를 사용해 레지스트리를 검색한다. 필터 그래프 매니저는, 출력 핀의 우선하는 미디어 타입과 레지스트리에 등록되어 있는 미디어 타입을 조합한다.

각 필터는, 다른 필터와 상대적으로 필터의 우선 순위를 나타내는 수치인 "메리트" 와 함께 등록되어 있다. EnumMatchingFilters 메서드는, 메리트값의 순서에, 최저 메리트값인 MERIT_DO_NOT_USE + 1 의 필터까지를 돌려준다. 이 메서드는, MERIT_DO_NOT_USE 이하의 메리트값의 필터를 무시한다. 필터는, GUID 로 정의된 카테고리별로 그룹화 되고 있다. 카테고리 자체에도 메리트값이 있어,EnumMatchingFilters 메서드는, 카테고리내의 필터의 메리트값이 높은 경우에서도, 메리트값이 MERIT_DO_NOT_USE 이하의 카테고리를 무시한다.

요약 하면,Render 메서드는 다음의 순서로 필터를 시험한다.

  1. IStreamBuilder 를 사용한다.
  2. 캐쉬된 필터를 시험한다.
  3. 그래프내의 필터를 시험한다.
  4. 레지스트리내의 필터를 검색한다.

AddSourceFilter 메서드는, 지정된 파일을 렌더링 할 수 있는 소스 필터를 추가한다. 우선, 레지스트리내를 검색해, 프로토콜 (http:// 등), 파일 확장자(extension), 또는 정의 끝난 "체크 바이트" 를 조합한다. 체크 바이트는, 파일내의 특정의 오프셋(offset)에 있어, 특정의 패턴과 일치하는 바이트이다. 더 자세한 정보는, 「커스텀 파일 타입의 등록」을 참조할것. 이 메서드는, 적절한 소스 필터를 찾아내면 그 필터의 인스턴스를 생성 해, 그것을 그래프에 추가해, 파일명을 지정해 필터의 IFileSourceFilter::Load 메서드를 호출한다.

RenderFile 메서드는, 파일명으로부터 디폴트의 재생 그래프를 생성 한다. 내부적으로는, 이 메서드는 AddSourceFilter 를 사용해 적절한 소스 필터를 찾아,Render 를 사용해 그래프의 나머지를 생성 한다.

Connect 메서드가 출력 핀을 입력 핀에 접속한다. 이 메서드는,Render 메서드로 설명한 알고리즘의 바리에이션을 사용해, 필요에 따라서 중간 필터를 추가한다.

  1. 중간 필터를 사용하지 않고 , 필터간을 직접 접속하려고 한다.
  2. 캐쉬된 필터를 시험한다.
  3. 그래프내의 필터를 시험한다.
  4. 레지스트리내의 필터를 검색한다.

참조

↑TOP