USB 비디오 클래스 1.5 사양에 대한 Microsoft 확장
1 개요
1.1 요약
USB 비디오 클래스 사양에 대한 Microsoft 확장을 사용하면 새로운 컨트롤과 기능이 표준 형식으로 잘 정의된 프레임 메타데이터를 전달할 수 있습니다.
1.2 아키텍처 결정
UVC(USB 비디오 클래스) 프레임 메타데이터 지원은 ISOCH 및 BULK 엔드포인트에서 사용할 수 있습니다. 그러나 BULK 엔드포인트의 경우 모든 비디오 프레임 데이터가 BULK 엔드포인트의 단일 비디오 프레임 패킷으로 전송되기 때문에 메타데이터 크기는 240바이트로 제한됩니다.
UVC 메타데이터 지원은 프레임 기반 페이로드에서만 사용할 수 있습니다.
UVC 메타데이터 지원은 MF(Media Foundation) 캡처 파이프라인을 통해서만 사용할 수 있습니다.
UVC 메타데이터가 옵트인됩니다. 메타데이터 지원이 필요한 모든 IHV/OEM은 사용자 지정 INF 파일을 통해 사용하도록 설정해야 합니다.
UVC 메타데이터는 시스템 할당 메모리만 지원합니다. VRAM 또는 DX 표면은 지원되지 않습니다.
2 아키텍처 개요
2.1 설명
2.2.1 INF를 통한 기능 검색
2.2.1.1 스틸 이미지 캡처 – 메서드 2
일부 기존 UVC 디바이스는 USB 비디오 클래스 사양 웹 사이트에서 다운로드할 수 있는 UVC 1.5 클래스 specification.pdf 섹션 2.4.2.4(스틸 이미지 캡처)에 설명된 방법 2를 지원하지 않을 수 있습니다.
Windows 10 버전 1607 및 이전 버전에서는 디바이스가 UVC 1.5 사양에 따라 지원을 보급하더라도 캡처 파이프라인이 메서드 2를 사용하지 않았습니다.
Windows 10 버전 1703에서 이 메서드를 사용하는 디바이스는 카메라 드라이버에 사용자 지정 INF 파일을 사용해야 하지만 지정된 하드웨어에서 메서드 2 스틸 이미지 캡처를 사용하도록 설정하려면 사용자 지정 INF가 필요합니다).
참고: 카메라 드라이버는 Windows USBVIDEO.SYS 기반으로 하거나 사용자 지정 드라이버 이진 파일을 기반으로 할 수 있습니다.
사용자 지정 UVC 드라이버 또는 받은 편지함 UVC 드라이버를 기반으로 하는 사용자 지정 INF 파일에는 다음 AddReg 항목이 포함되어야 합니다.
EnableDependentStillPinCapture: REG_DWORD: 0x0(사용 안 함)에서 0x1(사용)
이 항목이 사용(0x1)으로 설정된 경우 캡처 파이프라인은 스틸 이미지 캡처에 메서드 2를 사용합니다(펌웨어가 UVC 1.5 사양에 지정된 대로 메서드 2에 대한 지원도 보급한다고 가정).
사용자 지정 INF 섹션의 예는 다음과 같습니다.
[USBVideo.NT.Interfaces]
AddInterface=%KSCATEGORY_CAPTURE%,GLOBAL,USBVideo.Interface
AddInterface=%KSCATEGORY_RENDER%,GLOBAL,USBVideo.Interface
AddInterface=%KSCATEGORY_VIDEO%,GLOBAL,USBVideo.Interface
AddInterface=%KSCATEGORY_RENDER_EXT%,GLOBAL,USBVideo.Interface
AddInterface=%KSCATEGORY_VIDEO_CAMERA%,GLOBAL,USBVideo.Interface
[USBVideo.Interface]
AddReg=USBVideo.Interface.AddReg
[USBVideo.Interface.AddReg]
HKR,,CLSID,,%ProxyVCap.CLSID%
HKR,,FriendlyName,,%USBVideo.DeviceDesc%
HKR,,RTCFlags,0x00010001,0x00000010
HKR,,EnableDependentStillPinCapture,0x00010001,0x00000001
2.2.2 확장 단위 컨트롤
새 컨트롤을 사용하도록 설정하기 위한 Microsoft의 USB 비디오 클래스 사양 확장은 GUID MS_CAMERA_CONTROL_XU(Microsoft-XU라고 함)로 식별되는 확장 단위를 통해 수행됩니다.
// {0F3F95DC-2632-4C4E-92C9-A04782F43BC8}
DEFINE_GUID(MS_CAMERA_CONTROL_XU,
0xf3f95dc, 0x2632, 0x4c4e, 0x92, 0xc9, 0xa0, 0x47, 0x82, 0xf4, 0x3b, 0xc8);
디바이스 펌웨어에 의해 구현된 Microsoft-XU에는 다음 하위 섹션에 정의된 새 컨트롤이 포함되어 있습니다. 재정의 정의가 해당 컨트롤에 대해 명시적으로 지정되지 않는 한 다음 요청 정의는 이러한 모든 컨트롤에 적용됩니다. D3, D4, GET_INFO 등의 정의는 UVC 1.5 클래스 specification.pdf 참조하세요.
GET_INFO 요청은 자동 업데이트 및 비동기 기능 없이 컨트롤을 보고해야 합니다(예: D3 및 D4 비트는 0으로 설정해야 합니다).
GET_LEN 요청은 이 컨트롤에 대한 페이로드의 최대 길이(wLength)를 보고해야 합니다.
GET_RES 요청은 qwValue/dwValue에 대한 해결 방법(단계 크기)을 보고해야 합니다. 다른 모든 필드는 0으로 설정해야 합니다.
GET_MIN 요청은 qwValue/dwValue에 대해 지원되는 최소 값을 보고해야 합니다. 다른 모든 필드는 0으로 설정해야 합니다.
GET_MAX 요청은 qwValue/dwValue에 대해 지원되는 최대 값을 보고해야 합니다. 또한 지원되는 모든 플래그는 bmControlFlags에서 1로 설정되어야 합니다. 다른 모든 필드는 0으로 설정해야 합니다.
GET_DEF 및 GET_CUR 요청은 qwValue/dwValue 및 bmControlFlags 필드에 대해 각각 기본 및 현재 설정을 보고해야 합니다. 다른 모든 필드는 0으로 설정해야 합니다.
모든 필드를 설정한 후 호스트에서 SET_CUR 요청이 발급됩니다.
다음 표에서는 Microsoft-XU의 컨트롤 선택기를 해당 값과 확장 단위 설명자의 bmControls 필드에 대한 비트 위치에 매핑합니다.
컨트롤 선택기 | 값 | 비트 위치 (bmControls 필드) |
---|---|---|
MSXU_CONTROL_UNDEFINED | 0x00 | 해당 없음 |
MSXU_CONTROL_FOCUS | 0x01 | D0 |
MSXU_CONTROL_EXPOSURE | 0x02 | D1 |
MSXU_CONTROL_EVCOMPENSATION | 0x03 | D2 |
MSXU_CONTROL_WHITEBALANCE | 0x04 | D3 |
나중에 사용하기 위해 예약됩니다. | 0x05 | D4 |
MSXU_CONTROL_FACE_AUTHENTICATION | 0x06 | D5 |
MSXU_CONTROL_CAMERA_EXTRINSICS | 0x07 | D6 |
MSXU_CONTROL_CAMERA_INTRINSICS | 0x08 | D7 |
MSXU_CONTROL_METADATA | 0x09 | D8 |
MSXU_CONTROL_IR_TORCH | 0x0A | D9 |
MSXU_CONTROL_DIGITALWINDOW | 0X0B | D10 |
MSXU_CONTROL_DIGITALWINDOW_CONFIG | 0X0C | D11 |
MSXU_CONTROL_VIDEO_HDR | 0x0d | D12 |
MSXU_CONTROL_FRAMERATE_THROTTLE | 0x0E | D13 |
MSXU_CONTROL_FIELDOFVIEW2_CONFIG | 0x0F | D14 |
MSXU_CONTROL_FIELDOFVIEW2 | 0x10 | D15 |
2.2.2.1 취소 가능한 컨트롤
취소 가능한 컨트롤은 자동 업데이트 기능을 사용하여 여기에 정의됩니다.
GET_INFO 요청은 자동 업데이트 컨트롤과 같은 컨트롤을 보고해야 하지만(예: D3 비트는 1로 설정해야 합니다) 비동기 컨트롤로 보고하지 않습니다(예: D4 비트는 0으로 설정해야 합니다).
이러한 제어의 경우 새 값(bmOperationFlags:D0 비트가 0으로 설정된 SET_CUR(NORMAL) 요청)을 설정하거나 이전 SET_CUR(NORMAL) 요청(bmOperationFlags:D0 비트가 1로 설정된 SET_CUR(CANCEL) 요청)을 취소하기 위해 SET_CUR 요청을 실행할 수 있습니다. 요청이 수신되는 즉시 디바이스에서 SET_CUR 요청을 완료해야 합니다(하드웨어가 구성되지 않았거나 요청된 새 설정에 수렴되지 않은 경우에도). 각 SET_CUR(NORMAL) 요청에 대해 디바이스는 새 설정이 적용되거나 SET_CUR(CANCEL) 요청이 도착할 때 발생하는 이 컨트롤에 대한 해당 제어 변경 인터럽트를 생성합니다. 이 인터럽트는 도착할 때까지 SET_CUR(NORMAL) 요청이 진행 중인 것으로 간주됩니다. SET_CUR(NORMAL) 요청이 진행 중이면 이 특정 컨트롤에 대한 추가 SET_CUR(NORMAL) 요청이 실패합니다. SET_CUR(CANCEL) 요청은 항상 성공해야 합니다. 취소할 항목이 없으면 디바이스는 아무 작업도 수행하지 않습니다.
컨트롤 변경 인터럽트 페이로드는 SET_CUR(NORMAL)에서 지정한 설정이 적용된 경우(예: 수렴성 발생) 비트 bmOperationFlags:D0를 0 으로 설정하고, SET_CUR(NORMAL) 요청 이후에 발생한 SET_CUR(CANCEL) 요청으로 인해 설정이 적용되지 않은 경우 1로 설정해야 합니다(예: 수렴이 아직 발생하지 않음).
2.2.2.2 포커스 컨트롤
이 컨트롤을 사용하면 호스트 소프트웨어에서 카메라에 대한 포커스 설정을 지정할 수 있습니다. 비디오 컨트롤 인터페이스와 연결된 모든 비디오 스트리밍 인터페이스의 모든 엔드포인트에 영향을 주는 전역 컨트롤입니다.
이 컨트롤은 취소 가능한 컨트롤로 작동해야 합니다(GET_INFO 요청 요구 사항 및 SET_CUR 요청의 기능 동작은 섹션 2.2.2.1 참조).
GET_MAX 요구 사항: 이 컨트롤은 bmControlFlags에서 비트 D0, D1, D2, D8 및 D18에 대한 지원을 보급해야 합니다.
GET_DEF 요구 사항: bmControlFlags의 기본값은 D0 및 D18을 1로 설정하고 dwValue를 0으로 설정해야 합니다.
GET_CUR/SET_CUR 요청의 경우 bmControlFlags 필드에 다음 제한이 적용됩니다.
D0, D1 및 D8 비트 중에서 하나의 비트만 설정할 수 있습니다. D2 비트가 설정된 경우에도 해당 설정이 유효하지 않습니다.
D16, D17, D18, D19 및 D20 중 하나의 비트만 설정할 수 있으며 설정되는 비트도 유효하지 않습니다.
D1은 현재 정의된 다른 모든 비트(D0, D2, D8, D16, D17, D18, D19 및 D20)와 호환되지 않습니다.
D2는 D1 및 D8과 호환되지 않습니다.
D0이 설정되지 않은 경우 D2는 D16, D17, D18, D19 및 D20과 호환되지 않습니다.
2.2.2.3 노출 제어
이 컨트롤을 사용하면 호스트 소프트웨어에서 카메라에 대한 노출 설정을 지정할 수 있습니다. 비디오 컨트롤 인터페이스와 연결된 모든 비디오 스트리밍 인터페이스의 모든 엔드포인트에 영향을 주는 전역 컨트롤입니다.
GET_INFO 요청은 이 컨트롤을 비동기 컨트롤로 보고해야 하지만(예: D4 비트는 1로 설정해야 합니다) 자동 업데이트 컨트롤로 보고하지 않습니다(예: D3 비트는 0으로 설정해야 합니다).
GET_MAX 요구 사항: 이 컨트롤은 bmControlFlags에서 비트 D0, D1 및 D2에 대한 지원을 보급해야 합니다.
GET_DEF 요구 사항: bmControlFlags의 기본값은 D0을 1로 설정하고 qwValue를 0으로 설정해야 합니다.
GET_CUR/SET_CUR 요청의 경우 bmControlFlags 필드에 다음 제한이 적용됩니다.
- D0, D1 및 D2 비트 중 하나 이상의 비트가 설정되어야 합니다.
- D1은 D0 및 D2와 호환되지 않습니다.
2.2.2.4 EV 보정 제어
이 컨트롤을 사용하면 호스트 소프트웨어에서 카메라에 대한 EV 보정 설정을 지정할 수 있습니다. 비디오 컨트롤 인터페이스와 연결된 모든 비디오 스트리밍 인터페이스의 모든 엔드포인트에 영향을 주는 전역 컨트롤입니다.
GET_INFO 요청은 이 컨트롤을 비동기 컨트롤로 보고해야 하지만(예: D4 비트는 1로 설정해야 합니다) 자동 업데이트 컨트롤로 보고하지 않습니다(예: D3 비트는 0으로 설정해야 합니다).
GET_RES 요청은 bmControlFlags에서 해당 비트를 설정하여 지원되는 모든 해결 방법(단계 크기)을 보고해야 합니다. 다른 모든 필드는 0으로 설정해야 합니다.
GET_MIN 및 GET_MAX 요청은 dwValue에 대해 지원되는 최소값과 최대값을 보고해야 합니다. 비트 D4(1단계 크기를 나타낸다)는 bmControlFlags에 설정된 유일한 비트여야 합니다. 다른 모든 필드는 0으로 설정해야 합니다.
GET_DEF, GET_CUR SET_CUR 요청은 섹션 2.2.2.1의 정의를 따르지만 필드 bmControlFlags에 대한 D0, D1, D2, D3 및 D4 비트 중 하나만 설정해야 합니다. 또한 GET_DEF 요청은 dwValue 를 0으로 설정해야 합니다.
2.2.2.5 화이트 밸런스 컨트롤
이 컨트롤을 사용하면 호스트 소프트웨어에서 카메라에 대한 화이트 밸런스 설정을 지정할 수 있습니다. 비디오 컨트롤 인터페이스와 연결된 모든 비디오 스트리밍 인터페이스의 모든 엔드포인트에 영향을 주는 전역 컨트롤입니다.
GET_INFO 요청은 이 컨트롤을 비동기 컨트롤로 보고해야 하지만(예: D4 비트는 1로 설정해야 합니다) 자동 업데이트 컨트롤로 보고하지 않습니다(예: D3 비트는 0으로 설정해야 합니다).
GET_RES, GET_MIN GET_MAX 요청은 섹션 2.2.2.1의 정의를 따르지만 dwValueFormat을 1로 설정해야 합니다.
GET_MAX 요구 사항: 이 컨트롤은 bmControlFlags에서 비트 D0, D1 및 D2에 대한 지원을 보급해야 합니다.
GET_DEF 요구 사항: bmControlFlags의 기본값은 D0을 1로 설정하고 dwValueFormat 및 dwValue를 0으로 설정해야 합니다.
GET_CUR/SET_CUR 요청의 경우 bmControlFlags 필드에 다음 제한이 적용됩니다.
- D0, D1 및 D2 비트 중 하나 이상의 비트가 설정되어야 합니다.
- D1은 D0 및 D2와 호환되지 않습니다.
2.2.2.6 얼굴 인증 제어
이 컨트롤을 사용하면 호스트 소프트웨어에서 카메라가 얼굴 인증에 사용되는 스트리밍 모드를 지원하는지 여부를 지정할 수 있습니다. 이 컨트롤에 대한 지원은 카메라가 얼굴 인증을 할 수 있음을 의미합니다. 그렇지 않으면 이 컨트롤이 지원되지 않습니다.
이 컨트롤은 IR(Infra-Red) 데이터를 생성할 수 있는 카메라에만 적용되며 지정된 스트리밍 인터페이스(비디오 컨트롤 인터페이스와 연결된 모든 비디오 스트리밍 인터페이스의 하위 집합)에만 적용됩니다.
GET_RES 및 GET_MIN 요청은 bNumEntries가 0으로 설정된 필드를 보고해야 하므로 추가 필드가 없습니다.
GET_MAX 요청의 경우 bmControlFlags 필드에서 비트가 1로 설정되면 해당 스트리밍 인터페이스에 대해 해당 모드가 지원됨을 나타냅니다. GET_MAX 요청 출력은 D1 또는 D2를 사용할 수 있는 스트리밍 인터페이스만 모두 나열해야 합니다(예: 스트리밍 인터페이스가 D1 또는 D2를 사용할 수 있는 경우 나열됩니다. 그렇지 않으면 나열되지 않음). 또한 스트리밍 인터페이스는 D1과 D2를 모두 사용할 수 있도록 보급되지 않습니다. 스트리밍 인터페이스가 범용 방식으로 사용하기 위한 경우(예: 얼굴 인증 목적 외) D0는 해당 스트리밍 인터페이스에 대해 1로 설정되어야 합니다(D1/D2 외에).
GET_DEF/GET_CUR/SET_CUR 요청의 경우 bmControlFlags 필드에서 비트가 1로 설정되면 해당 스트리밍 인터페이스에 대해 해당 모드가 선택되었음을 나타냅니다. 이러한 요청에서 특정 스트리밍 인터페이스에 대해 1비트(D0, D1 및 D2 중)만 설정해야 합니다. 기본 선택(구현별)을 반환하는 GET_DEF 요청의 경우 스트리밍 인터페이스도 범용 방식으로 사용하도록 의도된 경우(예: 얼굴 인증 목적 외), D0은 해당 스트리밍 인터페이스에서 기본적으로 1로 설정되어야 합니다. 그렇지 않으면 D1 또는 D2(둘 다 아님)는 기본적으로 1로 설정되어야 합니다. GET_DEF/GET_CUR 요청 출력에는 GET_MAX 요청 출력에 나열된 모든 스트리밍 인터페이스에 대한 정보가 포함되어야 하지만 SET_CUR 요청에는 GET_MAX 요청 출력에 나열된 스트리밍 인터페이스의 하위 집합만 포함될 수 있습니다.
예제:
카메라에 숫자 0x03, 0x05, 0x08 및 0x0b 있는 4개의 비디오 스트리밍 인터페이스가 있다고 가정해 보겠습니다. 여기서 비디오 스트리밍 인터페이스 0x05는 각각 RGB 데이터를 생성하고 다시 기본 3개의 비디오 스트리밍 인터페이스는 IR 데이터를 생성합니다. IR 데이터를 생성하는 스트리밍 인터페이스 중에서 스트리밍 인터페이스 0x03 및 0x0b 모두 D1을 사용할 수 있지만 0x03 스트리밍 인터페이스도 D0을 사용할 수 있다고 가정해 보겠습니다. 이 예제에서 얼굴 인증 컨트롤은 번호가 매겨진 0x03 및 0x0b 스트리밍 인터페이스에만 적용되므로 이러한 인터페이스만 요청에 표시됩니다.
GET_MAX 요청에 대한 출력은 다음과 같습니다.
GET_DEF 요청에 대한 출력은 다음과 같습니다.
스트리밍 인터페이스 0x03 설정을 D1로 변경하는 SET_CUR 요청은 다음과 같습니다.
위의 SET_CUR 요청 이후의 GET_CUR 요청에 대한 출력은 다음과 같습니다.
2.2.2.7 카메라 내장 컨트롤
이 컨트롤을 사용하면 호스트 소프트웨어가 비디오 컨트롤 인터페이스와 연결된 비디오 스트리밍 인터페이스의 엔드포인트에 대한 카메라 외생 데이터를 가져올 수 있습니다. 따라서 각 엔드포인트에 대해 가져온 데이터는 특성 MFStreamExtension_카메라 해당 스트림에 대한 특성 저장소의Extrinsics(IMFDeviceTransform::GetOutputStreamAttributes 호출을 사용하여 획득됨)로 표시됩니다.
GET_RES, GET_MIN, GET_MAX GET_CUR 요청은 bNumEntries가 0으로 설정된 필드를 보고해야 하므로 추가 필드가 없습니다.
GET_DEF 요청은 사용 가능한 외설 정보가 있는 모든 엔드포인트를 나열해야 합니다.
예제:
카메라에 숫자 0x03, 0x05 및 0x08 있는 세 개의 비디오 스트리밍 인터페이스가 있다고 가정해 보겠습니다. 여기서 비디오 스트리밍 인터페이스 0x05 모든 비디오 스트리밍 인터페이스에서 지원하는 비디오 캡처 외에도 메서드 2를 사용하여 스틸 이미지 캡처를 지원합니다. 이러한 스트리밍 인터페이스 중에서 스트리밍 인터페이스를 0x05 가정해 보겠습니다. 스트리밍 인터페이스 0x03 사용할 수 있는 외설 정보가 없는 동안 0x08 사용할 수 있는 기본 정보가 있습니다.
이 예제에서 GET_DEF 요청에 대한 출력은 다음과 같습니다.
2.2.2.8 카메라 내장 함수 제어
이 컨트롤을 사용하면 호스트 소프트웨어가 비디오 컨트롤 인터페이스와 연결된 비디오 스트리밍 인터페이스의 엔드포인트에 대한 카메라 내장 데이터를 가져올 수 있습니다. 따라서 각 엔드포인트에 대해 가져온 데이터는 특성 MFStreamExtension_Pinhole카메라 해당 스트림에 대한 특성 저장소의Intrinsics(IMFDeviceTransform::GetOutputStreamAttributes 호출을 사용하여 획득됨)로 표시됩니다.
GET_RES, GET_MIN, GET_MAX GET_CUR 요청은 bNumEntries가 0으로 설정된 필드를 보고해야 하므로 추가 필드가 없습니다.
GET_DEF 요청은 사용 가능한 내장 정보가 있는 모든 엔드포인트를 나열해야 합니다.
예제:
카메라에 숫자 0x03, 0x05 및 0x08 있는 세 개의 비디오 스트리밍 인터페이스가 있다고 가정해 보겠습니다. 여기서 비디오 스트리밍 인터페이스 0x05 모든 비디오 스트리밍 인터페이스에서 지원하는 비디오 캡처 외에도 메서드 2를 사용하여 스틸 이미지 캡처를 지원합니다. 이러한 스트리밍 인터페이스 중에서 스트리밍 인터페이스를 0x05 가정하고 0x08 스트리밍 인터페이스에 사용할 수 있는 내장 정보가 0x03 기본 정보를 사용할 수 없다고 가정해 보겠습니다.
이 예제에서 GET_DEF 요청에 대한 출력은 다음과 같습니다.
2.2.2.9 메타데이터 컨트롤
이 컨트롤을 사용하면 호스트 소프트웨어가 카메라에서 생성된 메타데이터를 쿼리하고 제어할 수 있습니다. 비디오 컨트롤 인터페이스와 연결된 모든 비디오 스트리밍 인터페이스의 모든 엔드포인트에 영향을 주는 전역 컨트롤입니다.
이 컨트롤은 카메라 드라이버에 의해 KSPROPERTY_CAMERACONTROL_EXTENDED_METADATA 매핑됩니다.
SET_CUR 요청이 펌웨어에서 지원되는 경우 다음이 적용됩니다.
GET_MIN GET_DEF 요청은 필드 dwValue 를 0으로 설정해야 합니다.
GET_RES 요청은 GET_MAX 요청에서 보고한 값과 동일한 값으로 필드 dwValue 를 보고해야 합니다.
dwValue가 0으로 설정된 SET_CUR 요청을 받으면 카메라는 메타데이터를 생성하지 않습니다. dwValue가 GET_MAX 요청에서 보고한 값과 동일한 값으로 설정된 SET_CUR 요청을 받으면 카메라는 메타데이터를 생성할 수 있으며 이러한 메타데이터의 크기는 프레임에 대해 dwValue를 초과할 수 없습니다.
SET_CUR 요청이 펌웨어에서 지원되지 않는 경우 다음이 적용됩니다.
GET_MIN GET_DEF 요청은 GET_MAX 요청에서 보고한 값과 동일한 값으로 필드 dwValue 를 보고해야 합니다.
GET_RES 요청은 필드 dwValue를 0으로 설정하여 보고해야 합니다.
카메라는 메타데이터를 생성할 수 있으며 이러한 메타데이터의 총 크기는 GET_MAX 요청에 의해 보고된 dwValue를 초과할 수 없습니다. 즉, 모든 프레임에 대해 UsbVideoHeader 메타데이터 페이로드의 크기가 1024바이트보다 적습니다.
UsbVideoHeader 메타데이터 페이로드는 sizeof(KSCAMERA_METADATA_ITEMHEADER) + sizeof(KSTREAM_UVC_METADATA) 또는 24바이트입니다.
생성된 메타데이터는 섹션 2.2.3에 설명된 Microsoft 표준 형식 메타데이터를 준수해야 합니다.
2.2.2.10 IR 토치 제어
이 컨트롤은 IR LED 하드웨어가 제어할 수 있는 정도를 보고하고 제어할 수 있는 기능을 제공하는 유연한 수단을 제공합니다. 이 컨트롤은 카메라에 연결된 IR 램프에 전원을 조정하여 비디오 제어 인터페이스와 연결된 모든 비디오 스트리밍 인터페이스의 모든 엔드포인트에 영향을 주는 전역 컨트롤입니다.
이 컨트롤은 카메라 드라이버에 의해 KSPROPERTY_CAMERACONTROL_EXTENDED_IRTORCHMODE 매핑됩니다.
다음이 적용됩니다.
GET_LEN 요청은 8의 값을 보고해야 한다.
GET_INFO 요청은 3의 값을 보고해야 한다. 이 값은 GET_CUR 및 SET_CUR 지원하는 동기 컨트롤을 나타냅니다.
GET_MIN 요청은 필드 dwMode 를 0 으로 설정하고 dwValue 를 최소 전력을 나타내는 값으로 설정해야 합니다. 전원 수준이 0이면 OFF를 나타낼 수 있지만 최소 작동 전원 수준은 0이 아니어야 합니다.
GET_RES 요청은 필드 dwMode 를 0 으로 설정하고 dwValue가 GET_MAX(dwValue ) – GET_MIN(dwValue) 및 GET_MAX(dwValue) – GET_MIN(dwValue)가 해당 값으로 균등하게 나눌 수 있도록 하는 숫자로 설정되어야 합니다. dwValue 는 0이 아닐 수 있습니다.
GET_MAX 요청은 이 컨트롤의 기능을 식별하기 위해 비트 D[0-2]가 설정된 필드 dwMode 집합을 보고해야 합니다. dwMode 에는 OFF가 지원됨을 나타내는 비트 D0 집합이 있어야 하며 활성 상태를 지원하는 하나 이상의 다른 비트 집합이 있어야 합니다. dwValue 는 정상 전원을 나타내는 값으로 설정해야 합니다.
GET_DEF 요청은 스트리밍이 시작되기 전에 시스템이 있어야 하는 기본 모드로 설정된 필드 dwMode 를 보고해야 합니다. dwMode 는 2(ON) 또는 4(ALTERNATING)로 설정해야 합니다. dwValue 는 FaceAuth 컨트롤에 일반적으로 사용되는 전원 수준으로 설정해야 합니다. dwValue 는 제조업체에서 정의합니다.
GET_CUR 요청은 현재 작동 모드로 설정된 필드 dwMode 를 보고하고 dwValue 를 현재 조명으로 설정해야 합니다.
SET_CUR 요청이 수신되면 IR 토치는 요청된 운영 모드를 사용하여 조명을 배율 강도로 설정합니다.
IR Torch는 모든 프레임에 대한 MF_CAPTURE_METADATA_FRAME_ILLUMINATION 특성을 내보내야 합니다. 디바이스 MFT를 통해 또는 카메라의 메타데이터 페이로드에 MetadataId_FrameIllumination 특성을 포함하여 이를 제공할 수 있습니다. 섹션 2.2.3.4.4를 참조하세요.
이 메타데이터의 유일한 목적은 프레임이 켜지는지 여부를 나타내는 것입니다. 이는 KSPROPERTY_CAMERACONTROL_EXTENDED_FACEAUTH_MODE DDI 및 섹션 2.2.2.6에 정의된 MSXU_FACE_AUTHENTICATION_CONTROL 필요한 것과 동일한 메타데이터입니다.
2.2.2.11 디지털 창 제어
디지털 창은 카메라가 스트리밍되는 동안 카메라의 보기 및 확대/축소 필드를 지정합니다. 이 컨트롤은 팬, 기울기 및 확대/축소를 대체할 수 있습니다. 이 컨트롤은 카메라가 적극적으로 스트리밍하는 동안에만 적용됩니다.
이 컨트롤은 모든 유형의 카메라에서 사용할 수 있으며 스트리밍되는 미디어 유형과는 독립적입니다.
이 컨트롤을 사용하면 호스트 소프트웨어가 카메라와 연결된 디지털 창을 쿼리하고 제어할 수 있습니다.
비디오 컨트롤 인터페이스와 연결된 모든 비디오 스트리밍 인터페이스의 모든 엔드포인트에 영향을 주는 전역 컨트롤입니다. ISP에서 사용하는 픽셀 데이터의 원본을 조정합니다. 여기에는 메서드 2와 메서드 3이 여전히 핀을 캡처하는 것이 포함됩니다.
이 컨트롤은 받은 편지함 카메라 드라이버에서 KSPROPERTY_CAMERACONTROL_EXTENDED_DIGITALWINDOW 매핑됩니다.
다음이 적용됩니다.
GET_LEN 요청은 16의 값을 보고해야 한다.
GET_INFO 요청은 3의 값을 보고해야 한다. 이 값은 GET_CUR 및 SET_CUR 지원하는 동기 컨트롤을 나타냅니다.
GET_MIN 요청은 필드 dwMode를 0으로 설정하고 OriginX및 OriginY를 0.0으로 설정하고 WindowSize를 1.0으로 설정해야 합니다. 이 요청은 현재 사용되지 않습니다.
GET_RES 요청은 필드 dwMode를 0으로 설정하고 OriginX및 OriginY를 0.0으로 설정하고 WindowSize를 1.0으로 설정해야 합니다. 이 요청은 현재 사용되지 않습니다.
GET_MAX 요청은 비트 D0가 설정된 필드 dwMode 집합을 보고하여 이 컨트롤의 기능을 식별해야 합니다. 값이 0이면 수동 모드만 지원됨을 나타냅니다. 값이 1이면 자동 얼굴 프레임 모드가 지원됨을 나타냅니다. 그러나 나머지 필드는 사용되지 않습니다. 그러나 OriginX 및 OriginY를 0.0으로 설정하고 WindowSize를 1.0으로 설정하는 것이 좋습니다.
GET_DEF 요청은 필드 dwMode를 0으로 설정하고 OriginX및 OriginY를 0.0으로 설정하고 WindowSize를 1.0으로 설정해야 합니다. 항상 기본 창입니다.
GET_CUR 요청은 현재 작동 모드로 설정된 필드 dwMode 를 보고해야 하며 OriginX, OriginY 및 WindowSize 는 현재 디지털 창을 설명합니다.
SET_CUR 요청이 수신되면 카메라는 선택한 운영 모드 및 디지털 창과 일치하도록 해당 보기 필드를 조정합니다.
자동 얼굴 프레이밍 모드를 선택하면 카메라는 장면 의 우세한 얼굴을 완전히 포괄하는 창을 선택하고 전달된 OriginX, OriginY 및 WindowSize 는 무시됩니다. 얼굴을 찾을 수 없으면 기본 창이 사용됩니다.
디지털 창에 대한 변경 내용은 각 샘플의 메타데이터 페이로드에 반영되어야 합니다.
디지털 창의 변경 내용은 즉시 적용되지 않을 수 있지만 컨트롤은 즉시 응답해야 합니다. 디지털 창의 변경 내용은 적용되는 즉시 프레임의 메타데이터 페이로드에 보고되어야 합니다.
2.2.2.12 디지털 창 구성 컨트롤
디지털 창 구성 Caps 컨트롤은 사용 가능한 모든 해상도가 지정된 카메라의 크기 조정 제한을 지정합니다. 해상도는 미디어 유형과 독립적이므로 동일한 디스플레이 해상도를 보급하는 두 미디어 유형이 하나의 기능으로 결합됩니다.
컨트롤 엔드포인트의 크기 제한으로 인해 이 컨트롤은 최대 1820개의 고유 해상도를 설명할 수 있습니다.
해당 컨트롤도 있는 경우 이 컨트롤을 항상 디지털 창 컨트롤의 기능을 보고할 수 있어야 합니다.
이 컨트롤은 받은 편지함 카메라 드라이버에서 KSPROPERTY_CAMERACONTROL_EXTENDED_DIGITALWINDOW_CONFIGCAPS 매핑됩니다.
다음이 적용됩니다.
GET_LEN 요청은 페이로드의 전체 크기를 보고해야 합니다. 각 해상도 정의 길이가 36바이트이므로 페이로드 크기는 36의 배수여야 합니다.
GET_INFO 요청은 1을 보고해야 한다. 이 값은 GET_CUR만 지원하는 동기 컨트롤을 나타냅니다.
GET_CUR 요청은 기능의 배열을 보고해야 합니다. 기능 구조의 필드는 위에 정의되어 있습니다.
GET_MIN, GET_MAX, GET_RES 및 GET_DEF 요청은 사용되지 않지만 GET_CUR 동일한 값을 반환해야 합니다.
SET_CUR 요청은 지원되지 않습니다.
2.2.2.13 비디오 HDR 컨트롤
이 컨트롤을 사용하면 호스트 소프트웨어에서 카메라가 Video HDR을 지원하는지 여부를 지정할 수 있습니다. 이 컨트롤에 대한 지원은 카메라가 최상의 노력으로 비디오 HDR을 수행할 수 있음을 의미합니다. 카메라가 Video HDR을 지원하지 않는 경우 이 컨트롤을 구현해서는 안 됩니다.
이 컨트롤은 카메라 드라이버에 의해 KSPROPERTY_CAMERACONTROL_EXTENDED_VIDEOHDR 매핑됩니다.
다음이 적용됩니다.
GET_LEN 요청은 페이로드의 전체 크기(예: 4바이트)를 보고해야 합니다.
GET_INFO 요청은 값 3을 보고해야 한다. 이 값은 SET_CUR GET_CUR 지원하는 동기 컨트롤을 나타냅니다.
GET_CUR 요청은 현재 운영 모드로 설정된 필드 dwMode 를 보고해야 합니다.
GET_DEF dwMode를 OFF(0)로 설정해야 합니다.
GET_MAX 요청은 사용 가능한 작업 모드에 대한 지원을 보급해야 합니다. [1(ON/OFF), 3(ON/OFF/Auto)]. 이 컨트롤에는 ON(1)에 대한 지원이 필수입니다.
GET_MIN 및 GET_RES 요청은 0을 보고해야 합니다.
SET_CUR 요청은 모드를 OFF(0), ON(1) 또는 AUTO(2)로 설정해야 합니다.
2.2.2.14 프레임 속도 제한 컨트롤
이 컨트롤을 사용하면 호스트 소프트웨어에서 카메라가 프레임 속도 제한을 지원하는지 여부를 지정할 수 있습니다.
이 컨트롤은 카메라가 적극적으로 스트리밍하는 동안에만 적용됩니다. 적극적으로 스트리밍하려면 미리 보기 또는 레코드 핀이 KSSTATE_RUN 프레임을 제공할 준비가 되어 있어야 합니다. 스트림이 활성화되지 않은 경우 집합에서 이 컨트롤은 STATUS_INVALID_DEVICE_STATE 반환해야 합니다.
필터 범위 컨트롤인 경우에도 프레임 속도 컨트롤은 사진 핀 또는 IR/깊이와 같은 RGB가 없는 스트림에 영향을 주지 않아야 합니다. 또한 프레임 속도 제한이 적용되는 경우 샘플 기간도 그에 따라 조정해야 합니다.
이 컨트롤은 카메라 드라이버에 의해 KSPROPERTY_CAMERACONTROL_EXTENDED_FRAMERATE_THROTTLE 매핑됩니다.
컨트롤 선택기 | MSXU_CONTROL_FRAMERATE_THROTTLE |
---|---|
필수 요청 | GET_INFO, GET_LEN, GET_RES, GET_MIN, GET_MAX, GET_DEF, GET_CUR, SET_CUR |
선택적 요청 | |
wLength | 20 |
Offset | 필드 | 크기 | 값 | 설명 |
---|---|---|---|---|
0 | dwMode | 4 | 플래그 | D0: 0(OFF) 또는 1(ON) D1-D31: 예약 및 0으로 설정 |
4 | scaleFactorPercentage | 4 | 숫자 | 이 값은 최소 및 최대 범위 내에 있어야 하며 단계 값의 배수로 설정해야 합니다. 예를 들어 Min = 5, Max = 100 및 Step = 5이고 애플리케이션이 프레임 속도를 원래 값의 80%로 줄이기로 결정한 경우 이 멤버 값을 80으로 설정해야 합니다. 이 값을 적절하게 설정하면 앱에서 새 프레임 속도가 원래 값을 초과하지 않고 0이 되지 않도록 할 수 있지만 원래 프레임 속도는 가능합니다. |
8 | min | 4 | 숫자 | 최소값은 임대 시 한 단계 크기와 같거나 단계 크기의 배수여야 합니다(예: 1단계, 2단계등). 최소값은 0으로 설정할 수 없습니다. |
12 | max | 4 | 숫자 | 최대값은 100으로 설정해야 합니다. 즉, 프레임 속도는 변경되지 않습니다. |
16 | step | 4 | 숫자 | 단계는 Max의 엄격한 요소여야 합니다(예: {Max % Step == 0}). 예: 1, 2, 4, 5 등 |
다음이 적용됩니다.
GET_LEN 요청은 페이로드의 전체 크기(예: 20바이트)를 보고해야 합니다.
GET_INFO 요청은 값 3을 보고해야 한다. 이 값은 SET_CUR GET_CUR 지원하는 동기 컨트롤을 나타냅니다.
GET_CUR 요청은 현재 작동 모드로 설정된 필드 dwMode를 보고하고 scaleFactorPercentage를 현재 scaleFactor 값으로 설정해야 합니다. 최소, 최대 및 단계는 위 표에 설명된 대로 값을 보고해야 합니다.
GET_DEF dwMode를 OFF(0), scaleFactorPercentage=100으로 설정하고 최소값을 기본 최소값으로 설정하고, 최대값을 100으로 설정하고, 단계를 기본 단계 값으로 설정해야 합니다. 최소 및 단계의 값은 제조업체에서 정의해야 하지만 위의 표에 멘션 지침을 따라야 합니다.
GET_ MAX 요청은 사용 가능한 작업 모드에 대한 지원을 보급해야 하며 값 1 [ ON | OFF ]. 이 컨트롤에는 ON 및 OFF 모두에 대한 지원이 필수입니다. 최소, 최대, 단계 및 scaleFactorPercentage를 기본값으로 설정할 수 있습니다.
GET_MIN 및 GET_RES 요청은 0을 보고해야 합니다.
SET_CUR 요청은 모드를 OFF(0), ON(1)로 설정해야 합니다. dwMode가 ON으로 설정된 경우 scaleFactorPercentage가 적용됩니다. OFF 및 ON 사례의 경우 위의 표에 설명된 대로 scaleFactorPercentage가 유효해야 합니다.
2.2.2.15 보기 필드 2 구성 컨트롤
View 2 Config 컨트롤의 필드는 지원되는 대각선 보기 각도 값을 값 배열로 지정합니다. 지원되는 모든 값은 이론적 최소 및 최대, 1도 - 360도 범위여야 합니다.
디바이스가 연속 보기 필드 값을 지원하려는 경우 지원되는 모든 값을 보고해야 합니다. 예를 들어 디바이스가 단계 크기가 1인 85도에서 60도의 대각선 보기 필드를 지원하려는 경우 이 컨트롤은 값 배열 [85, 84, 83, 82, ..., 62, 61, 60]을 보고해야 합니다.
이 컨트롤은 필드 오브 뷰 2 컨트롤이 있을 때 기능을 보고하는 데 사용할 수 있어야 합니다.
동기 필터 수준 컨트롤입니다.
이 컨트롤은 카메라 드라이버에서 KSPROPERTY_CAMERACONTROL_EXTENDED_ FIELDOFVIEW2_CONFIGCAPS 매핑됩니다.
컨트롤 선택기 | MSXU_CONTROL_FIELDOFVIEW2_CONFIG |
---|---|
필수 요청 | GET_INFO, GET_LEN, GET_RES, GET_MIN, GET_MAX, GET_DEF, GET_CUR |
선택적 요청 | |
wLength | 4바이트 + Count times 4바이트, 여기서 Count 는 고유한 보기 필드 값의 수입니다. |
Offset | 필드 | 크기 | 값 | 설명 |
---|---|---|---|---|
0 | dwDefaultFieldOfView | 4 | 숫자 | 기본 대각선 보기 필드는 FieldOfViewValues 배열에 보고된 값 중 하나여야 합니다. |
4 | FieldOfViewValues[0] | 4 | 숫자 | 첫 번째 보기 필드 값은 가장 넓은 FoV(보기 필드) 값이어야 합니다. |
… | … | … | … | … |
4 + 4*(Count-1) | FieldOfViewValues [Count -1] | 4 | 숫자 | 마지막 보기 필드 값은 가장 좁은 FoV 값이어야 합니다. |
다음이 적용됩니다.
GET_LEN 요청은 페이로드의 전체 크기를 보고해야 합니다.
GET_INFO 요청은 1을 보고해야 한다. 이 값은 GET_CUR만 지원하는 동기 컨트롤을 나타냅니다.
GET_CUR 요청은 기본 FoV 및 지원되는 FoV 값 배열을 포함하는 데이터를 내림차순으로 보고해야 합니다. 구조체의 필드는 위에 정의되어 있습니다.
GET_DEF 요청은 GET_CUR 보고해야 한다.
GET_MIN, GET_MAX 및 GET_RES 요청은 사용되지 않지만 GET_CUR 동일한 값을 반환해야 합니다.
SET_CUR 요청은 지원되지 않습니다.
보기 필드 값은 내림차순이어야 합니다. 예를 들어 가장 넓은 보기 필드가 첫 번째이고 가장 좁은 필드가 마지막입니다.
2.2.2.16 필드 오브 뷰 2 컨트롤
이 컨트롤은 스트리밍할 때 카메라가 사용하는 기본 보기 필드를 지정합니다. 이 컨트롤은 스트리밍 전이나 스트리밍 중에 적용할 수 있습니다.
이 컨트롤은 모든 유형의 카메라에서 사용할 수 있으며 스트리밍되는 미디어 유형과는 독립적입니다.
이 컨트롤을 사용하면 호스트 소프트웨어가 카메라와 연결된 보기 필드를 쿼리하고 제어할 수 있습니다.
비디오 컨트롤 인터페이스와 연결된 모든 비디오 스트리밍 인터페이스의 모든 엔드포인트에 영향을 주는 전역 컨트롤입니다. ISP(이미지 신호 프로세서)에서 사용하는 픽셀(또는 센서) 데이터의 원본을 조정합니다. 여기에는 메서드 2와 메서드 3이 여전히 핀을 캡처하는 것이 포함됩니다.
동기 필터 수준 컨트롤입니다.
이 컨트롤은 카메라 드라이버에서 KSPROPERTY_CAMERACONTROL_EXTENDED_ FIELDOFVIEW2 매핑됩니다.
컨트롤 선택기 | MSXU_CONTROL_FIELDOFVIEW2 |
---|---|
필수 요청 | GET_INFO, GET_LEN, GET_RES, GET_MIN, GET_MAX, GET_DEF, GET_CUR, SET_CUR |
선택적 요청 | |
wLength | 4 |
Offset | 필드 | 크기 | 값 | 설명 |
---|---|---|---|---|
0 | dwValue | 4 | 숫자 | 대각선 보기 필드 값(도)입니다. |
다음이 적용됩니다.
GET_LEN 요청은 4의 값을 보고해야 한다.
GET_INFO 요청은 3을 보고해야 한다. 이 값은 GET_CUR 및 SET_CUR 지원하는 동기 컨트롤을 나타냅니다.
GET_MIN 요청은 지원되는 최소 뷰 필드 값으로 설정된 필드 dwValue를 보고해야 합니다.
GET_RES 요청은 필드 dwValue 집합 0을 보고해야 합니다. 이 요청은 현재 사용되지 않습니다.
GET_MAX 요청은 지원되는 최대 뷰 필드 값으로 설정된 필드 dwValue를 보고해야 합니다.
GET_DEF 요청은 필드 dwValue가 기본 보기 필드 값으로 설정된 것을 보고해야 합니다.
GET_CUR 요청은 현재 뷰 필드 값으로 설정된 필드 dwValue를 보고해야 합니다.
SET_CUR 요청이 수신되면 카메라는 해당 보기 필드를 지정된 dwValue와 일치하도록 설정합니다.
카메라가 CT_ZOOM_RELATIVE_CONTROL 및/또는 CT_ZOOM_ABSOLUTE_CONTROL 구현하는 경우 MSXU_CONTROL_FIELDOFVIEW2 SET_CUR 호출되면 이러한 컨트롤이 기본값으로 다시 설정됩니다.
카메라가 MSXU_CONTROL_DIGITALWINDOW 구현하는 경우 새 보기 필드 값이 설정되면 창 변경 내용이 반영됩니다. 그리고 그 반대의 경우도 마찬가지이며, 시야는 디지털 창을 통해 변경된 내용을 반영해야 합니다. 자세한 내용은 KSPROPERTY_CAMERACONTROL_EXTENDED_ FIELDOFVIEW2 참조하세요.
2.2.3 메타데이터
표준 형식 프레임 메타데이터 디자인은 Windows 10의 UVC 사용자 지정 메타데이터 디자인을 기반으로 합니다. Windows 10에서 사용자 지정 메타데이터는 카메라 드라이버에 사용자 지정 INF를 사용하여 UVC에 대해 지원됩니다(참고: 카메라 드라이버는 Windows USBVIDEO.SYS 기반으로 할 수 있지만 메타데이터를 통과하려면 지정된 하드웨어에 사용자 지정 INF가 필요합니다). 레지스트리 항목이 있고 0이 아닌 경우 MetadataBufferSizeInKB<PinIndex>
해당 핀에 대해 사용자 지정 메타데이터가 지원되고 값은 메타데이터에 사용되는 버퍼 크기를 나타냅니다. <PinIndex>
필드는 비디오 핀 인덱스의 0 기반 인덱스입니다.
Windows 10 버전 1703에서 카메라 드라이버는 다음 AddReg 항목을 포함하여 Microsoft 표준 형식 메타데이터에 대한 지원을 알릴 수 있습니다.
StandardFormatMetadata<PinIndex>
: REG_DWORD: 0x1 0x0(지원되지 않음) (지원됨)
이 레지스트리 키는 DevProxy에서 읽고 KSSTREAM_METADATA_INFO 구조에 대한 플래그 필드에서 플래그 KSSTREAM_METADATA_INFO_FLAG_STANDARDFORMAT 설정하여 메타데이터가 표준 형식임을 UVC 드라이버에 알릴 것입니다.
2.2.3.1 Microsoft Standard 형식 메타데이터
Microsoft 표준 형식 메타데이터는 다음 구조의 하나 이상의 인스턴스입니다.
typedef struct tagKSCAMERA_METADATA_ITEMHEADER {
ULONG MetadataId;
ULONG Size; // Size of this header + metadata payload following
} KSCAMERA_METADATA_ITEMHEADER, *PKSCAMERA_METADATA_ITEMHEADER;
MetadataId 필드는 잘 정의된 식별자 및 사용자 지정 식별자(식별자 = MetadataId_Custom_Start)를 포함하는 다음 열거형 정의의 식별자에 >의해 채워집니다.
typedef enum {
MetadataId_Standard_Start = 1,
MetadataId_PhotoConfirmation = MetadataId_Standard_Start,
MetadataId_UsbVideoHeader,
MetadataId_CaptureStats,
MetadataId_CameraExtrinsics,
MetadataId_CameraIntrinsics,
MetadataId_FrameIllumination,
MetadataId_Standard_End = MetadataId_FrameIllumination,
MetadataId_Custom_Start = 0x80000000,
} KSCAMERA_MetadataId;
크기 필드는 sizeof(KSCAMERA_METADATA_ITEMHEADER) + sizeof(메타데이터 페이로드)로 설정됩니다.
2.2.3.2 USB 비디오 프레임 패킷에서 펌웨어에서 생성된 표준 형식 메타데이터
프레임 기반 비디오에 대해 UVC를 통해 전송하는 동안 비디오 프레임은 각각 UVC 페이로드 헤더 앞에 오는 일련의 패킷으로 패킷화됩니다. 각 UVC 페이로드 헤더는 USB 비디오 클래스 드라이버 프레임 기반 페이로드 사양에 의해 정의됩니다.
페이로드 헤더
다음은 프레임 기반 형식의 페이로드 헤더 형식에 대한 설명입니다.
HLE(머리글 길이) 필드
머리글 길이 필드는 헤더의 길이(바이트)를 지정합니다.
비트 필드 머리글 필드
FID: 프레임 식별자
- 이 비트는 각 프레임 시작 경계에서 전환되고 프레임의 나머지 부분에 대해 일정하게 유지됩니다.
EOF: 프레임 끝
- 이 비트는 비디오 프레임의 끝을 나타내며 프레임에 속하는 마지막 비디오 샘플에서 설정됩니다. 이 비트의 사용은 프레임 전송 완료 시 대기 시간을 줄이기 위한 최적화이며 선택 사항입니다.
PTS: 프레젠테이션 타임스탬프
- 이 비트는 설정할 때 PTS 필드가 있음을 나타냅니다.
SCR: 원본 클록 참조
- 이 비트는 설정 시 SCR 필드가 있음을 나타냅니다.
RES: 예약됨.
- 를 0으로 설정합니다.
STI: 스틸 이미지
- 이 비트는 설정 시 비디오 샘플을 스틸 이미지에 속하는 것으로 식별합니다.
ERR: 오류 비트
- 설정 시 이 비트는 디바이스 스트리밍의 오류를 나타냅니다.
EOH: 머리글 끝
- 이 비트는 설정할 때 BFH 필드의 끝을 나타냅니다.
PTS: 프레젠테이션 타임스탬프, 크기: 4바이트, 값: 숫자
- PTS 필드는 BFH[0] 필드에 PTS 비트가 설정된 경우에 존재합니다. 비디오 디바이스 사양에 대한 USB 디바이스 클래스 정의에서 섹션 2.4.3.3 "비디오 및 스틸 이미지 페이로드 헤더" 를 참조하세요 .
SCR: 원본 클록 참조, 크기: 6바이트, 값: 숫자
- SCR 필드는 SCR 비트가 BFH[0] 필드에 설정된 경우에 존재합니다. 비디오 디바이스 사양에 대한 USB 디바이스 클래스 정의에서 섹션 2.4.3.3 비디오 및 스틸 이미지 페이로드 헤더를 참조하세요.
기존 UVC 드라이버의 HLE 필드는 2바이트(PTS/SCR 없음) 또는 최대 12바이트(PTS/SCR 존재)로 고정됩니다. 그러나 바이트 크기의 필드인 HLE 필드는 최대 255바이트의 헤더 데이터를 지정할 수 있습니다. PTS/SCR이 모두 있고 HLE이 12바이트보다 많은 경우 페이로드 헤더의 처음 12바이트 다음에 추가 데이터는 INF 항목 StandardFormatMetadata<PinIndex>
이 설정될 때 비디오 프레임과 관련된 표준 메타데이터로 선택됩니다.
프레임에 대한 표준 형식 메타데이터(펌웨어에 의해 생성됨)는 해당 프레임을 나타내는 비디오 프레임 패킷에 있는 부분 Blob을 연결하여 가져옵니다.
2.2.3.3 사용자 모드 구성 요소에 제공된 메타데이터 버퍼
사용자 모드 구성 요소에 제공된 메타데이터 버퍼에는 UVC 타임스탬프(UVC 드라이버에서 생성됨)에 대한 메타데이터 항목과 펌웨어에서 생성된 메타데이터 항목이 있으며 다음과 같이 배치됩니다.
2.2.3.4 표준 메타데이터 식별자에 대한 메타데이터 형식
펌웨어는 식별자에 해당하는 메타데이터를 생성할지 여부를 선택할 수 있습니다. 펌웨어가 식별자에 해당하는 메타데이터를 생성하도록 선택하는 경우 해당 식별자의 메타데이터는 펌웨어에서 내보낸 모든 프레임에 있어야 합니다.
2.2.3.4.1 MetadataId_CaptureStats
이 식별자의 메타데이터 형식은 다음 구조로 정의됩니다.
typedef struct tagKSCAMERA_METADATA_CAPTURESTATS {
KSCAMERA_METADATA_ITEMHEADER Header;
ULONG Flags;
ULONG Reserved;
ULONGLONG ExposureTime;
ULONGLONG ExposureCompensationFlags;
LONG ExposureCompensationValue;
ULONG IsoSpeed;
ULONG FocusState;
ULONG LensPosition; // a.k.a Focus
ULONG WhiteBalance;
ULONG Flash;
ULONG FlashPower;
ULONG ZoomFactor;
ULONGLONG SceneMode;
ULONGLONG SensorFramerate;
} KSCAMERA_METADATA_CAPTURESTATS, *PKSCAMERA_METADATA_CAPTURESTATS;
플래그 필드는 구조체의 이후 필드 중 채워지고 유효한 데이터가 있는 필드를 나타냅니다. 플래그 필드는 프레임마다 달라지지 않습니다. 현재 다음 플래그가 정의되어 있습니다.
#define KSCAMERA_METADATA_CAPTURESTATS_FLAG_EXPOSURETIME 0x00000001
#define KSCAMERA_METADATA_CAPTURESTATS_FLAG_EXPOSURECOMPENSATION 0x00000002
#define KSCAMERA_METADATA_CAPTURESTATS_FLAG_ISOSPEED 0x00000004
#define KSCAMERA_METADATA_CAPTURESTATS_FLAG_FOCUSSTATE 0x00000008
#define KSCAMERA_METADATA_CAPTURESTATS_FLAG_LENSPOSITION 0x00000010
#define KSCAMERA_METADATA_CAPTURESTATS_FLAG_WHITEBALANCE 0x00000020
#define KSCAMERA_METADATA_CAPTURESTATS_FLAG_FLASH 0x00000040
#define KSCAMERA_METADATA_CAPTURESTATS_FLAG_FLASHPOWER 0x00000080
#define KSCAMERA_METADATA_CAPTURESTATS_FLAG_ZOOMFACTOR 0x00000100
#define KSCAMERA_METADATA_CAPTURESTATS_FLAG_SCENEMODE 0x00000200
#define KSCAMERA_METADATA_CAPTURESTATS_FLAG_SENSORFRAMERATE 0x00000400
예약 필드는 나중에 예약되며 0으로 설정되어야 합니다.
ExposureTime 필드에는 프레임이 캡처될 때 센서에 적용된 노출 시간(100 ns)이 포함됩니다. 해당 MF 샘플에서 특성 MF_CAPTURE_METADATA_EXPOSURE_TIME 표시됩니다.
ExposureCompensationFlags 필드에는 EV 보정 값을 전달하는 데 사용되는 EV 보정 단계(KSCAMERA_EXTENDEDPROP_EVCOMP_XXX 단계 플래그 중 하나만 설정해야 합니다)가 포함되어 있습니다. ExposureCompensationValue 필드에는 프레임이 캡처될 때 센서에 적용된 단계 단위의 EV 보정 값이 포함됩니다. 이러한 항목은 해당 MF 샘플에 MF_CAPTURE_METADATA_EXPOSURE_COMPENSATION 특성으로 표시됩니다.
IsoSpeed 필드에는 프레임을 캡처할 때 센서에 적용된 ISO 속도 값이 포함됩니다. 이것은 단위가 없습니다. 이는 해당 MF 샘플에 MF_CAPTURE_METADATA_ISO_SPEED 특성으로 표시됩니다.
FocusState 필드에는 열거형 KSCAMERA_EXTENDEDPROP_FOCUSSTATE 정의된 값 중 하나를 사용할 수 있는 현재 포커스 상태가 포함됩니다. 이는 해당 MF 샘플에 MF_CAPTURE_METADATA_FOCUSSTATE 특성으로 표시됩니다.
LensPosition 필드에는 프레임이 캡처될 때 논리 렌즈 위치가 포함되며 이는 단위가 없습니다. GET 호출의 KSPROPERTY_CAMERACONTROL_EXTENDED_FOCUS 쿼리할 수 있는 값과 동일합니다. 해당 MF 샘플에서 특성 MF_CAPTURE_METADATA_LENS_POSITION 표시됩니다.
WhiteBalance 필드에는 프레임이 캡처될 때 센서에 적용된 흰색 균형이 포함되며 이는 Kelvin의 값입니다. 해당 MF 샘플에서 특성 MF_CAPTURE_METADATA_WHITEBALANCE 표시됩니다.
Flash 필드에는 프레임 캡처 시 플래시가 1이고 0이면 플래시가 꺼진 부울 값이 포함됩니다. 이는 해당 MF 샘플에 MF_CAPTURE_METADATA_FLASH 특성으로 표시됩니다.
FlashPower 필드에는 캡처된 프레임에 적용된 플래시 전원이 포함되며 이는 [0, 100] 범위의 값입니다. 드라이버가 플래시에 대해 조정 가능한 전원을 지원하지 않는 경우 이 필드를 생략해야 합니다. 이는 해당 MF 샘플에 MF_CAPTURE_METADATA_FLASH_POWER 특성으로 표시됩니다.
ZoomFactor 필드에는 캡처된 프레임에 적용된 Q16 형식의 확대/축소 값이 포함됩니다. 해당 MF 샘플에서 특성 MF_CAPTURE_METADATA_ZOOMFACTOR 표시됩니다.
SceneMode 필드에는 64비트 KSCAMERA_EXTENDEDPROP_SCENEMODE_XXX 플래그인 캡처된 프레임에 적용된 장면 모드가 포함됩니다. 이는 해당 MF 샘플에 MF_CAPTURE_METADATA_SCENE_MODE 특성으로 표시됩니다.
SensorFramerate 필드에는 프레임이 캡처될 때 헤르츠에서 측정된 센서 판독 속도가 포함되며, 이는 상위 32비트에서의 숫자 값과 하위 32비트에서 분모 값으로 구성됩니다. 이는 해당 MF 샘플에 MF_CAPTURE_METADATA_SENSORFRAMERATE 특성으로 표시됩니다.
2.2.3.4.2 MetadataId_카메라Extrinsics
이 식별자의 메타데이터 형식에는 표준 KSCAMERA_METADATA_ITEMHEADER 뒤에 바이트 배열 페이로드가 포함됩니다. 페이로드는 MF카메라Extrinsics 구조체와 0개 이상의 MF카메라Extrinsic_CalibratedTransform 구조체에 맞춰야 합니다. 페이로드는 8바이트 정렬되어야 하며, 사용하지 않은 모든 바이트는 페이로드의 끝에서 발생하고 0으로 설정되어야 합니다.
2.2.3.4.3 MetadataId_카메라Intrinsics
이 식별자의 메타데이터 형식에는 표준 KSCAMERA_METADATA_ITEMHEADER 뒤에 바이트 배열 페이로드가 포함됩니다. 페이로드는 MFPinhole카메라Intrinsics 구조체에 맞춰야 합니다. 페이로드는 8바이트 정렬되어야 하며, 사용하지 않은 모든 바이트는 페이로드의 끝에서 발생하고 0으로 설정되어야 합니다.
2.2.3.4.4 MetadataId_FrameIllumination
이 식별자의 메타데이터 형식은 다음 구조로 정의됩니다.
typedef struct tagKSCAMERA_METADATA_FRAMEILLUMINATION {
KSCAMERA_METADATA_ITEMHEADER Header;
ULONG Flags;
ULONG Reserved;
} KSCAMERA_METADATA_FRAMEILLUMINATION, *PKSCAMERA_METADATA_FRAMEILLUMINATION;
플래그 필드는 캡처된 프레임에 대한 정보를 나타냅니다. 현재 다음 플래그가 정의되어 있습니다.
#define KSCAMERA_METADATA_FRAMEILLUMINATION_FLAG_ON 0x00000001
조명이 켜졌을 때 프레임을 캡처한 경우 플래그 KSCAMERA_METADATA_FRAMEILLUMINATION_FLAG_ON 설정됩니다. 그렇지 않으면 이 플래그를 설정하지 않습니다.
예약 필드는 나중에 사용할 수 있도록 예약되어 있으며 0으로 설정되어야 합니다.
예제:
예를 들어 조명이 켜졌음을 나타내는 KSCAMERA_METADATA_FRAMEILLUMINATION 구조체는 다음과 같습니다.
KSCAMERA_METADATA_FRAMEILLUMINATION.Header.MetadataId = MetadataId_FrameIllumination;
KSCAMERA_METADATA_FRAMEILLUMINATION.Header.Size = 16; // 4 ULONG variables in total inside the structure
KSCAMERA_METADATA_FRAMEILLUMINATION.Flags = KSCAMERA_METADATA_FRAMEILLUMINATION_FLAG_ON;
KSCAMERA_METADATA_FRAMEILLUMINATION.Reserved = 0;
2.2.3.4.5 MetadataId_USBVideoHeader
이 식별자에 대한 메타데이터 형식은 일반적인 KSCAMERA_METADATA_ITEMHEADER 뒤에 KSSTREAM_UVC_METADATA 구조로 정의됩니다.
typedef struct
{
ULONG PresentationTimeStamp;
ULONG SourceClockReference;
union
{
struct
{
USHORT Counter : 11;
USHORT Reserved : 5;
};
USHORT SCRToken;
};
USHORT Reserved0;
ULONG Reserved1;
} KSSTREAM_UVC_METADATATYPE_TIMESTAMP, *PKSSTREAM_UVC_METADATATYPE_TIMESTAMP;
typedef struct {
KSSTREAM_UVC_METADATATYPE_TIMESTAMP StartOfFrameTimestamp;
KSSTREAM_UVC_METADATATYPE_TIMESTAMP EndOfFrameTimestamp;
} KSSTREAM_UVC_METADATA, *PKSSTREAM_UVC_METADATA;
StartOfFrameTimestamp 및 EndOfFrameTimestamp 필드는 이 프레임을 생성하기 위해 카메라가 발급한 첫 번째 및 마지막 UVC 페이로드의 UVC 헤더에 포함된 타임스탬프입니다.
이 페이로드는 디바이스에서 전송해서는 안 됩니다.
이 메타데이터 페이로드는 UVC 규격 페이로드 헤더에서 얻은 정보에서 USB 비디오 클래스 드라이버가 직접 생성한 유일한 메타데이터 페이로드라는 측면에서 고유합니다.
이 페이로드는 각 프레임의 메타데이터 버퍼 앞에 추가됩니다.
디바이스가 표준화된 메타데이터를 지원하는 경우 섹션 2.2.2.9에 정의된 메타데이터 컨트롤에서 보고한 대로 이 페이로드를 버퍼 요구 사항에 저장하는 데 필요한 공간을 포함해야 합니다.