확장 단위 Plug-In 아키텍처

USB 비디오 클래스 드라이버는 확장 단위를 USB Video KS 프록시 필터의 노드로 노출합니다. 확장 단위 컨트롤은 KSNODETYPE_DEV_SPECIFIC 형식인 노드에 설정된 속성으로 사용자 모드에서 추가로 노출됩니다. 속성 집합의 GUID는 확장 단위 설명자의 GUID와 일치합니다.

개별 확장 단위 컨트롤은 지속적으로 1에서 일부 최대값 n으로 번호가 매겨져야 합니다. 이러한 컨트롤은 확장 단위 속성 집합의 ID(속성 식별자)에 직접 매핑되며 IKsControl을 통해 표준 KSPROPERTY 요청을 사용하여 액세스할 수 있습니다.

애플리케이션의 속성 요청에 대한 응답으로 UVC 드라이버는 KSPROPERTY_MEMBERSHEADER 구조체의 MembersFlags 멤버가 KSPROPERTY_MEMBER_RANGES 단독으로 설정된 속성 값을 반환합니다. UVC는 임의의 길이의 단계별 범위 또는 확장 단위 기본값을 지원하지 않습니다.

확장 단위 속성을 애플리케이션에 노출하려면 COM API를 노출하는 사용자 모드 플러그 인 DLL을 작성할 수 있습니다. IKsControl 인터페이스를 사용하여 KS 속성 집합에 대한 요청을 수행하여 이 API를 구현할 수 있습니다. Vidcap.ax 특정 레지스트리 항목에 따라 노드 인터페이스 플러그 인을 자동으로 로드합니다. 애플리케이션은 IKsTopologyInfo::CreateNodeInstance 를 사용한 다음, 노드 개체에서 QueryInterface 를 호출하여 필요한 COM API를 가져와서 인터페이스에 액세스할 수 있습니다.

확장 단위 플러그 인을 작성하고 사용하려면 다음 요소가 필요합니다.

이 섹션의 코드 예제에서는 이러한 모든 요소를 보여 줍니다. 샘플 플러그 인 및 관련 샘플 애플리케이션 코드를 빌드하는 방법을 알아보려면 확장 단위 샘플 컨트롤 빌드를 참조하세요.

플러그 인 DLL이 등록되고 위에서 설명한 레지스트리 항목이 제공되면 Vidcap.ax 노드 instance 만들 때 관련 노드 인터페이스를 자동으로 로드합니다.

참고 Windows XP SP2를 기준으로 확장 단위 속성 집합은 필터가 아닌 노드에서만 지원됩니다.

레지스트리 고려 사항

플러그 인에서 내보낸 인터페이스의 IID 및 CLSID를 등록하려면 DLL 등록 또는 INF(디바이스별 설정 정보) 파일을 사용할 수 있습니다.

레지스트리 항목에 필요한 값을 보여 주는 샘플 .rgs 파일은UVC 확장 단위에 대한 샘플 레지스트리 항목을 참조하세요. 이 항목에서는 디바이스별 INF 파일을 작성하여 USB 비디오 디바이스를 설치하고 플러그 인 DLL을 등록하는 방법도 보여 줍니다. 특정 요구 사항에 따라 DLL 등록 또는 디바이스별 INF 파일을 선택할 수 있습니다.

계통도

다음 도식 다이어그램은 확장 단위 플러그 인 작성 및 사용과 관련된 다양한 모듈 간의 관계를 보여 줍니다. 특히 애플리케이션에서 플러그 인 DLL까지, 드라이버까지, 마지막으로 디바이스 자체의 확장 단위로의 연결을 추적합니다. 이 도식은 관련된 다양한 GUID도 보여 줍니다. 일치하는 색을 사용하면 동일한 값이 강조 표시됩니다.

확장 단위 플러그 인 및 관련 모듈을 보여 주는 다이어그램

이벤트 메커니즘

USB 비디오 클래스는 자동 업데이트 이벤트를 지원합니다. 여기서 디바이스는 호스트 드라이버에 해당 컨트롤의 변경 내용을 알 수 있습니다. Microsoft USB 비디오 클래스 드라이버는 애플리케이션이 자동 업데이트 이벤트에 등록하도록 하여 이 개념을 지원합니다. 업데이트를 가져오는 프로세스에는 다음 세 단계가 포함됩니다.

  1. KSEVENTSETID_VIDCAPNotify::KSEVENT_VIDCAP_AUTO_UPDATE 사용하여 업데이트 이벤트 등록

  2. 알림 이벤트 핸들에서 이벤트 수신 대기

  3. 완료되면 알림 취소