Share via


USB 비디오 클래스 1.5 사양에 대한 Microsoft 확장

1 개요

1.1 요약

USB 비디오 클래스 사양에 대한 Microsoft 확장을 통해 새로운 컨트롤과 잘 정의된 프레임 메타데이터를 표준 형식으로 전달할 수 있습니다.

1.2 아키텍처 결정

UVC(USB 비디오 클래스) 프레임 메타데이터 지원은 ISOCH 및 BULK 엔드포인트에서 사용할 수 있습니다. 그러나 BULK 엔드포인트의 경우 메타데이터 크기는 240바이트로 제한됩니다(모든 비디오 프레임 데이터가 BULK 엔드포인트의 단일 비디오 프레임 패킷으로 전송되기 때문).

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/dwValuebmControlFlags 필드에 대해 각각 기본 및 현재 설정을 보고해야 합니다. 다른 모든 필드는 0으로 설정해야 합니다.

모든 필드를 설정한 후 호스트가 SET_CUR 요청을 실행합니다.

다음 표에서는 Microsoft-XU의 컨트롤 선택기를 해당 값과 확장 단위 설명자의 bmControls 필드에 대한 비트 위치에 매핑합니다.

확장 단위 컨트롤.

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 보정 설정을 지정할 수 있습니다. 비디오 컨트롤 인터페이스와 연결된 모든 비디오 스트리밍 인터페이스의 모든 엔드포인트에 영향을 주는 전역 컨트롤입니다.

E V 보정 제어.

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로 설정하고 dwValueFormatdwValue 를 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은 해당 스트리밍 인터페이스(D1/D2 외에)에 대해 1로 설정되어야 합니다.

GET_DEF/GET_CUR/SET_CUR 요청의 경우 bmControlFlags 필드에서 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_MAX.

GET_DEF 요청에 대한 출력은 다음과 같습니다.

얼굴 인증 GET_DEF.

스트리밍 인터페이스 0x03 설정을 D1로 변경하는 SET_CUR 요청은 다음과 같습니다.

얼굴 인증 SET_CUR.

위의 SET_CUR 요청 이후의 GET_CUR 요청에 대한 출력은 다음과 같습니다.

얼굴 인증 GET_CUR.

2.2.2.7 카메라 내장 컨트롤

이 컨트롤을 사용하면 호스트 소프트웨어가 비디오 컨트롤 인터페이스와 연결된 비디오 스트리밍 인터페이스의 엔드포인트에 대한 카메라 내장 데이터를 가져올 수 있습니다. 따라서 각 엔드포인트에 대해 가져온 데이터는 해당 스트림의 특성 저장소에 특성 MFStreamExtension_CameraExtrinsics 표시됩니다(IMFDeviceTransform::GetOutputStreamAttributes 호출을 사용하여 획득됨).

카메라 내장 컨트롤.

GET_RES, GET_MIN, GET_MAX GET_CUR 요청은 bNumEntries 필드를 0으로 설정하여 보고해야 하므로 추가 필드가 없습니다.

GET_DEF 요청은 사용 가능한 내장 정보가 있는 모든 엔드포인트를 나열해야 합니다.

예제:

비디오 스트리밍 인터페이스 0x05 모든 비디오 스트리밍 인터페이스에서 지원하는 비디오 캡처 외에도 메서드 2를 사용하여 스틸 이미지 캡처를 지원하는 경우 카메라에 각각 숫자 0x03, 0x05 및 0x08 있는 세 개의 비디오 스트리밍 인터페이스가 있다고 가정해 보겠습니다. 이러한 스트리밍 인터페이스 중에서 스트리밍 인터페이스 0x05 및 0x08 스트리밍 인터페이스 0x03 사용할 수 있는 내장 정보가 없는 동안 사용할 수 있는 내장 정보가 있다고 가정해 보겠습니다.

이 예제에서 GET_DEF 요청에 대한 출력은 다음과 같습니다.

카메라 내장 함수 GET_DEF.

2.2.2.8 카메라 내장 함수 컨트롤

