Condividi tramite


Immagine di sostituzione dell'otturatore privacy

Questo articolo illustra come abilitare la sostituzione delle immagini per una fotocamera che supporta la segnalazione dello stato dell'otturatore. Descrive anche come fornire un'immagine di sostituzione personalizzata.

I driver della fotocamera con otturatori/interruttori di privacy prima di questa implementazione della funzionalità hanno fornito esempi dal sensore della fotocamera o devono implementare una funzionalità proprietaria per rilevare lo stato dell'otturatore e sostituire l'esempio stesso. Questa funzionalità consente al driver della fotocamera di basarsi sul sistema operativo per sostituire l'immagine nell'esempio con una soluzione fornita dal sistema operativo o un'immagine personalizzata fornita dal driver fotocamera.

A partire da Windows 11, versione 21H2, il Windows Hardware Compatibility Program (WHCP) richiede che le fotocamere fornite di otturatori per la privacy o interruttori di spegnimento segnalino lo stato dell'otturatore della fotocamera. Questo requisito consente al sistema operativo e alle applicazioni di conoscere lo stato corrente dell'otturatore e viene usato per fornire indicazioni utili per gli utenti su come modificare lo stato dell'otturatore. I partner OEM usano questo meccanismo per creare funzionalità nei driver per sostituire l'immagine proveniente dalla fotocamera con un elemento informativo per gli utenti. Questa funzionalità consente a un OEM di utilizzare questa stessa funzionalità senza dover scrivere codice proprietario all'interno di un DeviceMFT.

Requisiti

Questa funzionalità viene implementata solo da fotocamere dotate di otturatori privacy/interruttori di protezione della privacy. I dettagli di implementazione per gli otturatori della privacy sono descritti nell'articolo Notifica dell'otturatore/interruttore della privacy.

I dispositivi che vogliono supportare un'immagine personalizzata per la sostituzione delle immagini devono anche fornire un file binario firmato, parte del pacchetto driver che contiene l'immagine di sostituzione.

Poiché la sostituzione delle immagini sovrascrive il buffer di output esistente, il dispositivo restituisce fotogrammi non compressi. Per i fotogrammi compressi come MJPEG e JPEG, non viene eseguita alcuna sostituzione dell'immagine e l'immagine originale dal driver viene invece recapitata.

Panoramica dell'implementazione

La sostituzione dell'immagine avviene quando un dispositivo invia la notifica che l'otturatore del dispositivo è chiuso. Se lo stato dell'otturatore è chiuso e la sostituzione dell'immagine è abilitata, la pipeline della fotocamera carica l'immagine sostitutiva, da un'immagine personalizzata fornita dal driver della fotocamera o usando l'immagine di sostituzione della posta in arrivo mostrata qui.

Immagine sostitutiva della posta in arrivo.

Quando viene caricata, la pipeline converte l'immagine in un buffer di output che corrisponde alla stessa risoluzione e tipo di supporto del tipo di supporto selezionato del driver della fotocamera. Se le risoluzioni differiscono, l'immagine viene ridimensionata verso l'alto o verso il basso, ma non viene estesa al di fuori delle proporzioni esistenti.

Da quel punto, fino a quando lo stato dell'otturatore non viene modificato per essere aperto, tutti i campioni forniti dal driver della fotocamera hanno i loro metadati e attributi di esempio copiati in un nuovo campione e il mediabuffer corrispondente viene eliminato. Un nuovo mediabuffer viene copiato dall'immagine di otturatore tradotta e viene invece usato. Questo nuovo esempio verrà quindi inviato tramite la pipeline come se fosse l'esempio originale.

Immagine dell'otturatore del buffer multimediale.

Guida all'implementazione

Per abilitare la sostituzione delle immagini, è necessario aggiungere la voce del Registro di sistema seguente al nodo dell'interfaccia del dispositivo della fotocamera, con un valore impostato su 1.

