DirectShow DirectShow 에 대해 플러그 인 distributor (PID)   [목차열람] [주소복사] [슬롯비우기]
플러그 인 distributor (PID)
 
Microsoft DirectX 9.0

플러그 인 distributor (PID)

플러그 인 distributor (PID)는, 필터 그래프 매니저의 기능을 확장하기 위한 방법이다. PID 는, 필터 그래프 매니저가 실행시에 집성 하는 COM 개체이다. 애플리케이션은, 필터 그래프 매니저를 통해서 PID 에의 액세스를 얻어온다.

필터 그래프 매니저에 대해서, 지원 하지 않는 인터페이스에 대해 조회되면 다음의 포맷을 사용해 레지스트리의 키가 검색된다.

HKEY_CLASSES_ROOT\Interface\IID\Distributor

IID 는, 인터페이스 식별자가 포함된 캐릭터 라인이다. 레지스트리에 엔트리가 존재하는 경우, 그 엔트리의 값에 의해, 인터페이스를 지원 하는 PID 의 클래스 식별자 (CLSID)가 정의된다. 필터 그래프 매니저는 PID 를 집성 해, 인터페이스 포인터를 돌려준다. 이것에 의해, PID 의 외부 IUnknown 로서 기능한다. 애플리케이션이 인터페이스상에서 메서드를 호출할 때는, 실제로는 PID 상에서 호출하고 있다. 그러나, PID 의 존재는 애플리케이션에 대해서는 투과적이다.

"distributor" 라고 하는 용어는, PID 가 필터 그래프 매니저의 인터페이스에 대해, 외부 IUnknown 포인터에 조회가 가능한 일로 유래하고 있다. PID 는 IFilterGraph::EnumFilters 메서드를 호출하는 것으로, 그래프의 필터를 열거해, 그러한 필터에 메서드의 호출을 배포할 수 있다. 이와 같이 해, PID 는 애플리케이션이 필터상에서 메서드를 호출하기 위한, 1 개의 컨트롤 포인트로서의 역할을 완수할 수가 있다.

필터 그래프 매니저가 PID 를 집성 할 때는,IDistributorNotify 인터페이스에 대해 PID 에 조회한다. PID 가 이 인터페이스를 지원 하고 있는 경우, 필터 그래프 매니저는 이 인터페이스를 사용해, 그래프에서의 변경에 대해 PID 에 통지한다.

커스텀 PID 를 처리 하기 위해서는, 집성을 지원 하는 COM 개체를 생성 한다. 이 개체는, 필터 그래프 매니저가 이미 지원 하고 있지 않는 인터페이스를 지원 해야 한다. 또, 옵션으로 IDistributorNotify 인터페이스를 지원 할 수도 있다.

PID 가 필터 그래프 매니저로부터 인터페이스 포인터를 얻어온다 경우는, 그것들을 곧바로 릴리즈 할 필요가 있다. 릴리즈 하지 않으면 순환 참조 카운트가 생성 되어 필터 그래프 매니저의 파기를 방해할 가능성이 있다. 어느 경우도, 필터 그래프 매니저가 PID 의 계속 시간을 제어하기 위해(때문에), 필터 그래프 매니저에서의 참조 카운트의 보관 유지는 불필요하다.

PID 는 필터 그래프 매니저에 의한 집성화를 위해서(때문에) 설계되고 있으므로, PID 의 생성자 메서드로 이것을 설정할 수도 있다. 외부 IUnknown 포인터가 NULL 일지 어떨지를 확인해, NULL 인 경우는, 에러 코드 VFW_E_NEED_OWNER 를 돌려준다. 「에러 코드와 성공 코드」를 참조할것. 또, 다른 개체가 PID 를 집성화하지 않게 하기 위한(해),IGraphBuilder 인터페이스에 대해 외부 IUnknown 포인터에 조회할 수 있다. 그 개체가 IGraphBuilder 를 공개하고 있지 않는 경우는, 에러 코드를 돌려준다.

↑TOP