이 컨트롤을 사용하면 호스트 소프트웨어가 비디오 컨트롤 인터페이스와 연결된 비디오 스트리밍 인터페이스의 엔드포인트에 대한 카메라 내장 데이터를 가져올 수 있습니다. 따라서 각 엔드포인트에 대해 가져온 데이터는 해당 스트림의 특성 저장소에 특성 MFStreamExtension_PinholeCameraIntrinsics 표시됩니다(IMFDeviceTransform::GetOutputStreamAttributes 호출을 사용하여 획득).

카메라 내장 컨트롤.

GET_RES, GET_MIN, GET_MAX GET_CUR 요청은 bNumEntries 필드를 0으로 설정하여 보고해야 하므로 추가 필드가 없습니다.

GET_DEF 요청은 사용 가능한 내장 정보가 있는 모든 엔드포인트를 나열해야 합니다.

예제:

비디오 스트리밍 인터페이스 0x05 모든 비디오 스트리밍 인터페이스에서 지원하는 비디오 캡처 외에도 메서드 2를 사용하여 스틸 이미지 캡처를 지원하는 경우 카메라에 각각 숫자 0x03, 0x05 및 0x08 있는 세 개의 비디오 스트리밍 인터페이스가 있다고 가정해 보겠습니다. 이러한 스트리밍 인터페이스 중에서 스트리밍 인터페이스 0x05 및 0x08 스트리밍 인터페이스 0x03 사용할 수 있는 내장 정보가 없는 동안 사용할 수 있는 내장 정보가 있다고 가정해 보겠습니다.

이 예제에서 GET_DEF 요청에 대한 출력은 다음과 같습니다.

카메라 내장 함수 GET_DEF.

2.2.2.9 메타데이터 제어

이 컨트롤을 사용하면 호스트 소프트웨어가 카메라에서 생성된 메타데이터를 쿼리하고 제어할 수 있습니다. 비디오 컨트롤 인터페이스와 연결된 모든 비디오 스트리밍 인터페이스의 모든 엔드포인트에 영향을 주는 전역 컨트롤입니다.

이 컨트롤은 카메라 드라이버에 의해 KSPROPERTY_CAMERACONTROL_EXTENDED_METADATA 매핑됩니다.

메타데이터 컨트롤.

SET_CUR 요청이 펌웨어에서 지원되는 경우 다음이 적용됩니다.

  • GET_MIN GET_DEF 요청은 필드 dwValue 를 0으로 설정하여 보고해야 합니다.
  • GET_RES 요청은 필드 dwValue 를 GET_MAX 요청에서 보고한 값과 동일한 값으로 보고해야 합니다.
  • dwValue가 0으로 설정된 SET_CUR 요청이 수신되면 카메라는 메타데이터를 생성하지 않습니다. dwValue가 GET_MAX 요청에서 보고한 값과 동일한 값으로 설정된 SET_CUR 요청을 받으면 카메라는 메타데이터를 생성할 수 있으며 이러한 메타데이터의 크기는 프레임에 대해 dwValue를 초과할 수 없습니다.

SET_CUR 요청이 펌웨어에서 지원되지 않는 경우 다음이 적용됩니다.

  • GET_MIN GET_DEF 요청은 필드 dwValue 를 GET_MAX 요청에서 보고한 값과 동일한 값으로 보고해야 합니다.
  • GET_RES 요청은 필드 dwValue 가 0으로 설정된 것을 보고해야 합니다.
  • 카메라는 메타데이터를 생성할 수 있으며 이러한 메타데이터의 총 크기는 모든 프레임에 대해 usbVideoHeader 메타데이터 페이로드의 크기보다 1024바이트 적은 dwValue(GET_MAX 요청에 의해 보고됨)를 초과할 수 없습니다.
  • 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 매핑됩니다.

I R 토치 컨트롤.

