UVC 디바이스에 대한 DShow Bridge 구현 지침
이 항목에서는 USB UVC(비디오 클래스) 사양을 준수하는 카메라 및 디바이스용 DShow Bridge를 구성하기 위한 구현 지침을 제공합니다. 이 플랫폼은 USB 버스 표준의 Microsoft OS 설명자를 사용하여 DShow Bridge를 구성합니다. 확장 속성 OS 설명자는 USB 표준 설명자의 확장이며 USB 디바이스에서 표준 사양을 통해 사용하도록 설정되지 않은 Windows 특정 디바이스 속성을 반환하는 데 사용됩니다.
개요
Microsoft 카메라 캡처 스택은 DirectShow라는 레거시 프레임워크 스택과 멀티미디어 Foundation이라는 최신 프레임워크로 구성됩니다. IHV 및 OEM은 두 파이프라인을 모두 만족시키기 위해 디바이스에 대한 구성 요소를 작성해야 했습니다.
DShow Bridge는 DShow 파이프라인을 Media Foundation 플랫폼과 연결하기 위한 목적으로 작성되었습니다. 이렇게 하면 IHV 및 OEM이 Windows 버전 1607 이상에서 MediaFoundation 및 DShow 애플리케이션으로 실행할 수 있는 드라이버를 작성할 수 있도록 진정한 범용 드라이버를 사용할 수 있습니다. DShow Bridge 옵트인을 사용하도록 설정하면 DShow 애플리케이션 및 공유 애플리케이션이 동일한 카메라 하드웨어를 동시에 공유할 수 있습니다.
IHV 및 OEM은 DShow 파이프라인을 관리하는 정책에서 예외가 필요할 수 있습니다. 파트너는 OS 설명자를 사용하여 다음 기능을 사용하도록 설정할 수 있습니다.
DShow Bridge 옵트인/옵트아웃: 디바이스는 필요에 더 적합한 파이프라인에 브리지를 옵트인하거나 옵트아웃할 수 있습니다. 최신 파이프라인은 보다 철저하게 문서화되어 있으며 여러 릴리스에서 OS에 추가된 기능을 활용합니다. 유지 관리 모드에 있는 레거시 파이프라인은 뒤쳐집니다.
FrameServer의 MJPEG 압축 해제: FrameServer는 카메라 디바이스를 가상화하는 서비스입니다. 이렇게 하면 디바이스의 핀을 여러 클라이언트 간에 공유할 수 있습니다. 최적화된 Media Foundation 압축 해제기가 있는 아키텍처는 이 기능을 사용하여 FrameServer에서 MJPEG를 디코딩할 수 있습니다. 압축되지 않은 YUY2(번역된 미디어 형식)는 여러 애플리케이션에 제공됩니다. 스트림은 여러 가능한 클라이언트에 대해 한 번만 압축 해제됩니다. 이렇게 하면 애플리케이션의 성능이 향상됩니다. 다음 다이어그램은 카메라 캡처 파이프라인을 보여 줍니다.
USB 카메라 디바이스를 패키징하는 OEM 및 IHV는 USB 버스 표준의 확장 속성 OS 기능 설명자 사양을 사용하여 UVC 드라이버에 대한 INF 파일 변경 내용에 의존하지 않고 DShow Bridge를 구성할 수 있습니다.
OS 설명자를 사용하면 디바이스가 USB 디바이스 또는 복합 디바이스에 대한 레지스트리 속성을 정의할 수 있습니다.
USB OS 설명자를 사용하여 DShow Bridges를 구성하려면 호스트 소프트웨어가 각 USB 디바이스 인터페이스에 대해 다음 레지스트리 키를 만들어야 합니다.
HKLM\SYSTEM\CurrentControlSet\Enum\USB\<DeviceVID&PID>\<DeviceInstance>\Device Parameters
DWORD: EnableDshowRedirection
EnableDshowRedirection 레지스트리 값은 아래 표에 설명된 대로 DShow Bridge를 구성하는 데 사용할 수 있는 비트 마스크 값입니다.
비트 마스크 | Description | 설명 |
---|---|---|
0x00000001 | DShow Bridge에 옵트인 | 0 – 옵트아웃 1 – 옵트인 |
0x00000002 | FrameServer에서 MJPEG 디코딩을 한 번 사용하도록 설정(아래 참고 참조) | 0 – MJPEG 압축 미디어 형식이 노출됨(작업 없음) 1 – MJPEG(YUY2)에서 번역된 압축되지 않은 미디어 형식 노출 |
참고
FrameServer에서 MJPEG 디코딩을 한 번 사용하도록 설정한 다음, 여러 애플리케이션에 압축되지 않은 번역된 미디어 형식(YUY2)이 제공됩니다. 스트림은 여러 가능한 클라이언트에 대해 한 번만 압축 해제됩니다. 이렇게 하면 애플리케이션의 성능이 향상됩니다.
예제 레이아웃
다음 사양에 대한 예제가 아래에 포함되어 있습니다.
Microsoft OS 확장 설명자 사양 1.0
Microsoft OS 2.0 설명자 사양
Microsoft OS 확장 속성 설명자 사양 버전 1.0
확장 속성 OS 설명자에는 두 가지 구성 요소가 있습니다.
고정 길이 헤더 섹션
헤더 섹션을 따르는 하나 이상의 가변 길이 사용자 지정 속성 섹션
헤더 섹션
헤더 섹션에서는 전체 길이 및 버전 번호를 포함하여 전체 확장 속성 설명자를 설명합니다.
Offset | 필드 | 크기(바이트) | 값 | Description |
---|---|---|---|---|
0 | dwLength | 4 | 0x0000004c | 10진수 76진수 |
4 | bcdVersion | 2 | 0x0100 | 버전 1.0 |
6 | wIndex | 2 | 0x005 | 확장 속성 OS 설명자 |
8 | wCount | 2 | 0x0001 | 하나의 사용자 지정 속성 |
사용자 지정 속성 섹션(1.0 설명자)
USB HID 디바이스의 확장 속성 OS 설명자에는 EnableDshowRedirection DWORD 레지스트리 키를 만드는 하나의 사용자 지정 속성 섹션이 있습니다.
Offset | 필드 | 크기(바이트) | 값 |
---|---|---|---|
0 | dwSize | 4 | 0x00000042(이 속성의 경우 66바이트) |
4 | dwPropertyDataType | 4 | 0x00000004(REG_DWORD_LITTLE_ENDIAN) |
8 | wPropertyNameLength | 2 | 0x0030 |
10 | bPropertyName | 48 | EnableDshowRedirection (유니코드 문자열) |
58 | dwPropertyDataLength | 4 | 0x00000004(Sizeof(DWORD)) |
62 | bPropertyData | 4 | 0x00000001(DWORD 데이터) |
Microsoft OS 2.0 설명자 사양
이 예제에서는 Microsoft 2.0 설명자 집합을 사용하여 Windows 버전에 적용되는 EnableDshowRedirection 의 단일 DWORD 레지스트리 값을 제공하는 방법을 보여 줍니다.
사용자 지정 속성 섹션(2.0 설명자)
Offset | 필드 | 크기(바이트) | 값 |
---|---|---|---|
0 | wLength | 2 | 이 설명자의 길이(바이트) |
4 | wDescriptorType | 2 | 0x00000004(REG_DWORD_LITTLE_ENDIAN) |
8 | wPropertyDataType | 2 | 0x0030 |
wPropertyNameLength | 2 | ||
10 | PropertyName | 변수 | 속성 이름의 길이 |
58 | dwPropertyDataLength | 2 | 속성 데이터의 길이 |
62 | PropertyData | 변수 | 속성 데이터 |
UCHAR Example2\_MSOS20DescriptorSetForFutureWindows\[0x48\] =
{
//
// Microsoft OS 2.0 Descriptor Set Header
//
0x0A, 0x00, // wLength - 12 bytes
0x00, 0x00, // MSOS20_SET_HEADER_DESCRIPTOR
0x00, 0x00, 0x0?, 0x06, // dwWindowsVersion – 0x06030000 for future Windows version
0x4A, 0x00, // wTotalLength – 72 bytes
//
// Microsoft OS 2.0 Registry Value Feature Descriptor
//
0x3E, 0x00, // wLength - 62 bytes
0x04, 0x00, // wDescriptorType – 5 for Registry Property
0x04, 0x00, // wPropertyDataType - 4 for REG_DWORD
0x30, 0x00, // wPropertyNameLength – 48 bytes
0x45, 0x00, 0x6E, 0x00, // Property Name - "EnableDshowRedirection"
0x61, 0x00, 0x62, 0x00,
0x6C, 0x00, 0x65, 0x00,
0x44, 0x00, 0x73, 0x00,
0x68, 0x00, 0x6F, 0x00,
0x77, 0x00, 0x52, 0x00,
0x65, 0x00, 0x64, 0x00,
0x69, 0x00, 0x72, 0x00,
0x65, 0x00, 0x63, 0x00,
0x74, 0x00, 0x69, 0x00,
0x6F, 0x00, 0x6E, 0x00,
0x00, 0x00, 0x00, 0x00,
0x04, 0x00, // wPropertyDataLength – 4 bytes
0x00, 0x00, 0x00, 0x00 // PropertyData – 0x00000003 (DShow Bridge is enabled and MJPEG is decoded in FrameServer)
}