Tipo Regkey Nome chiave di registro Valore chiave di registro
REG_DWORD AbilitaSostituzioneImmagine 0x1

Per un driver INF, è possibile aggiungerlo come illustrato di seguito.

...

[Device.AddReg]
HKR,,EnableImageReplacement,%REG_DWORD%,1

...

[Strings]
REG_DWORD=0x00010001

Per il descrittore MS-OS, è possibile aggiungerlo come nome seguente:

UVC-EnableImageReplacement

Immagine personalizzata

Per la sostituzione di immagini personalizzate, il driver deve fornire quanto segue:

  1. Uno o più file di immagine di formato BMP di tipo ARGB32 con dimensioni pari a 1000 x 1000 pixel. In questo esempio è "TestImage.bmp".

  2. DLL di risorsa, con il file di immagine contenuto come risorsa. In questo esempio, esso è SampleSocMFT.dll.

I file di immagine forniti dal driver devono essere un'immagine ARGB32 di 1000 x 1000 pixel. In questo modo viene sostituita l'immagine illustrata nella panoramica dell'implementazione. Tutte le altre modifiche apportate all'esempio si verificano come descritto, solo l'immagine da sostituire è personalizzata per il driver. La DLL della risorsa deve far parte del pacchetto driver e deve essere firmata. Per la maggior parte dei dispositivi, ciò significa inserirlo nel driver DeviceMFT.

Per aggiungere il file di immagine alla DLL della risorsa, modificare il file di risorse del progetto *.rc con il codice seguente come esempio.

#ifdef ID_REPLACEMENT_IMAGE
#define ID_REPLACEMENT_IMAGE    200
#endif

ID_REPLACEMENT_IMAGE     RCDATA    "TestImage.bmp"

Il passaggio successivo consiste nel modificare il driver INF. Se la DLL della risorsa usata è nuova, deve far parte della direttiva CopyFiles. Infine, è necessario aggiungere altre tre direttive AddReg.

[SourceDisksFiles]
AvsCameraSim.sys=1
SampleSocMFT.dll=1

[DestinationDir]
AvsCameraSim.CopySys=13
AvsCameraSim.CopyDMFT=13

[AvsCameraSim.CopySys]
AvsCameraSim.sys

[AvsCameraSim.CopyDMFT]
SampleSocMFT.dll

[AvsCameraSim]
Include=ks.inf, kscaptur.inf
Needs=KS.registration, KSCaptur.Registration.NT
CopyFiles=AvsCameraSim.CopySys, AvsCameraSim.CopyDMFT
AddReg=AvsCameraSim.AddReg

[AvsCameraSim.AddReg]
HKR,,CameraImageResource,,%13%\%DMFT.NAME%
HKR,,CameraImageResourceID,%REG_DWORD%,%ResourceID%
HKR,,EnableImageReplacement,%REG_DWORD%,1

[Strings]
DMFT.Name="SampleSocMFT.dll"
REG_DWORD=0x00010001

;localizable
ResourceID=200

...

L'ID risorsa INF e l'identificatore ID_REPLACEMENT_IMAGE per la risorsa devono essere corrispondenti. Questi valori possono essere modificati in modo che una singola DLL di risorse possa contenere più ID risorsa e più immagini e un INF può essere localizzato per selezionare l'ID risorsa corretto.

Bordo immagine personalizzato

Per le immagini personalizzate che non richiedono un bordo nero quando si verifica il letterboxing, è possibile specificare una struttura MFARGB tramite il Registro di sistema per personalizzare il colore del bordo del campione di sostituzione.

Tipo Regkey Nome chiave di registro Valore chiave di registro
REG_BINARIO CameraImmagineSfondoColore 0x1

Per un driver INF, può essere aggiunto come mostrato qui:

...

[Device.AddReg]
HKR,,CameraImageBackgroundColor,%REG_ BINARY%,00,00,00,FF

[Strings]
REG_BINARY=0x00000001