DirectShow DirectShow 에 대해 필터 그래프의 생성 인텔리전트 접속 [목차열람] [주소복사] [슬롯비우기] |
Microsoft DirectX 9.0 |
인텔리전트 접속은, 필터 그래프 매니저가 필터 그래프를 생성 하기 위해서 사용하는 메카니즘이다. 인텔리전트 접속은, 필터를 선택해, 필터를 필터 그래프에 추가하기 위한 몇개의 관련하는 알고리즘으로 구성되어 있다. 애플리케이션 프로그래밍에서는, 인텔리전트 접속의 상세를 알고 있을 필요는 거의 없다. 특정의 필터 그래프를 생성 할 때에 문제가 발생해, 문제를 해결할 필요가 있는 경우나, 독자적인 필터를 생성 해 자동 그래프 생성으로 이용할 수 있도록(듯이) 하고 싶은 경우는, 이 섹션을 참조할것.
인텔리전트 접속에서는, 다음과 같은 IGraphBuilder 메서드가 사용된다.
Render 메서드는 그래프의 서브 섹션을 생성 한다. 접속되지 않은 출력 핀으로부터 시작해, 다운 스트림 방향으로 처리해, 필요에 따라서 새로운 필터를 추가한다. 최초의 필터는 이미 그래프에 포함되지 않으면 안 된다. 각 순서로,Render 메서드는 전의 필터에 접속할 수 있는 필터를 검색한다. 접속하는 필터가 복수의 출력 핀을 가지는 경우, 스트림은 분기 할 수 있다. 각 스트림이 렌더러를 가진 시점에서 검색은 종료한다. Render 메서드는, 처리에 막히면 최초로 돌아와 다른 필터세트를 사용한다.
각 출력 핀을 접속하기 위해서,Render 메서드는 다음의 처리를 실시한다.
각 필터는, 다른 필터와 상대적으로 필터의 우선 순위를 나타내는 수치인 "메리트" 와 함께 등록되어 있다. EnumMatchingFilters 메서드는, 메리트값의 순서에, 최저 메리트값인 MERIT_DO_NOT_USE + 1 의 필터까지를 돌려준다. 이 메서드는, MERIT_DO_NOT_USE 이하의 메리트값의 필터를 무시한다. 필터는, GUID 로 정의된 카테고리별로 그룹화 되고 있다. 카테고리 자체에도 메리트값이 있어,EnumMatchingFilters 메서드는, 카테고리내의 필터의 메리트값이 높은 경우에서도, 메리트값이 MERIT_DO_NOT_USE 이하의 카테고리를 무시한다.
요약 하면,Render 메서드는 다음의 순서로 필터를 시험한다.
AddSourceFilter 메서드는, 지정된 파일을 렌더링 할 수 있는 소스 필터를 추가한다. 우선, 레지스트리내를 검색해, 프로토콜 (http:// 등), 파일 확장자(extension), 또는 정의 끝난 "체크 바이트" 를 조합한다. 체크 바이트는, 파일내의 특정의 오프셋(offset)에 있어, 특정의 패턴과 일치하는 바이트이다. 더 자세한 정보는, 「커스텀 파일 타입의 등록」을 참조할것. 이 메서드는, 적절한 소스 필터를 찾아내면 그 필터의 인스턴스를 생성 해, 그것을 그래프에 추가해, 파일명을 지정해 필터의 IFileSourceFilter::Load 메서드를 호출한다.
RenderFile 메서드는, 파일명으로부터 디폴트의 재생 그래프를 생성 한다. 내부적으로는, 이 메서드는 AddSourceFilter 를 사용해 적절한 소스 필터를 찾아,Render 를 사용해 그래프의 나머지를 생성 한다.
Connect 메서드가 출력 핀을 입력 핀에 접속한다. 이 메서드는,Render 메서드로 설명한 알고리즘의 바리에이션을 사용해, 필요에 따라서 중간 필터를 추가한다.
참조