Estensioni Microsoft per la classe video USB 1.5

1 Panoramica

1.1 Riepilogo

Le estensioni Microsoft alla specifica USB Video Class consentono nuovi controlli e la possibilità di trasportare metadati frame ben definiti in un formato standard.

1.2 Decisioni relative all'architettura

Il supporto dei metadati dei frame UVC (USB Video Class) è disponibile per gli endpoint ISOCH e BULK. Tuttavia, nel caso dell'endpoint BULK, le dimensioni dei metadati sono limitate a 240 byte (perché tutti i dati dei fotogrammi video vengono trasferiti in un singolo pacchetto di fotogrammi video negli endpoint BULK).

Il supporto dei metadati UVC è disponibile solo per i payload basati su frame.

Il supporto dei metadati UVC è disponibile solo tramite la pipeline di acquisizione media Foundation (MF).

I metadati UVC sono di consenso esplicito. Ogni IHV/OEM che richiede il supporto dei metadati deve essere abilitato tramite un file INF personalizzato.

I metadati UVC supportano solo la memoria allocata dal sistema. Le superfici VRAM o DX non saranno supportate.

2 Panoramica dell'architettura

2.1 Descrizione

2.2.1 Individuazione delle funzionalità tramite INF

2.2.1.1 Acquisizione immagini ancora - Metodo 2

Alcuni dispositivi UVC esistenti potrebbero non supportare il metodo 2 descritto nella sezione 2.4.2.4 (Still Image Capture) della classe UVC 1.5 specification.pdf che può essere scaricata nel sito Web delle specifiche della classe VIDEO USB.

In Windows 10, versione 1607 e precedenti, la pipeline di acquisizione non usava il metodo 2, anche se un dispositivo annunciava il supporto per esso in base alla specifica UVC 1.5.

In Windows 10, versione 1703, i dispositivi che usano questo metodo devono usare un file INF personalizzato per il driver della fotocamera, ma per l'hardware specificato è necessario un INF personalizzato per abilitare l'acquisizione di immagini del metodo 2.

Nota: il driver della fotocamera può essere basato su Windows USBVIDEO.SYS o può essere basato su un file binario del driver personalizzato.

Il file INF personalizzato, basato sul driver UVC personalizzato o sul driver UVC in arrivo, deve includere la voce AddReg seguente:

EnableDependentStillPinCapture: REG_DWORD: 0x0 (disabilitato) per 0x1 (abilitato)

Quando questa voce è impostata su Abilitato (0x1), la pipeline di acquisizione usa il metodo 2 per Still Image Capture (presupponendo che il firmware annunci il supporto per il metodo 2 come specificato dalla specifica UVC 1.5).

Un esempio per la sezione INF personalizzata sarà il seguente:

