Questo documento illustra le API USB Video Class Extension Unit (XU) supportate impiegate dai sistemi di conferenze Google Meet per attivare le funzionalità delle videocamere intelligenti. Lo scopo della creazione di questa specifica è influenzare le pratiche per attivare queste funzionalità e consentire una migliore scalabilità e test asincroni per i nostri partner.
Per informazioni dettagliate sulle ultime modifiche a questo documento, consulta le note di rilascio.
Struttura di test
Per aiutare i partner a convalidare la conformità a questa specifica, forniamo un laboratorio di test nei dispositivi Chromebox per videoconferenze impostati in modalità sviluppatore.
Attiva la scrittura nel file system.
Aggiungi le seguenti righe a
/etc/chrome_dev.conf
:
--enable-logging
--log-level=0
Riavvia il dispositivo, collega la videocamera e una tastiera USB, premi Ctrl-Alt-X
e la conformità alle specifiche della videocamera attiva verrà verificata e registrata in /home/chronos/user/log/chrome
.
Convenzione little-endian
USB è uno standard little-endian. In questo documento:
- I numeri multibyte vengono visualizzati in big endian (e trasmessi in little endian).
- Gli array di byte sono nel layout di memoria little-endian.
Ad esempio, 0x12345678
è uguale a [0x78, 0x56, 0x34, 0x12]
.
GUID dell'unità di estensione
Le unità di estensione che supportano questa specifica di controllo di Meet XU devono utilizzare questo GUID.
Unità di estensione | GUID |
---|---|
XU di controllo periferico | {74D7E924-49C9-4A45-98A3-8A9F60061E83} |
Selettori XU per il controllo delle periferiche
Questi sono i selettori XU di controllo periferico definiti.
Selettori di controllo | Valore |
---|---|
GOOGXU_FRAME_STRATEGY |
0x01 |
GOOGXU_REFRAME |
0x02 |
GOOGXU_OCCUPANCY_COUNTING_TOGGLE |
0x03 |
GOOGXU_OCCUPANCY_COUNTING_READ |
0x04 |
GOOGXU_STATUS_INFO |
0x05 |
GOOGXU_STATUS_RESET |
0x06 |
GOOGXU_PRESETS |
0x07 |
GOOGXU_PAN_TILT_ABSOLUTE |
0x08 |
GOOGXU_PAN_TILT_RELATIVE |
0x09 |
GOOGXU_SATELLITE_INFO |
0x0A |
Tipo di richiesta di controllo
I tipi di richieste di controllo sono definiti nel Capitolo 4: Richieste specifiche per la classe della specifica della classe UVC 1.5.
Operazione | Controllo UVC |
---|---|
GET |
GET_CUR , GET_MIN , GET_MAX , GET_RES , GET_LEN , GET_INFO , GET_DEF |
SET |
SET_CUR |
Modalità della fotocamera
Le modalità fotocamera vengono utilizzate per inquadrare le persone in una sala riunioni e sono una tuple
di:
- Strategia (vista della videocamera)
- Bias (altoparlante o stanza)
- Feed (uno o più stream)
Ogni dimensione può assumere i valori descritti nelle sezioni seguenti.
Strategia di inquadratura automatica
In tutte le modalità di inquadratura automatica, ad eccezione di "Nessuno", la panoramica, la panoramica verticale e lo zoom manuali sono disabilitati.
Funzionalità | Descrizione |
---|---|
Nessuno | La videocamera disattiva tutte le funzionalità di inquadratura intelligente e consente al cliente di controllare liberamente i valori PTZ. Nota: se viene impostata questa strategia di inquadratura, la videocamera rimane nella posizione attuale di panoramica, inclinazione e zoom. |
Inquadratura continua (CAZ) | In base al bias di inquadratura, la videocamera monitora continuamente le persone nella stanza. |
Frame divisi | La videocamera crea tutte le visualizzazioni del video necessarie. In base all'opzione Feed con inquadratura automatica, li compone in riquadri in un unico stream o crea stream video separati per ogni visualizzazione. |
Visualizzazione dinamica | Una o più fotocamere tentano di fornire la migliore visuale della stanza. Può decidere se combinare o meno più feed in uno o fornire una vista "interessante" della stanza corrente. Lo scopo di questa visualizzazione è fornire la visualizzazione più equa dei partecipanti in sala alla chiamata. |
Preferito dal fornitore | Il sistema di videocamere utilizza la propria logica per determinare la visuale migliore della stanza. La strategia di inquadratura sottostante è soggetta a modifiche senza preavviso. Ad esempio, se il numero di persone nella stanza cambia o la videocamera riesce a rilevare la differenza tra una riunione "Presentatore con responsabilità elevate" e una riunione "Collaborazione", il sistema è libero di adattare o modificare la strategia di inquadratura in base alle proprie esigenze in questa modalità. In questa modalità, la chiamata a getCur dovrebbe restituire VENDOR_PREFERRED e non la modalità di inquadratura sottostante selezionata dal sistema. |
Bias di inquadratura automatica
Funzionalità | Descrizione |
---|---|
Presentatore con responsabilità elevate (monitoraggio dello speaker) | La videocamera tenta di inquadrare al meglio la persona che parla attivamente nella stanza. In questo caso, la videocamera deve essere inclinata verso il presentatore. Ad esempio, il CEO che fa una presentazione in una sala riunioni. |
Collaborazione (monitoraggio della stanza) |
La videocamera tenta di inquadrare al meglio tutti i partecipanti nella stanza. In questo caso, la videocamera deve trattare tutti i partecipanti in modo equo. |
Feed con inquadratura automatica
Funzionalità | Descrizione |
---|---|
Singolo stream | La videocamera invia un singolo stream video al dispositivo host. |
Multistream (in fase di sviluppo) |
La videocamera suddivide lo stream e crea più stream video da inviare all'host. Nota: le specifiche complete e il comportamento previsto di questa funzionalità sono in attesa di revisione e non sono supportati fino alle revisioni successive di questo documento. |
Valori bitmap della modalità di inquadratura automatica
Ad eccezione dello stato predefinito None
, rappresentato da un array di byte vuoto, ogni bit nell'array di byte rappresenta una modalità della fotocamera diversa, ovvero una combinazione specifica della strategia di inquadratura automatica, del bias di inquadratura automatica e dei feed di inquadratura automatica.
Feed con inquadratura automatica | CAZ | Frame diviso | Dinamico | Preferito dal fornitore | Bias di inquadratura automatica |
---|---|---|---|---|---|
Singolo stream | D1 D2 |
- D3 |
D5 D7 |
D9 (altoparlante o stanza) | Speaker Stanza |
Multistream | - - |
- D4 |
D6 D8 |
- | Speaker Stanza |
Modalità frame | Valore della modalità frame (byte meno significativo) |
---|---|
None |
0x0000 |
CAZ, Speaker, Single-Stream |
0x0001 |
CAZ, Room, Single-Stream |
0x0002 |
Split-Frame, Room, Single-Stream |
0x0004 |
Split-Frame, Room, Multi-Stream |
0x0008 |
Dynamic, Speaker, Single-Stream |
0x0010 |
Dynamic, Speaker, Multi-Stream |
0x0020 |
Dynamic, Room, Single-Stream |
0x0040 |
Dynamic, Room, Multi-Stream |
0x0080 |
Vendor-preferred, Single-Stream |
0x0100 |
Controllo: GOOGXU_FRAME_STRATEGY
Questo controllo viene utilizzato per ottenere o impostare le modalità di inquadratura della fotocamera elencate in
Valori bitmap della modalità di inquadratura automatica. Ogni modalità è rappresentata come un bit nella rispettiva bitmap. Il comando GET_RES
restituisce una maschera di bit di 8 byte con un valore pari a zero (0) o uno (1) per indicare rispettivamente se la funzionalità è supportata o meno dal dispositivo. Ad esempio, se una videocamera supporta CAZ, Speaker, Single-Stream
, Split-Frame, Room, Single-Stream
e Dynamic, Room, Multi-Stream
, ma non altre modalità, GET_RES
deve restituire 0x000000000000000085 (ovvero 0b10000101
seguito da sette byte zero).
Il comando SET_CUR
viene utilizzato per inviare bitmap per indicare alla videocamera quale modalità di fotocamera SINGOLA attivare.
Selettore di controllo | 1 | |||
---|---|---|---|---|
Operazione | GET / SET |
|||
wLength |
8 | |||
Offset | Campo | Dimensioni | Valore | Descrizione |
0 | bActiveMode |
8 | Bitmap | Impostare o tornare alla modalità Videocamera attiva |
Note:
|
Il comportamento dei tipi di richiesta supportati è il seguente:
Offset | 0 | Descrizione |
---|---|---|
GET_CUR |
Ottenere la modalità fotocamera con inquadratura attiva | |
GET_MIN |
Dipende dalla videocamera | |
GET_MAX |
Dipende dalla videocamera | |
GET_RES |
Restituisce una maschera di bit di 8 byte delle modalità della fotocamera supportate | |
GET_LEN |
0x0008 | Lunghezza |
GET_INFO |
0x0B | Aggiornamento automatico / Scrittura / Lettura |
GET_DEF |
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 |
Valore predefinito |
SET_CUR |
Impostare la modalità di fotocamera con inquadratura attiva |
Controllo: GOOGXU_REFRAME
Questo controllo viene utilizzato per attivare il framing one-shot, noto anche come OTAZ. Quando viene attivato OTAZ, la visualizzazione della videocamera passa alla visualizzazione migliore della stanza. Successivamente, il cliente recupera la possibilità di controllare i valori PTZ. Se l'inquadratura singola non è supportata, la fotocamera non deve definire questo controllo.
Selettore di controllo | 2 | |||
---|---|---|---|---|
Operazione | SET |
|||
wLength |
1 | |||
Offset | Campo | Dimensioni | Valore | Descrizione |
0 | bReframe |
1 | Numero | 0x01 Esegui richiesta di ritaglio |
Il comportamento dei tipi di richiesta supportati è il seguente:
Offset | 0 | Descrizione |
---|---|---|
GET_MIN |
0x00 | |
GET_MAX |
0x01 | |
GET_RES |
0x01 | |
GET_LEN |
0x0001 | |
GET_INFO |
0x02 | Solo scrittura |
GET_DEF |
0x00 | |
SET_CUR |
Imposta la richiesta per l'inquadratura One-Shot |
Conteggio delle presenze
Il conteggio del numero di persone è una funzionalità utilizzata per stimare il numero di partecipanti in una sala riunioni, nonostante la visuale ritagliata della videocamera.
Questa tabella mostra il comportamento previsto dei controlli OC e le relative interazioni con lo stream video della videocamera e l'indicatore LED della videocamera.
Quando il conteggio del numero di partecipanti è | e lo stream video della videocamera è: | L'indicatore LED della videocamera deve essere | GOOGXU_OCCUPANCY_COUNTING_TOGGLE GET_CUR deve essere |
GOOGXU_OCCUPANCY_COUNTING_READ GET_CUR deve essere |
---|---|---|---|---|
Attivato | Non in streaming e non con l'audio disattivato | On | 0x01 |
Il numero di persone nel campo visivo completo della videocamera. |
Attivato | Streaming | On | 0x01 |
Il numero di persone nel campo visivo completo della videocamera. |
Attivato | Audio disattivato | Off | 0x01 |
Disattivate |
Disattivate | Non in streaming e non con l'audio disattivato | Off | 0x00 |
Disattivate |
Disattivate | Streaming | On | 0x00 |
Disattivate |
Disattivate | Audio disattivato | Off | 0x00 |
Disattivate |
Controllo: GOOGXU_OCCUPANCY_COUNTING_TOGGLE
Questo controllo viene utilizzato per attivare o disattivare la funzionalità di conteggio delle persone in una stanza. Se imposti un valore pari a zero (0), questa funzionalità viene disattivata, mentre se imposti un valore pari a uno (1), la funzionalità viene attivata. Se questa funzionalità non è supportata, la videocamera non deve definire questo controllo.
Selettore di controllo | 3 | |||
---|---|---|---|---|
Operazione | GET / SET |
|||
wLength |
1 | |||
Offset | Campo | Dimensioni | Valore | Descrizione |
0 | bOccupancy |
1 | Booleano | Imposta la funzione di conteggio del numero di partecipanti 0x00 Disattiva la funzione 0x01 Attiva la funzione |
Il comportamento dei tipi di richiesta supportati è il seguente:
Offset | 0 | Descrizione |
---|---|---|
GET_CUR |
Restituisce un valore se il conteggio del numero di partecipanti è attivo | |
GET_MIN |
0x00 | |
GET_MAX |
0x01 | |
GET_RES |
0x01 | |
GET_LEN |
0x0001 | |
GET_INFO |
0x0B | Aggiornamento automatico / Scrittura / Lettura |
GET_DEF |
0x00 | |
SET_CUR |
Attivare o disattivare la funzionalità di conteggio del numero di partecipanti |
Controllo: GOOGXU_OCCUPANCY_COUNTING_READ
Questo controllo viene utilizzato per leggere il numero di partecipanti in una stanza registrato dalla videocamera quando il conteggio delle persone è attivo. Quando il conteggio delle persone è disattivato, la videocamera dovrebbe disattivare questo controllo. Se il conteggio delle persone non è supportato, la videocamera non deve definire questo controllo.
Selettore di controllo | 4 | |||
---|---|---|---|---|
Operazione | GET |
|||
wLength |
2 | |||
Offset | Campo | Dimensioni | Valore | Descrizione |
0 | bNumPeople |
2 | Numero | Il numero di persone rilevate nell'inquadratura. (Sola lettura) |
Il comportamento dei tipi di richiesta supportati è il seguente:
Offset | 0 | Descrizione |
---|---|---|
GET_CUR |
Restituisce il numero di occupanti rilevati | |
GET_MIN |
0x0000 | |
GET_MAX |
0x00FF | |
GET_RES |
0x0001 | |
GET_LEN |
0x0002 | |
GET_INFO |
0x09 | Aggiornamento automatico / Lettura |
GET_DEF |
0x0000 |
Telemetria e diagnostica del dispositivo
Questi controlli hanno lo scopo di incoraggiare pratiche di debug migliori con hardware Meet e di solito non sono rivolti agli utenti.
Controllo: GOOGXU_STATUS_INFO
Questo controllo viene utilizzato per eseguire query sulle informazioni della videocamera host da condividere con i partner per il debug.
Selettore di controllo | 5 | |||
---|---|---|---|---|
Operazione | GET |
|||
wLength |
8 | |||
Offset | Campo | Dimensioni | Valore | Descrizione |
0 | bNumCameras |
1 | Numero | Il numero di altri satelliti collegati alla videocamera principale che potrebbero influire sullo stream della videocamera restituito all'host. |
1 | bIsMoving |
1 | Bitmap | 0 quando la videocamera è inattiva e diverso da zero quando i valori PTZ cambiano. I fornitori sono liberi di mappare assi o motori diversi a bit diversi. |
2 | Undef |
6 | Undef | Da estendere in futuro. |
Il comportamento dei tipi di richiesta supportati è il seguente:
Offset | 0 | 1 | 2 | Descrizione |
---|---|---|---|---|
GET_MIN |
0x00 | 0x00 | 0x00 0x00 0x00 0x00 0x00 0x00 |
|
GET_MAX |
0xFF | 0xFF | 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF |
|
GET_RES |
0x01 | 0x01 | 0x01 0x00 0x00 0x00 0x00 0x00 |
|
GET_LEN |
0x08 | 0x00 | 0x0008 | |
GET_INFO |
0x09 | Aggiornamento automatico / Lettura | ||
GET_DEF |
0x00 | 0x00 | 0x00 0x00 0x00 0x00 0x00 0x00 |
Controllo: GOOGXU_SATELLITE_INFO
Questo controllo viene utilizzato per eseguire query sui dispositivi satellitari collegati a questo sistema di videocamere.
Selettore di controllo | 0x0A | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
Operazione | GET |
|||||||||||
wLength |
20 | |||||||||||
Offset | Campo | Dimensioni | Valore | Descrizione | ||||||||
0 | bSatelliteList |
20 | Bitmap | L'elenco dei tipi di satelliti collegati al sistema. Sono inclusi quattro slot separati di 5 byte. Ogni slot è descritto come segue:
|
Il comportamento dei tipi di richiesta supportati è il seguente:
Offset | 0 | Descrizione |
---|---|---|
GET_MIN |
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 |
|
GET_MAX |
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF |
|
GET_RES |
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 |
|
GET_LEN |
0x14 | 20 byte |
GET_INFO |
0x09 | Aggiornamento automatico / Lettura |
GET_DEF |
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 |
Controllo: GOOGXU_STATUS_RESET
Questo controllo viene utilizzato per inviare una richiesta di reimpostazione alla videocamera. L'impostazione di un valore di uno (1) richiede il ripristino dei dati di fabbrica della videocamera. La videocamera restituisce zero (0) se non è stata richiesta alcuna riavvio della videocamera dall'ultimo reset e uno (1) se è in corso il riavvio. Il ripristino dei dati di fabbrica deve attivare il riavvio della videocamera. Questo è necessario per i dispositivi autoalimentati in cui non è utile forzare una disconnessione USB per emulare un hotplug.
Selettore di controllo | 6 | |||
---|---|---|---|---|
Operazione | GET / SET |
|||
wLength |
1 | |||
Offset | Campo | Dimensioni | Valore | Descrizione |
0 | bResetRequest |
1 | Booleano | Invia una richiesta di reimpostazione all'host e alle videocamere collegate. Restituisce 0x01 se la richiesta di reimpostazione è stata inviata dall'ultimo ripristino, altrimenti 0x00. |
Il comportamento dei tipi di richiesta supportati è il seguente:
Offset | 0 | Descrizione |
---|---|---|
GET_MIN |
0x00 | |
GET_MAX |
0x01 | |
GET_RES |
0x01 | |
GET_LEN |
0x0001 | |
GET_INFO |
0x03 | Scrittura / Lettura |
GET_DEF |
0x00 |
Preset PTZ
Consente di configurare e ripristinare il campo visivo della videocamera in una posizione preimpostata.
Controllo: GOOGXU_PRESETS
Questo controllo viene utilizzato per impostare i valori di panoramica, inclinazione e zoom (PTZ) della videocamera su una configurazione preimpostata.
Preset Action
viene utilizzato per indicare l'azione prevista del comando. L'impostazione di un valore pari a 1 viene utilizzata per mappare i valori attuali di panoramica, inclinazione e zoom a un indice preimpostato fornito. L'impostazione di un valore pari a due (2) dovrebbe consentire la transizione della panoramica, dell'inclinazione e dello zoom della videocamera ai valori mappati in precedenza per l'indice fornito o alle coordinate di fabbrica predefinite (se non mappati in precedenza). L'impostazione di un valore di tre (3) reimposta l'indice sulle coordinate predefinite di fabbrica.
Preset Index
viene utilizzato per specificare le coordinate PTZ mappate all'indice.
Il valore Preset index
pari a zero (0) è mappato alle coordinate della casa e deve essere la posizione predefinita della videocamera al risveglio quando GOOGXU_FRAME_STRATEGY
è impostato su NONE
.
Selettore di controllo | 7 | |||
---|---|---|---|---|
Operazione | SET |
|||
wLength |
2 | |||
Offset | Campo | Dimensioni | Valore | Descrizione |
0 | bPresetAction |
1 | Numero | 0x01: salva preimpostazione 0x02: ripristina preimpostazione 0x03: ripristina preimpostazione predefinita. (Il valore predefinito deve essere una coordinata preimpostata valida). |
1 | bPresetIndex |
1 | Numero | L'indice di preset attivo. 0~N-1 dove 0 è considerata la posizione iniziale predefinita della videocamera e N-1 è una costante definita dal fornitore per il numero di preset. |
Il comportamento dei tipi di richiesta supportati è il seguente:
Offset | 0 | 1 | Descrizione |
---|---|---|---|
GET_MIN |
0x00 | 0x00 | |
GET_MAX |
0x03 | N-1 | N preset massimi supportati |
GET_RES |
0x01 | 0x01 | |
GET_LEN |
0x02 | 0x00 | 0x0002 |
GET_INFO |
0x02 | Solo scrittura | |
GET_DEF |
0x00 | 0x00 |
Mappatura ausiliaria con panoramica e inclinazione
Alcune videocamere hanno componenti speciali, come i motori per le videocamere meccaniche o le funzionalità PTZ digitali. Per questi, utilizza i controlli V4L2 standard per panoramica, inclinazione e zoom.
Controllo: GOOGXU_PAN_TILT_ABSOLUTE
(deprecato)
I controlli di mappatura ausiliari di panoramica e inclinazione sono definiti nel Capitolo 4: Richieste specifiche per le classi, Sezione 4.2.2.1.14 Controllo panoramica/inclinazione (assoluto) della Classificazione UVC 1.5.
Controllo: GOOGXU_PAN_TILT_RELATIVE
(deprecato)
I controlli di mappatura ausiliari di panoramica e inclinazione sono definiti nel Capitolo 4: Richieste specifiche per le classi, Sezione 4.2.2.1.15 Controllo panoramica/inclinazione (relativo) della specifica della classe UVC 1.5.
Argomenti correlati
- Driver Linux USB Video Class (UVC)
- Set di documenti Video Class v1.5
- Specifiche USB 2.0
- Centro assistenza per l'hardware Google Meet
- Sezione Hardware di Google Meet del Centro assistenza per gli amministratori di Google Workspace
Note di rilascio
Queste note di rilascio riflettono i miglioramenti e le nuove funzionalità in ogni revisione di questo documento.
27 gennaio 2025
- È stata aggiunta la strategia di inquadratura
Vendor-preferred
aGOOGXU_FRAME_STRATEGY
. - È stato aggiunto un nuovo controllo:
GOOGXU_SATELLITE_INFO
.
21 maggio 2024
- È stato rimosso lo script di test a favore della nuova struttura di test CfM, che esegue
SET
e supporta anche la convalida delle videocamere Series One. - Campi chiariti in
GOOGXU_STATUS_INFO
. - È stato chiarito il comportamento di
GOOGXU_STATUS_RESET
. - È stata ritirata
GOOGXU_PAN_TILT_ABSOLUTE
eGOOGXU_PAN_TILT_RELATIVE
.
15 novembre 2023
Script di test aggiornato per controllare e interpretare le modalità di inquadratura valide. Rappresentazioni dei byte chiarite.
21 luglio 2023
È stato aggiunto uno script di test per consentire ai partner di convalidare le implementazioni per verificarne la conformità a questa specifica.
25 maggio 2023
Nota corretta
GOOGXU_PRESETS
in merito al numero di preset. Deve essere N, non N-1.
17 aprile 2023
Lancio iniziale.