다음이 적용됩니다.

  • 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 Torch는 요청된 작동 모드를 사용하여 조명을 배율 강도로 설정합니다.

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으로 설정되고 OriginXOriginY 가 0.0으로 설정되고 WindowSize 가 1.0으로 설정된 것을 보고해야 합니다. 이 요청은 현재 사용되지 않습니다.

  • GET_RES 요청은 필드 dwMode 가 0으로 설정되고 OriginXOriginY 가 0.0으로 설정되고 WindowSize 가 1.0으로 설정된 필드를 보고해야 합니다. 이 요청은 현재 사용되지 않습니다.

  • GET_MAX 요청은 이 컨트롤의 기능을 식별하기 위해 비트 D0가 설정된 필드 dwMode 집합을 보고해야 합니다. 값이 0이면 수동 모드만 지원됨을 나타냅니다. 값 1은 자동 얼굴 프레이밍 모드가 지원됨을 나타냅니다. 그러나 나머지 필드는 사용되지 않습니다. 그러나 OriginXOriginY 를 0.0으로 설정하고 WindowSize 를 1.0으로 설정하는 것이 좋습니다.

  • GET_DEF 요청은 필드 dwMode 가 0으로 설정되고 OriginXOriginY 가 0.0으로 설정되고 WindowSize 가 1.0으로 설정된 필드를 보고해야 합니다. 항상 기본 창입니다.

  • GET_CUR 요청은 현재 작동 모드로 설정된 필드 dwMode를 보고해야 하며 OriginX, OriginYWindowSize는 현재 디지털 창을 설명합니다.

  • SET_CUR 요청이 수신되면 카메라는 선택한 작동 모드 및 디지털 창과 일치하도록 보기 필드를 조정합니다.

  • 자동 얼굴 프레이밍 모드를 선택하면 카메라는 장면의 지배적 얼굴을 완전히 포괄하는 창을 선택하고 전달된 OriginX, OriginYWindowSize 는 무시됩니다. 얼굴을 찾을 수 없으면 기본 창이 사용됩니다.

  • 디지털 창에 대한 변경 내용은 각 샘플의 메타데이터 페이로드에 반영되어야 합니다.

  • 디지털 창에 대한 변경 내용을 즉시 적용할 필요는 없지만 컨트롤은 즉시 응답해야 합니다. 디지털 창에 대한 변경 내용은 적용되는 즉시 프레임의 메타데이터 페이로드에 보고되어야 합니다.

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 매핑됩니다.

비디오 HD R 컨트롤.

다음이 적용됩니다.

  • GET_LEN 요청은 페이로드의 전체 크기를 보고해야 합니다. (예: 4바이트).

  • GET_INFO 요청은 값 3을 보고해야 합니다. 이 값은 GET_CUR SET_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.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 표준 형식 메타데이터

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 비트가 BFH[0] 필드에 설정된 경우 SCR 필드가 있습니다. 비디오 디바이스 사양에 대한 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;

Flags 필드는 구조체의 이후 필드 중 어떤 필드가 채워지고 유효한 데이터가 있는지를 나타냅니다. Flags 필드는 프레임마다 달라지지 않습니다. 현재 다음 플래그가 정의되어 있습니다.

#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 필드에는 프레임이 캡처될 때 센서에 적용된 노출 시간(100ns)이 포함됩니다. 해당 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 필드에는 프레임이 캡처될 때 센서에 적용된 흰색 균형(켈빈의 값)이 포함됩니다. 해당 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_CameraExtrinsics

이 식별자의 메타데이터 형식에는 표준 KSCAMERA_METADATA_ITEMHEADER 뒤에 바이트 배열 페이로드가 포함됩니다. 페이로드는 MFCameraExtrinsics 구조체와 0개 이상의 MFCameraExtrinsic_CalibratedTransform 구조체에 맞춰야 합니다. 페이로드는 8바이트 정렬되어야 하며 사용하지 않는 모든 바이트는 페이로드의 끝에서 발생하고 0으로 설정되어야 합니다.

2.2.3.4.3 MetadataId_CameraIntrinsics

이 식별자의 메타데이터 형식에는 표준 KSCAMERA_METADATA_ITEMHEADER 뒤에 바이트 배열 페이로드가 포함됩니다. 페이로드는 MFPinholeCameraIntrinsics 구조체에 맞춰야 합니다. 페이로드는 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;

Flags 필드는 캡처된 프레임에 대한 정보를 나타냅니다. 현재 다음 플래그가 정의되어 있습니다.

#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에 정의된 메타데이터 컨트롤에서 보고한 버퍼 요구 사항에 이 페이로드를 저장하는 데 필요한 공간을 포함해야 합니다.