[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 Controlli unità di estensione

L'estensione di Microsoft alla specifica USB Video Class per abilitare i nuovi controlli viene eseguita tramite un'unità di estensione identificata dal GUID MS_CAMERA_CONTROL_XU (denominata 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 implementato dal firmware del dispositivo ospita i nuovi controlli definiti nelle sottosezioni seguenti. Le definizioni di richiesta seguenti si applicano a tutti questi controlli, a meno che non venga specificata in modo esplicito una definizione di override per tale controllo. Per le definizioni di D3, D4, GET_INFO e così via, fare riferimento a UVC 1.5 Class specification.pdf GET_INFO .

GET_INFO richiesta deve segnalare il controllo senza funzionalità autoUpdate e Asincrone (ad esempio, I bit D3 e D4 devono essere impostati su 0).

GET_LEN richiesta segnala la lunghezza massima del payload per questo controllo (wLength).

GET_RES richiesta segnala la risoluzione (dimensioni passo) per qwValue/dwValue. Tutti gli altri campi devono essere impostati su 0.

GET_MIN richiesta segnala il valore minimo supportato per qwValue/dwValue. Tutti gli altri campi devono essere impostati su 0.

GET_MAX richiesta segnala il valore massimo supportato per qwValue/dwValue. Inoltre, tutti i flag supportati devono essere impostati su 1 in bmControlFlags. Tutti gli altri campi devono essere impostati su 0.

GET_DEF e GET_CUR richieste segnalano rispettivamente le impostazioni predefinite e correnti per i campi qwValue/dwValue e bmControlFlags. Tutti gli altri campi devono essere impostati su 0.

Una richiesta di edizione Standard T_CUR viene inviata dall'host dopo l'impostazione di tutti i campi.

La tabella seguente esegue il mapping dei selettori di controllo per Microsoft-XU ai rispettivi valori e alla posizione di bit per il campo bmControls in Descrittore unità di estensione:

Selettore di controllo Valore Posizione bit
(Campo bmControls)
MSXU_CONTROL_UNDEFINED 0x00 ND
MSXU_CONTROL_FOCUS 0x01 D0
MSXU_CONTROL_EXPOSURE 0x02 D1
MSXU_CONTROL_EVCOMPENSATION 0x03 D2
MSXU_CONTROL_WHITEBALANCE 0x04 D3
Prenotato per un futuro utilizzo 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 G10
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 Controlli annullabili

Un controllo Annullabile viene definito qui usando la funzionalità di aggiornamento automatico.

GET_INFO richiesta deve segnalare tale controllo come controllo di aggiornamento automatico (ad esempio, D3 bit deve essere impostato su 1), ma non come controllo asincrono (ad esempio, D4 bit deve essere impostato su 0).

Per tale controllo, è possibile inviare una richiesta di edizione Standard T_CUR per impostare un nuovo valore (una richiesta edizione Standard T_CUR(NORMAL) in cui bmOperationFlags:D0 bit è impostato su 0) o annullare una richiesta edizione Standard T_CUR(NORMAL) precedente (una richiesta edizione Standard T_CUR(CANCEL) in cui il bit bmOperationFlags:D0 è impostato su 1). Una richiesta di edizione Standard T_CUR deve essere completata immediatamente dal dispositivo non appena viene ricevuta la richiesta (anche se l'hardware non è configurato o convergente alle nuove impostazioni richieste). Per ogni richiesta edizione Standard T_CUR(NORMAL), il dispositivo genera un corrispondente interrupt di modifica del controllo per questo controllo generato quando sono state applicate le nuove impostazioni o quando arriva una richiesta di edizione Standard T_CUR(CANCEL). Fino all'arrivo di questo interrupt, la richiesta edizione Standard T_CUR(NORMAL) viene considerata in corso. Quando è in corso una richiesta edizione Standard T_CUR(NORMAL), ulteriori richieste di edizione Standard T_CUR(NORMAL) per questo particolare controllo genereranno un errore. Una richiesta di edizione Standard T_CUR(CANCEL) avrà sempre esito positivo. Se non c'è nulla da annullare, il dispositivo non esegue alcuna operazione.

Il payload dell'interrupt di modifica del controllo deve avere il bit bmOperationFlags:D0 impostato su 0 se sono state applicate le impostazioni specificate da edizione Standard T_CUR(NORMAL) (ad esempio, la convergenza è avvenuta) e impostata su 1 se le impostazioni non sono state applicate a causa di una richiesta di edizione Standard T_CUR(CANCEL) che è arrivata dopo il edizione Standardrichiesta T_CUR(NORMAL) (ad esempio, la convergenza non è ancora avvenuta).

2.2.2.2 Controllo dello stato attivo

Questo controllo consente al software host di specificare le impostazioni di messa a fuoco per la fotocamera. Si tratta di un controllo globale che influisce su tutti gli endpoint in tutte le interfacce di streaming video associate all'interfaccia di controllo video.

controllo dello stato attivo.

Questo controllo funzionerà come controllo Annullabile (vedere la sezione 2.2.2.1 per GET_INFO requisiti di richiesta e il comportamento funzionale di edizione Standard T_CUR richiesta).

GET_MAX requisito: questo controllo annuncia il supporto per bit D0, D1, D2, D8 e D18 in bmControlFlags.

GET_DEF requisito: il valore predefinito per bmControlFlags deve essere D0 e D18 impostato su 1 e dwValue impostato su 0.

Per le richieste di GET_CUR/edizione Standard T_CUR, si applicano le restrizioni seguenti per il campo bmControlFlags:

  • Tra I bit D0, D1 e D8, è possibile impostare un solo bit; nessuno di essi impostato è valido anche se È impostato D2 bit.

  • Tra D16, D17, D18, D19 e D20, è possibile impostare un solo bit, nessuna di esse impostata è valida.

  • D1 non è compatibile con tutti gli altri bit attualmente definiti (D0, D2, D8, D16, D17, D18, D19 e D20).

  • D2 non è compatibile con D1 e D8.

  • D2 non è compatibile con D16, D17, D18, D19 e D20 se D0 non è impostato.

2.2.2.3 Controllo esposizione

Questo controllo consente al software host di specificare le impostazioni di esposizione per la fotocamera. Si tratta di un controllo globale che influisce su tutti gli endpoint in tutte le interfacce di streaming video associate all'interfaccia di controllo video.

controllo dell'esposizione.

GET_INFO richiesta segnala questo controllo come controllo asincrono (ad esempio, D4 bit deve essere impostato su 1) ma non come controllo AutoUpdate (ad esempio, D3 bit deve essere impostato su 0).

GET_MAX requisito: questo controllo annuncia il supporto per bit D0, D1 e D2 in bmControlFlags.

GET_DEF requisito: il valore predefinito per bmControlFlags deve essere impostato su 1 e qwValue impostato su 0.

Per le richieste di GET_CUR/edizione Standard T_CUR, si applicano le restrizioni seguenti per il campo bmControlFlags:

  • Tra I bit D0, D1 e D2, è necessario impostare almeno un bit.
  • D1 non è compatibile con D0 e D2.
2.2.2.4 Controllo compensazione EV

Questo controllo consente al software host di specificare le impostazioni di compensazione EV per la fotocamera. Si tratta di un controllo globale che influisce su tutti gli endpoint in tutte le interfacce di streaming video associate all'interfaccia di controllo video.

Controllo di compensazione E V.

GET_INFO richiesta segnala questo controllo come controllo asincrono (ad esempio, D4 bit deve essere impostato su 1) ma non come controllo AutoUpdate (ad esempio, D3 bit deve essere impostato su 0).

GET_RES richiesta segnala tutte le risoluzioni supportate (dimensioni passo) impostando i bit corrispondenti in bmControlFlags. Tutti gli altri campi devono essere impostati su 0.

GET_MIN e GET_MAX richieste segnalano il valore minimo e massimo supportato per dwValue. Il bit D4 (che indica le dimensioni dettagliate di 1) deve essere quello e solo il bit impostato in bmControlFlags. Tutti gli altri campi devono essere impostati su 0.

GET_DEF, GET_CUR, edizione Standard T_CUR richieste seguono le definizioni nella sezione 2.2.2.1, ma deve avere un solo bit impostato tra D0, D1, D2, D3 e D4 bit per i campi bmControlFlags. Inoltre, GET_DEF richiesta deve avere dwValue impostato su 0.

2.2.2.5 Controllo bilanciamento del bianco

Questo controllo consente al software host di specificare le impostazioni di bilanciamento del bianco per la fotocamera. Si tratta di un controllo globale che influisce su tutti gli endpoint in tutte le interfacce di streaming video associate all'interfaccia di controllo video.

controllo del bilanciamento del bianco.

GET_INFO richiesta segnala questo controllo come controllo asincrono (ad esempio, D4 bit deve essere impostato su 1) ma non come controllo AutoUpdate (ad esempio, D3 bit deve essere impostato su 0).

GET_RES, GET_MIN, GET_MAX richieste seguono le definizioni nella sezione 2.2.2.1, ma dwValueFormat è impostata su 1.

GET_MAX requisito: questo controllo annuncia il supporto per bit D0, D1 e D2 in bmControlFlags.

GET_DEF requisito: il valore predefinito per bmControlFlags deve essere impostato su 1 e dwValueFormat e dwValue impostato su 0.

Per le richieste di GET_CUR/edizione Standard T_CUR, si applicano le restrizioni seguenti per il campo bmControlFlags:

  • Tra I bit D0, D1 e D2, è necessario impostare almeno un bit.
  • D1 non è compatibile con D0 e D2.
2.2.2.6 Controllo autenticazione viso

Questo controllo consente al software host di specificare se la fotocamera supporta le modalità di streaming usate per l'autenticazione del viso. Il supporto per questo controllo implica che la fotocamera è in grado di autenticare il viso. Questo controllo non sarà supportato in caso contrario.

Questo controllo è applicabile solo alle fotocamere che possono produrre dati Infra-Red (IR) ed è applicabile solo alle interfacce di streaming specificate (ovvero un subset di tutte le interfacce di streaming video associate all'interfaccia di controllo video).

controllo di autenticazione del viso.

GET_RES e le richieste di GET_MIN devono segnalare i campi bNumEntries impostati su 0 e pertanto non hanno campi aggiuntivi.

Per una richiesta di GET_MAX, un bit impostato su 1 nel campo bmControlFlags indica che la modalità corrispondente è supportata per tale interfaccia di streaming. Un output della richiesta di GET_MAX elenca tutti e solo le interfacce di streaming in grado di essere D1 o D2 (ad esempio, se un'interfaccia di streaming è in grado di essere D1 o D2, viene elencata; in caso contrario, non viene elencata). Inoltre, nessuna interfaccia di streaming deve essere pubblicizzata per essere in grado di essere sia D1 che D2. Se un'interfaccia di streaming è destinata anche all'uso in modo generico (ad esempio, al di fuori dello scopo dell'autenticazione del viso), D0 deve essere impostata su 1 per tale interfaccia di streaming (oltre a D1/D2).

Per le richieste di GET_DEF/GET_CUR/edizione Standard T_CUR, un bit impostato su 1 nel campo bmControlFlags indica che viene scelta la modalità corrispondente per tale interfaccia di streaming. In queste richieste, un solo bit (tra D0, D1 & D2) deve essere impostato per una particolare interfaccia di streaming. Per la richiesta di GET_DEF che restituisce la scelta predefinita (specifica dell'implementazione), se un'interfaccia di streaming è destinata anche all'uso in modo generico (ad esempio, al di fuori dello scopo dell'autenticazione del viso), D0 deve essere impostato su 1 per impostazione predefinita su tale interfaccia di streaming; in caso contrario, D1 o D2 (ma non entrambi) devono essere impostati su 1 per impostazione predefinita. Un output di richiesta GET_DEF/GET_CUR contiene informazioni su tutte le interfacce di streaming elencate nell'output della richiesta GET_MAX, tuttavia, una richiesta di edizione Standard T_CUR può includere solo un subset delle interfacce di streaming elencate nell'output della richiesta GET_MAX.

Esempio:

Si supponga che una fotocamera abbia quattro interfacce di streaming video con numeri 0x03, 0x05, 0x08 e 0x0b rispettivamente in cui l'interfaccia di streaming video 0x05 produce dati RGB e le rimanenti tre interfacce di streaming video producono dati IR. Tra le interfacce di streaming che producono dati ir, si supponga che le interfacce di streaming 0x03 e 0x0b siano entrambe in grado di D1, ma l'interfaccia di streaming 0x03 è anche in grado di D0. In questo esempio, il controllo di autenticazione viso è applicabile solo alle interfacce di streaming numerate 0x03 e 0x0b e quindi solo queste interfacce vengono visualizzate nelle richieste.

L'output per GET_MAX richiesta deve essere il seguente:

GET_MAX di autenticazione del viso.

L'output per GET_DEF richiesta sarà il seguente:

GET_DEF di autenticazione del viso.

Una richiesta di edizione Standard T_CUR per modificare l'impostazione nell'interfaccia di streaming 0x03 in D1 sarà la seguente:

edizione Standard T_CUR di autenticazione viso.

L'output di una richiesta di GET_CUR dopo la richiesta precedente edizione Standard T_CUR sarà la seguente:

GET_CUR di autenticazione del viso.

2.2.2.7 Fotocamera Controllo estrinsico

Questo controllo consente al software host di ottenere i dati di etrinsics della fotocamera per gli endpoint sulle interfacce di streaming video associate all'interfaccia di controllo video. I dati ottenuti per ogni endpoint vengono visualizzati come attributi MFStreamExtension_Fotocamera Extrinsics nell'archivio attributi per il flusso corrispondente (ottenuto usando la chiamata IMFDeviceTransform::GetOutputStreamAttributes).

controllo di estrinie della fotocamera.

GET_RES, GET_MIN, GET_MAX, GET_CUR richieste devono segnalare i campi bNumEntries impostati su 0 e pertanto non hanno campi aggiuntivi.

GET_DEF richiesta elenca tutti gli endpoint con le informazioni estristriche disponibili.

Esempio:

Si supponga che una fotocamera abbia tre interfacce di streaming video con numeri 0x03, 0x05 e 0x08 rispettivamente in cui l'interfaccia di streaming video 0x05 supporta l'acquisizione di immagini ancora usando il metodo 2 oltre all'acquisizione video supportata da tutte le interfacce di streaming video. Tra queste interfacce di streaming, si supponga che le interfacce di streaming 0x05 e 0x08 abbiano informazioni estristriche disponibili mentre l'interfaccia di streaming 0x03 non dispone delle informazioni estristriche disponibili.

In questo esempio, l'output per GET_DEF richiesta deve essere il seguente:

GET_DEF di estrini della fotocamera.

2.2.2.8 Fotocamera controllo intrinseco

Questo controllo consente al software host di ottenere i dati intrinseci della fotocamera per gli endpoint nelle interfacce di streaming video associate all'interfaccia di controllo video. I dati ottenuti per ogni endpoint vengono visualizzati come attributi MFStreamExtension_Pinhole Fotocamera Intrinsics nell'archivio attributi per il flusso corrispondente (ottenuto usando la chiamata IMFDeviceTransform::GetOutputStreamAttributes).

controllo intrinseco della fotocamera.

GET_RES, GET_MIN, GET_MAX, GET_CUR richieste devono segnalare i campi bNumEntries impostati su 0 e pertanto non hanno campi aggiuntivi.

GET_DEF richiesta elenca tutti gli endpoint con le informazioni intrinseche disponibili.

Esempio:

Si supponga che una fotocamera abbia tre interfacce di streaming video con numeri 0x03, 0x05 e 0x08 rispettivamente in cui l'interfaccia di streaming video 0x05 supporta l'acquisizione di immagini ancora usando il metodo 2 oltre all'acquisizione video supportata da tutte le interfacce di streaming video. Tra queste interfacce di streaming, si supponga che le interfacce di streaming 0x05 e 0x08 abbiano informazioni intrinseche disponibili mentre l'interfaccia di streaming 0x03 non dispone delle informazioni intrinseche disponibili.

In questo esempio, l'output per GET_DEF richiesta deve essere il seguente:

GET_DEF intrinseci della fotocamera.

2.2.2.9 Controllo metadati

Questo controllo consente al software host di eseguire query e controllare i metadati prodotti dalla fotocamera. Si tratta di un controllo globale che influisce su tutti gli endpoint in tutte le interfacce di streaming video associate all'interfaccia di controllo video.

Questo controllo viene mappato a KSPROPERTY_CAMERACONTROL_EXTENDED_METADATA dal driver della fotocamera.

controllo metadati.

Se edizione Standard T_CUR richiesta è supportata dal firmware, si applica quanto segue:

  • GET_MIN, le richieste di GET_DEF segnalano il campo dwValue impostato su 0.

  • GET_RES richiesta deve segnalare il campo dwValue allo stesso valore riportato dalla richiesta GET_MAX.

  • Quando viene ricevuta una richiesta di edizione Standard T_CUR con dwValue impostato su 0, la fotocamera non produrrà metadati. Quando viene ricevuta una richiesta di edizione Standard T_CUR con dwValue impostato su come indicato dalla richiesta di GET_MAX, la fotocamera può produrre metadati e le dimensioni di tali metadati non possono superare dwValue per qualsiasi fotogramma.

Se edizione Standard T_CUR richiesta non è supportata dal firmware, si applica quanto segue:

  • GET_MIN, GET_DEF le richieste devono segnalare il campo dwValue come indicato dalla richiesta di GET_MAX.

  • GET_RES richiesta deve segnalare il campo dwValue impostato su 0.

  • La fotocamera può produrre metadati e le dimensioni totali di tali metadati non possono superare il valore dwValue , come segnalato dalla richiesta di GET_MAX , ovvero 1024 byte meno le dimensioni di un payload di metadati UsbVideoHeader , per qualsiasi fotogramma.

  • Un payload dei metadati UsbVideoHeader è sizeof(KSCAMERA_METADATA_ITEMHEADER) + sizeof(KSTREAM_UVC_METADATA) o 24 byte.

I metadati prodotti devono essere conformi ai metadati in formato standard Microsoft descritti nella sezione 2.2.3.

2.2.2.10 Controllo Torch ir

Questo controllo fornisce un mezzo flessibile per l'hardware LED IR per segnalare la misura in cui può essere controllato e fornisce la possibilità di controllarlo. Si tratta di un controllo globale che influisce su tutti gli endpoint su tutte le interfacce di streaming video associate all'interfaccia di controllo video regolando l'alimentazione su una lampada ir collegata alla fotocamera.

Questo controllo viene mappato a KSPROPERTY_CAMERACONTROL_EXTENDED_IRTORCHMODE dal driver della fotocamera.

Controllo della torcia R.

Si applica quanto segue:

  • GET_LEN richiesta deve segnalare un valore pari a 8.

  • GET_INFO richiesta deve segnalare un valore pari a 3. Questo valore indica un controllo sincrono che supporta GET_CUR e edizione Standard T_CUR.

  • GET_MIN richiesta segnala il campo dwMode impostato su 0 e dwValue impostato su un valore che indica la potenza minima. Un livello di potenza pari a 0 può indicare OFF, ma il livello minimo di potenza operativa non deve essere 0.

  • GET_RES richiesta deve segnalare il campo dwMode impostato su 0 e dwValue impostato su un numero minore o uguale a GET_MAX(dwValue) – GET_MIN(dwValue) e in modo che GET_MAX(dwValue ) – GET_MIN(dwValue) sia uniformemente divisibile per tale valore. dwValue potrebbe non essere zero (0).

  • GET_MAX richiesta segnala il campo dwMode impostato con bit D[0-2] impostato per identificare le funzionalità di questo controllo. DwMode deve avere bit D0 impostato, a indicare che OFF è supportato e deve avere almeno un altro bit impostato, supportando uno stato attivo. DwValue deve essere impostato su un valore che indica la normale potenza.

  • GET_DEF richiesta deve segnalare il campo dwMode impostato sulla modalità predefinita in cui il sistema deve trovarsi prima dell'inizio del flusso. dwMode deve essere impostato su 2 (ON) o 4 (ALTERNATE). DwValue deve essere impostato sul livello di alimentazione usato normalmente per il controllo FaceAuth. dwValue è definito dal produttore.

  • GET_CUR richiesta segnala il campo dwMode impostato sulla modalità operativa corrente e dwValue impostato sull'illuminazione corrente.

  • Quando viene ricevuta una richiesta di edizione Standard T_CUR, la torcia ir imposta l'illuminazione su un'intensità prorate usando la modalità operativa richiesta.

La Torch del runtime di integrazione deve generare l'attributo MF_CAPTURE_METADATA_FRAME_ILLUMINATION per ogni frame. Può fornire questa funzionalità tramite un MFT del dispositivo o includendo un attributo MetadataId_FrameIllumination nel payload dei metadati dalla fotocamera. Vedere la sezione 2.2.3.4.4.

Questo scopo unico dei metadati è indicare se una cornice è illuminata o meno. Si tratta degli stessi metadati richiesti dall'KSPROPERTY_CAMERACONTROL_EXTENDED_FACEAUTH_MODE DDI e dall'MSXU_FACE_AUTHENTICATION_CONTROL definiti nella sezione 2.2.2.6.

2.2.2.11 Controllo finestra digitale

La finestra digitale specifica il campo di visualizzazione e zoom della fotocamera mentre la fotocamera è in streaming. Questo controllo è un potenziale sostituto di Pan, Tilt e Zoom. Questo controllo si applica solo mentre la fotocamera è in streaming attivo.

Questo controllo è disponibile per tutti i tipi di fotocamere ed è indipendente dal tipo di supporto trasmesso.

Questo controllo consente al software host di eseguire query e controllare la finestra digitale associata a una fotocamera.

Si tratta di un controllo globale che influisce su tutti gli endpoint in tutte le interfacce di streaming video associate all'interfaccia di controllo video. Regola l'origine dei dati pixel usati dall'ISP. Sono inclusi i pin di acquisizione del metodo 2 e del metodo 3.

Questo controllo viene mappato a KSPROPERTY_CAMERACONTROL_EXTENDED_DIGITALWINDOW dal driver della fotocamera posta in arrivo.

controllo finestra digitale.

Si applica quanto segue:

  • GET_LEN richiesta deve segnalare un valore pari a 16.

  • GET_INFO richiesta deve segnalare un valore pari a 3. Questo valore indica un controllo sincrono che supporta GET_CUR e edizione Standard T_CUR.

  • GET_MIN richiesta deve segnalare il campo dwMode impostato su 0, OriginX e OriginY impostato su 0.0 e WindowSize impostato su 1.0. Questa richiesta è attualmente inutilizzata.

  • GET_RES richiesta deve segnalare il campo dwMode impostato su 0, OriginX e OriginY impostato su 0.0 e WindowSize impostato su 1.0. Questa richiesta è attualmente inutilizzata.

  • GET_MAX richiesta segnala il campo dwMode impostato con bit D0 impostato per identificare le funzionalità di questo controllo. Il valore 0 indica che è supportata solo la modalità manuale. Il valore 1 indica che è supportata la modalità di inquadratura automatica del viso. Il resto di questi campi non è usato, tuttavia, è consigliabile impostare OriginX e OriginY su 0.0 e WindowSize impostato su 1.0.

  • GET_DEF richiesta deve segnalare il campo dwMode impostato su 0, OriginX e OriginY impostato su 0.0 e WindowSize impostato su 1.0. Questa è sempre la finestra predefinita.

  • GET_CUR richiesta deve segnalare il campo dwMode impostato sulla modalità operativa corrente e OriginX, OriginY e WindowSize descrivono la finestra digitale corrente.

  • Quando viene ricevuta una richiesta di edizione Standard T_CUR, la fotocamera regola il relativo campo di visualizzazione in modo che corrisponda alla modalità operativa selezionata e alla finestra digitale.

  • Se viene selezionata la modalità di inquadratura automatica del viso, la fotocamera seleziona una finestra che comprende completamente il viso dominante nella scena e originX, OriginY e WindowSize passati vengono ignorati. Se non viene trovato alcun viso, viene usata la finestra predefinita.

  • Tutte le modifiche apportate alla finestra digitale devono essere riflesse nel payload dei metadati di ogni esempio.

  • Le modifiche apportate alla finestra digitale potrebbero non essere immediatamente effettive, ma il controllo deve rispondere immediatamente. Le modifiche apportate alla finestra digitale devono essere segnalate nel payload dei metadati del frame non appena diventano effettive.

2.2.2.12 Controllo configurazione finestra digitale

Il controllo Digital Window Config Caps specifica i limiti di ridimensionamento della fotocamera in base a tutte le risoluzioni disponibili. Le risoluzioni sono indipendenti dal tipo di supporto, quindi due tipi di supporti che annunciano la stessa risoluzione dello schermo vengono combinati in una sola funzionalità.

A causa delle limitazioni delle dimensioni di un endpoint di controllo, questo controllo può descrivere al massimo 1820 risoluzioni univoche.

Questo controllo deve essere sempre disponibile per segnalare le funzionalità del controllo Finestra digitale se tale controllo è presente.

Questo controllo viene mappato a KSPROPERTY_CAMERACONTROL_EXTENDED_DIGITALWINDOW_CONFIGC piattaforma di strumenti analitici dal driver della fotocamera posta in arrivo.

controllo di configurazione della finestra digitale.

Si applica quanto segue:

  • GET_LEN richiesta deve segnalare l'intera dimensione del payload. Le dimensioni del payload devono essere un multiplo di 36 perché ogni definizione di risoluzione è di 36 byte di lunghezza.

  • GET_INFO richiesta deve segnalare un valore 1. Questo valore indica un controllo sincrono che supporta solo GET_CUR.

  • GET_CUR richiesta deve segnalare una matrice di funzionalità. I campi della struttura di funzionalità sono definiti in precedenza.

  • GET_MIN, GET_MAX, GET_RES e richieste di GET_DEF non sono usate, ma devono restituire gli stessi valori di GET_CUR.

  • edizione Standard T_CUR richieste non sono supportate.

Controllo HDR video 2.2.2.13

Questo controllo consente al software host di specificare se la fotocamera supporta Video HDR. Il supporto per questo controllo implica che la fotocamera è in grado di eseguire video HDR come il miglior sforzo. Se la fotocamera non supporta Video HDR, non deve implementare questo controllo.

Questo controllo viene mappato a KSPROPERTY_CAMERACONTROL_EXTENDED_VIDEOHDR dal driver della fotocamera.

video controllo H D R.

Si applica quanto segue:

  • GET_LEN richiesta deve segnalare l'intera dimensione del payload (ad esempio, 4 byte).

  • GET_INFO richiesta deve segnalare un valore 3. Questo valore indica un controllo sincrono che supporta GET_CUR, edizione Standard T_CUR.

  • GET_CUR richiesta deve segnalare il campo dwMode impostato sulla modalità operativa corrente.

  • GET_DEF deve avere un valore dwMode impostato su OFF (0).

  • GET_MAX richiesta annuncia il supporto per le modalità di funzionamento disponibili: [1 (ON/OFF), 3 (ON/OFF/Auto)]. Il supporto per ON (1) è obbligatorio per questo controllo.

  • GET_MIN e GET_RES richieste devono segnalare 0.

  • edizione Standard T_CUR richiesta deve impostare la modalità su OFF (0), ON (1) o AUTO (2).

2.2.2.14 Controllo della limitazione della frequenza dei fotogrammi

Questo controllo consente al software host di specificare se la fotocamera supporta la limitazione della velocità dei fotogrammi.

Questo controllo si applica solo mentre la fotocamera è in streaming attivo. Per essere attivamente in streaming, significa che un pin di anteprima o di record deve essere in KSSTATE_RUN, pronto e in grado di distribuire fotogrammi. In un set se un flusso non è attivo, questo controllo deve restituire STATUS_INVALID_DEVICE_STATE.

Anche se si tratta di un controllo ambito filtro, il controllo frequenza dei fotogrammi non deve influire sul pin di foto o sui flussi SENZA RGB, ad esempio IR/profondità. Inoltre, quando la limitazione della frequenza dei fotogrammi è attiva, anche la durata del campione deve essere modificata di conseguenza.

Questo controllo viene mappato a KSPROPERTY_CAMERACONTROL_EXTENDED_FRAMERATE_THROTTLE dal driver della fotocamera.

Selettore di controllo MSXU_CONTROL_FRAMERATE_THROTTLE
Richieste obbligatorie GET_INFO, GET_LEN, GET_RES, GET_MIN, GET_MAX, GET_DEF, GET_CUR, edizione Standard T_CUR
Richieste facoltative
wLength 20
Contropartita Campo Dimensione Valore Descrizione
0 dwMode 4 Flag D0: 0 (OFF) o 1 (ON)
D1-D31: riservato e impostato su 0
4 scaleFactorPercentage 4 Numero Questo valore deve essere compreso nell'intervallo min e max e deve essere impostato su un multiplo di valore Step. Ad esempio: se Min = 5, Max = 100 e Step = 5 e se un'applicazione ha deciso di ridurre la frequenza dei fotogrammi all'80% del valore originale, questo valore membro deve essere impostato su 80. Impostando questo valore in modo appropriato, un'app può assicurarsi che la nuova frequenza dei fotogrammi non superi mai il valore originale, né va a zero, ma è possibile usare la frequenza dei fotogrammi originale.
8 min 4 Numero Min deve essere uguale alle dimensioni di un passaggio in fase di lease oppure deve essere costituito da più dimensioni di passaggio( ad esempio: passaggio 1, passaggio2 e così via). Il valore minimo non può essere impostato su 0.
12 max 4 Numero Max deve essere impostato su 100, ovvero nessuna modifica della frequenza dei fotogrammi.
16 Passo 4 Numero Il passaggio deve essere un fattore rigoroso di Max, ad esempio {Max % Step == 0}. Esempio: 1, 2, 4, 5 e così via.

Si applica quanto segue:

  • GET_LEN richiesta deve segnalare l'intera dimensione del payload (ad esempio, 20 byte). 

  • GET_INFO richiesta deve segnalare un valore 3. Questo valore indica un controllo sincrono che supporta GET_CUR, edizione Standard T_CUR. 

  • GET_CUR richiesta segnala il campo dwMode impostato sulla modalità operativa corrente e scaleFactorPercentage impostato sul valore scaleFactor corrente. Min, max e step devono segnalare i valori come descritto nella tabella precedente.

  • GET_DEF deve avere un valore dwMode impostato su OFF(0), scaleFactorPercentage=100, Min impostato su valore minimo predefinito, max impostato su 100 e, passaggio impostato sul valore predefinito del passaggio. I valori di min e step devono essere definiti dal produttore, ma devono seguire le linee guida indicate nella tabella precedente.

  • GET_ richiesta MAX annuncia il supporto per le modalità di operazioni disponibili e segnala il valore 1 [ ON | OFF ]. Il supporto per ON e OFF è obbligatorio per questo controllo. I valori predefiniti possono essere impostati su min, max, step e scaleFactorPercentage.

  • GET_MIN e GET_RES richieste devono segnalare 0. 

  • edizione Standard T_CUR richiesta deve impostare la modalità su OFF(0), ON(1). Se dwMode è impostato su ON, scaleFactorPercentage avrà effetto. Per i casi OFF e ON, scaleFactorPercentage deve essere valido come descritto nella tabella precedente.

2.2.2.15 Campo del controllo configurazione visualizzazione 2

Il campo del controllo Configurazione visualizzazione 2 specifica i valori del grado di visualizzazione diagonale supportati come matrice di valori. Tutti i valori supportati devono essere compresi nell'intervallo di valori teorici min e max, 1 grado - 360 gradi.

Se il dispositivo vuole supportare i valori di campo di visualizzazione continui, deve segnalare tutti i valori supportati. Ad esempio, se il dispositivo vuole supportare il campo diagonale di visualizzazione da 85 gradi a 60 gradi con dimensioni di passaggio pari a 1, questo controllo deve segnalare una matrice di valori [85, 84, 83, 82, ..., 62, 61, 60].

Questo controllo deve essere disponibile per segnalare le funzionalità quando è presente il controllo Field of View 2.

Si tratta di un controllo a livello di filtro sincrono.

Questo controllo viene mappato a KSPROPERTY_CAMERACONTROL_EXTENDED_ FIELDOFVIEW2_CONFIGC piattaforma di strumenti analitici dal driver della fotocamera.

Selettore di controllo MSXU_CONTROL_FIELDOFVIEW2_CONFIG
Richieste obbligatorie GET_INFO, GET_LEN, GET_RES, GET_MIN, GET_MAX, GET_DEF, GET_CUR
Richieste facoltative
wLength 4 byte + Conteggio volte 4 byte, dove Count è il numero di valori univoci campo di visualizzazione.
Contropartita Campo Dimensione Valore Descrizione
0 dwDefaultFieldOfView 4 Numero Il campo diagonale predefinito di View deve essere uno dei valori riportati nella matrice FieldOfViewValues.
4 FieldOfViewValues[0] 4 Numero Primo valore campo di visualizzazione, deve essere il valore foV (campo di visualizzazione) più ampio.
4 + 4*(Count-1) FieldOfViewValues [Count -1] 4 Numero Ultimo valore campo di visualizzazione, deve essere il valore FoV più stretto.

Si applica quanto segue:

  • GET_LEN richiesta deve segnalare l'intera dimensione del payload.

  • GET_INFO richiesta deve segnalare un valore 1. Questo valore indica un controllo sincrono che supporta solo GET_CUR.

  • GET_CUR richiesta segnala i dati che contengono foV predefinito e matrice di valori FoV supportati in ordine decrescente. I campi della struttura sono definiti in precedenza.

  • GET_DEF richiesta deve segnalare lo stesso GET_CUR.

  • GET_MIN, le richieste di GET_MAX e GET_RES non sono usate, ma devono restituire gli stessi valori di GET_CUR.

  • edizione Standard T_CUR richieste non sono supportate.

Il campo dei valori di visualizzazione deve essere in ordine decrescente, ad esempio il campo più ampio della visualizzazione è il primo e il più stretto è l'ultimo.

2.2.2.16 Campo del controllo Visualizzazione 2

Questo controllo specifica il campo di base della visualizzazione utilizzato dalla fotocamera durante lo streaming. Questo controllo può essere applicato prima o durante lo streaming.

Questo controllo è disponibile per tutti i tipi di fotocamere ed è indipendente dal tipo di supporto trasmesso.

Questo controllo consente al software host di eseguire query e controllare il campo di visualizzazione associato a una fotocamera.

Si tratta di un controllo globale che influisce su tutti gli endpoint in tutte le interfacce di streaming video associate all'interfaccia di controllo video. Regola l'origine dei dati pixel (o sensore) usati dall'ISP (Image Signal Processor). Sono inclusi i pin di acquisizione del metodo 2 e del metodo 3.

Si tratta di un controllo a livello di filtro sincrono.

Questo controllo viene mappato a KSPROPERTY_CAMERACONTROL_EXTENDED_ FIELDOFVIEW2 dal driver della fotocamera.

Selettore di controllo MSXU_CONTROL_FIELDOFVIEW2
Richieste obbligatorie GET_INFO, GET_LEN, GET_RES, GET_MIN, GET_MAX, GET_DEF, GET_CUR, edizione Standard T_CUR
Richieste facoltative
wLength 4
Contropartita Campo Dimensione Valore Descrizione
0 dwValue 4 Numero Campo diagonale di visualizzazione in gradi.

Si applica quanto segue:

  • GET_LEN richiesta deve segnalare un valore pari a 4.

  • GET_INFO richiesta deve segnalare un valore 3. Questo valore indica un controllo sincrono che supporta GET_CUR e edizione Standard T_CUR.

  • GET_MIN richiesta deve segnalare il campo dwValue impostato sul valore minimo supportato campo di visualizzazione.

  • GET_RES richiesta deve segnalare il campo dwValue impostato 0. Questa richiesta è attualmente inutilizzata.

  • GET_MAX richiesta deve segnalare il campo dwValue impostato sul valore massimo supportato di Field of View.

  • GET_DEF richiesta deve segnalare il campo dwValue impostato sul valore predefinito Campo di visualizzazione.

  • GET_CUR richiesta deve segnalare il campo dwValue impostato sul valore corrente campo di visualizzazione.

  • Quando viene ricevuta una richiesta di edizione Standard T_CUR, la fotocamera imposta il relativo campo di visualizzazione in modo che corrisponda al dwValue specificato.

  • Se la fotocamera implementa CT_ZOOM_RELATIVE_CONTROL e/o CT_ZOOM_ABSOLUTE_CONTROL, questi controlli verranno reimpostati sui valori predefiniti quando viene chiamato MSXU_CONTROL_FIELDOFVIEW2 edizione Standard T_CUR.

Se la fotocamera implementa MSXU_CONTROL_DIGITALWINDOW, rifletterà la modifica della finestra quando viene impostato un nuovo valore Field of View. E viceversa, il campo di visualizzazione rifletterà le modifiche apportate tramite finestra digitale. Per informazioni dettagliate, vedere KSPROPERTY_CAMERACONTROL_EXTENDED_ FIELDOFVIEW2 .

2.2.3 Metadati

La progettazione dei metadati frame di formato standard si basa sulla progettazione di metadati personalizzati UVC di Windows 10. In Windows 10, i metadati personalizzati sono supportati per UVC usando un INF personalizzato per il driver della fotocamera (nota: il driver della fotocamera può essere basato su Windows USBVIDEO.SYS, ma è necessario un INF personalizzato per l'hardware specificato per l'applicazione dei metadati). Se MetadataBufferSizeInKB<PinIndex> la voce del Registro di sistema è presente e diversa da zero, i metadati personalizzati sono supportati per tale pin e il valore indica le dimensioni del buffer usate per i metadati. Il <PinIndex> campo indica un indice in base 0 dell'indice del pin video.

In Windows 10, versione 1703, un driver della fotocamera può segnalare il supporto per i metadati in formato standard Microsoft includendo la voce AddReg seguente:

StandardFormatMetadata<PinIndex>: REG_DWORD: 0x0 (Non supportato) per 0x1 (supportato)

Questa chiave del Registro di sistema verrà letta da DevProxy e informa il driver UVC che i metadati sono in formato standard impostando il flag KSSTREAM_METADATA_INFO_FLAG_STANDARDFORMAT nel campo Flags per KSSTREAM_METADATA_INFO struttura.

2.2.3.1 Metadati in formato Standard Microsoft

I metadati in formato standard Microsoft sono una o più istanze della struttura seguente:

metadati di formato standard.

typedef struct tagKSCAMERA_METADATA_ITEMHEADER {
    ULONG MetadataId;
    ULONG Size; // Size of this header + metadata payload following
} KSCAMERA_METADATA_ITEMHEADER, *PKSCAMERA_METADATA_ITEMHEADER;

Il campo MetadataId viene compilato da un identificatore della definizione di enumerazione seguente che contiene identificatori e identificatori personalizzati ben definiti (identificatori >= 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;

Il campo Dimensioni è impostato su sizeof(KSCAMERA_METADATA_ITEMHEADER) + sizeof(Metadata Payload).

2.2.3.2 Metadati di formato standard generati dal firmware dai pacchetti di frame video USB

Durante un trasferimento su UVC per il video basato su fotogrammi, il fotogramma video viene inserito in una serie di pacchetti, ognuno preceduto da un'intestazione payload UVC. Ogni intestazione payload UVC è definita dalla specifica usb video class driver frame based payload:

Intestazione payload

Di seguito è riportata una descrizione del formato di intestazione del payload per i formati basati su frame.

intestazione payload.

Campo HLE (lunghezza intestazione)

Il campo lunghezza intestazione specifica la lunghezza dell'intestazione, espressa in byte.

Campo intestazione campo di bit

FID: Identificatore di frame

  • Questo bit attiva/disattiva il limite iniziale di ogni fotogramma e rimane costante per il resto del frame.

EOF: fine del frame

  • Questo bit indica la fine di un fotogramma video e viene impostato nell'ultimo esempio video appartenente a un fotogramma. L'uso di questo bit è un'ottimizzazione per ridurre la latenza durante il completamento di un trasferimento di fotogrammi ed è facoltativo.

PTS: TimeStamp presentazione

  • Questo bit, se impostato, indica la presenza di un campo PTS.

SCR: Riferimento all'orologio di origine

  • Questo bit, se impostato, indica la presenza di un campo SCR.

RES: riservato.

  • Impostare su 0.

STI: Immagine ancora

  • Questo bit, se impostato, identifica un esempio video come appartenente a un'immagine ancora.

ERR: Bit di errore

  • Questo bit, se impostato, indica un errore nel flusso del dispositivo.

EOH: Fine dell'intestazione

  • Questo bit, se impostato, indica la fine dei campi BFH.

PTS: timestamp presentazione, dimensione: 4 byte, valore: numero

  • Il campo PTS è presente quando il bit PTS viene impostato nel campo BFH[0]. Vedere la sezione 2.4.3.3 "Intestazioni del payload video e ancora immagine" nella specifica USB Device Class Definition for Video Devices (Definizione della classe di dispositivo USB per i dispositivi video).

SCR: Source Clock Reference, Size: 6 byte, Value: Number

  • Il campo SCR è presente quando il bit SCR viene impostato nel campo BFH[0]. Vedere la sezione 2.4.3.3 Video e Intestazioni del payload dell'immagine ancora nella specifica Usb Device Class Definition for Video Devices (Definizione della classe di dispositivo USB per i dispositivi video).

Il campo HLE nel driver UVC esistente è fisso su 2 byte (nessun PTS/SCR presente) o fino a 12 byte (PTS/SCR presente). Tuttavia, il campo HLE, essendo un campo di dimensioni byte, può potenzialmente specificare fino a 255 byte di dati di intestazione. Se sono presenti entrambi PTS/SCR e HLE supera i 12 byte, tutti i dati aggiuntivi successivi ai primi 12 byte dell'intestazione del payload vengono prelevati come metadati standard specifici del fotogramma video quando viene impostata la voce StandardFormatMetadata<PinIndex> INF.

I metadati in formato standard (generati dal firmware) per un frame vengono ottenuti concatenando i BLOB parziali trovati nei pacchetti di fotogrammi video che rappresentano tale fotogramma.

pacchetti di frame di metadati.

2.2.3.3 Buffer dei metadati fornito al componente in modalità utente

Il buffer di metadati fornito al componente in modalità utente avrebbe un elemento di metadati per i timestamp UVC (generati dal driver UVC) seguiti da elementi di metadati generati dal firmware e disposti come segue:

buffer di metadati.

2.2.3.4 Formato di metadati per gli identificatori di metadati standard

Il firmware può scegliere se produrre o meno metadati corrispondenti a un identificatore. Se il firmware sceglie di produrre metadati corrispondenti a un identificatore, i metadati dell'identificatore devono essere presenti in tutti i fotogrammi generati dal firmware.

2.2.3.4.1 MetadataId_CaptureStats

Il formato dei metadati per questo identificatore è definito dalla struttura seguente:

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;

Il campo Flags indica quale dei campi successivi nella struttura sono compilati e hanno dati validi. Il campo Flags non varia da frame a frame. Attualmente sono definiti i flag seguenti:

#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

Il campo Riservato è riservato per il futuro e deve essere impostato su 0.

Il campo ExposureTime contiene il tempo di esposizione, in 100 ns, applicato al sensore quando il fotogramma è stato acquisito. Viene visualizzato come attributo MF_CAPTURE_METADATA_EXPOSURE_TIME nell'esempio MF corrispondente.

Il campo ExposureCompensationFlags contiene il passaggio di compensazione EV (esattamente uno dei flag di passaggio KSCAMERA_EXTENDEDPROP_EVCOMP_XXX deve essere impostato) usato per trasmettere il valore di compensazione EV. Il campo ExposureCompensationValue contiene il valore di compensazione EV in unità di misura del passaggio applicato al sensore quando il fotogramma è stato acquisito. Questi vengono visualizzati come attributi MF_CAPTURE_METADATA_EXPOSURE_COMPENSATION nell'esempio MF corrispondente.

Il campo IsoSpeed contiene il valore di velocità ISO applicato al sensore quando il fotogramma è stato acquisito. Questo è senza unità. Viene visualizzato come attributo MF_CAPTURE_METADATA_ISO_SP edizione Enterprise D nell'esempio MF corrispondente.

Il campo FocusState contiene lo stato attivo corrente che può accettare uno dei valori definiti nell'enumerazione KSCAMERA_EXTENDEDPROP_FOCUSSTATE. Viene visualizzato come attributo MF_CAPTURE_METADATA_FOCUSSTATE nell'esempio MF corrispondente.

Il campo LensPosition contiene la posizione logica dell'obiettivo quando è stato acquisito il fotogramma, che è senza unità. Si tratta dello stesso valore su cui è possibile eseguire query da KSPROPERTY_CAMERACONTROL_EXTENDED_FOCUS in una chiamata GET. Viene visualizzato come attributo MF_CAPTURE_METADATA_LENS_POSITION nell'esempio MF corrispondente.

Il campo WhiteBalance contiene il bilanciamento del bianco applicato al sensore quando il fotogramma è stato acquisito, ovvero un valore in Kelvin. Viene visualizzato come attributo MF_CAPTURE_METADATA_WHITEBALANCE nell'esempio MF corrispondente.

Il campo Flash contiene un valore booleano con 1 significato flash attivato e 0 indica che flash off, quando è stato acquisito il fotogramma. Questo viene visualizzato come attributo MF_CAPTURE_METADATA_FLASH nell'esempio MF corrispondente.

Il campo FlashPower contiene la potenza flash applicata al fotogramma acquisito, che è un valore compreso nell'intervallo [0, 100]. Questo campo deve essere omesso se il driver non supporta la potenza regolabile per flash. Questo viene visualizzato come attributo MF_CAPTURE_METADATA_FLASH_POWER nell'esempio MF corrispondente.

Il campo ZoomFactor contiene il valore di zoom nel formato Q16 applicato al frame acquisito. Viene visualizzato come attributo MF_CAPTURE_METADATA_ZOOMFACTOR nell'esempio MF corrispondente.

Il campo SceneMode contiene la modalità scena applicata al fotogramma acquisito, ovvero un flag di KSCAMERA_EXTENDEDPROP_SCENEMODE_XXX a 64 bit. Questo viene visualizzato come attributo MF_CAPTURE_METADATA_SCENE_MODE nell'esempio MF corrispondente.

Il campo SensorFramerate contiene la velocità di lettura del sensore misurata inhz quando viene acquisito il fotogramma, costituito da un valore del numeratore nell'angolo superiore di 32 bit e un valore denominatore nel 32 bit inferiore. Viene visualizzato come attributo MF_CAPTURE_METADATA_edizione Standard NSORFRAMERATE nell'esempio MF corrispondente.

2.2.3.4.2 MetadataId_Fotocamera Extrinsics

Il formato dei metadati per questo identificatore implica il KSCAMERA_METADATA_ITEMHEADER standard seguito da un payload di matrice di byte. Il payload deve essere allineato a una struttura MF Fotocamera Extrinsics seguita da zero o più strutture MF Fotocamera Extrinsic_CalibratedTransform. Il payload deve essere allineato a 8 byte e tutti i byte inutilizzati devono verificarsi alla fine del payload e essere impostati su 0.

2.2.3.4.3 MetadataId_Fotocamera Intrinsics

Il formato dei metadati per questo identificatore implica il KSCAMERA_METADATA_ITEMHEADER standard seguito da un payload di matrice di byte. Il payload deve essere allineato a una struttura MFPinhole Fotocamera Intrinsics. Il payload deve essere allineato a 8 byte e tutti i byte inutilizzati devono verificarsi alla fine del payload e essere impostati su 0.

2.2.3.4.4 MetadataId_FrameIllumination

Il formato dei metadati per questo identificatore è definito dalla struttura seguente:

typedef struct tagKSCAMERA_METADATA_FRAMEILLUMINATION {
    KSCAMERA_METADATA_ITEMHEADER Header;
    ULONG Flags;
    ULONG Reserved;
} KSCAMERA_METADATA_FRAMEILLUMINATION, *PKSCAMERA_METADATA_FRAMEILLUMINATION;

Il campo Flags indica informazioni sul frame acquisito. Attualmente sono definiti i flag seguenti:

#define KSCAMERA_METADATA_FRAMEILLUMINATION_FLAG_ON 0x00000001

Se una cornice è stata catturata quando l'illuminazione era attiva, verrà impostata la bandiera KSCAMERA_METADATA_FRAMEILLUMINATION_FLAG_ON. In caso contrario, questo flag non deve essere impostato.

Il campo Riservato è riservato per uso futuro e deve essere impostato su 0.

Esempio:

Ad esempio, una struttura KSCAMERA_METADATA_FRAMEILLUMINATION che indica che l'illuminazione era attiva sarebbe la seguente:

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

Il formato dei metadati per questo identificatore è definito da un KSCAMERA_METADATA_ITEMHEADER comune seguito da una struttura 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;

Il campo StartOfFrameTimestamp e EndOfFrameTimestamp sono i timestamp contenuti nelle intestazioni UVC nei primi e ultimi payload UVC emessi dalla fotocamera per costruire questo fotogramma.

Questo payload non deve essere inviato da un dispositivo.

Questo payload dei metadati è univoco in quanto è l'unico payload di metadati generato direttamente dal driver di classe Video USB dalle informazioni ottenute dalle intestazioni del payload conformi a UVC.

Questo payload viene anteporto al buffer di metadati di ogni fotogramma.

Se il dispositivo supporta metadati standardizzati, deve includere lo spazio necessario per archiviare questo payload nei requisiti del buffer, come indicato dal controllo Metadati definito nella sezione 2.2.2.9.