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.

Fotocamera driver con otturatori/interruttori di privacy prima di questa implementazione della funzionalità fornito campioni dal sensore della fotocamera o devono implementare una funzionalità proprietaria per rilevare lo stato dell'otturatore e sostituire il campione 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, windows Hardware Compatibility Program (WHCP) richiede fotocamere fornite con otturatori di privacy o interruttori per segnalare 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 dalle fotocamere con otturatori/interruttori di terminazioni della privacy. I dettagli di implementazione per gli otturatori della privacy sono descritti nell'articolo Notifica dell'otturatore /cambio 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.

Panoramica dell'implementazione

La sostituzione dell'immagine si verifica quando un dispositivo invia la notifica che l'otturatore per il dispositivo viene 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 di sostituzione posta in arrivo.

Quando caricata, la pipeline converte l'immagine in un buffer di output che corrisponde allo stesso tipo di risoluzione e mediatipo del mediatype attualmente 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 in apertura, tutti i campioni recapitati dal driver della fotocamera hanno i metadati e gli attributi di esempio copiati in un nuovo esempio e il relativo mediabuffer scartato. 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 mediabuffer.

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 regkey Valore regkey
REG_DWORD EnableImageReplacement 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 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 desiderano un bordo nero quando si verifica il letterboxing, possono specificare una struttura MFARGB tramite il Registro di sistema che personalizza il colore del bordo dell'esempio di sostituzione.

Tipo regkey Nome chiave regkey Valore regkey
REG_BINARY Fotocamera ImageBackgroundColor 0x1

Per un driver INF, può essere aggiunto come illustrato di seguito:

...

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

[Strings]
REG_BINARY=0x00000001