Udostępnij przez


Zastępczy obraz zasłony prywatności

W tym artykule wyjaśniono, jak włączyć zamianę obrazu dla aparatu obsługującego raportowanie stanu migawki. W tym artykule opisano również sposób udostępniania niestandardowego obrazu zastępczego.

Sterowniki kamer, które wcześniej miały zasłony/przełączniki prywatności przed wdrożeniem tej funkcji, dostarczały próbki z sensora kamery lub muszą zaimplementować zastrzeżoną funkcjonalność do wykrywania stanu zasłony i zastępowania samej próbki. Ta funkcja umożliwia sterownikowi aparatu poleganie na systemie operacyjnym w celu zastąpienia obrazu w przykładzie rozwiązaniem dostarczonym przez system operacyjny lub obrazem niestandardowym dostarczonym przez sterownik aparatu.

Począwszy od systemu Windows 11, wersja 21H2, Windows Hardware Compatibility Program (WHCP) wymaga, aby kamery wyposażone w żaluzje prywatności lub przełączniki wyłączania zgłaszały stan przesłony aparatu. To wymaganie pozwala systemowi operacyjnemu i aplikacjom znać bieżący stan migawki i służy do zapewniania przydatnych wskazówek użytkownika dotyczących zmiany stanu migawki. Partnerzy OEM używają tego mechanizmu do tworzenia funkcji w swoich sterownikach, aby zastąpić obraz pochodzący z kamery czymś, co jest informacyjne dla użytkowników. Ta funkcja umożliwia producenta OEM korzystanie z tej samej funkcji bez konieczności pisania zastrzeżonego kodu w urządzeniu DeviceMFT.

Wymagania

Ta funkcja jest implementowana tylko przez kamery wyposażone w zasłony prywatności lub przełączniki wyłączające. Szczegóły implementacji zasłonek prywatności opisano w artykule Powiadomienie o zasłonkach/przełącznikach prywatności.

Urządzenia, które zamierzają obsługiwać niestandardowy obraz w celu zamiany obrazu, muszą również podać podpisany plik binarny będący częścią pakietu sterowników, który zawiera ich obraz zastępczy.

Ponieważ zamiana obrazu nadpisuje istniejący bufor wyjściowy, urządzenie wyprowadza nieskompresowane klatki. W przypadku skompresowanych ramek, takich jak MJPEG i JPEG, nie ma zamiany obrazu, a dostarczany jest oryginalny obraz ze sterownika.

Omówienie implementacji

Wymiana obrazu występuje, gdy urządzenie wysyła powiadomienie, że migawka urządzenia jest zamknięta. Jeśli stan migawki jest zamknięty, a wymiana obrazu jest włączona, potok aparatu ładuje obraz zastępczy, albo z obrazu niestandardowego dostarczonego przez sterownik aparatu lub przy użyciu obrazu zastępczego skrzynki odbiorczej pokazanej tutaj.

Obraz zastępczy skrzynki odbiorczej.

Po załadowaniu, potok przetwarza obraz na bufor wyjściowy, który odpowiada rozdzielczości i typowi mediów aktualnie wybranemu w sterowniku aparatu. Jeśli rozdzielczości różnią się, obraz jest skalowany w górę lub w dół, ale nie jest rozciągnięty poza istniejącym współczynnikiem proporcji.

Od tego momentu, aż stan przesłony migawki zostanie zmieniony na otwarty, wszystkie próbki dostarczone przez sterownik aparatu mają swoje metadane i atrybuty próbek skopiowane do nowej próbki, a ich mediabuffer jest odrzucany. Nowy bufor danych multimedialnych jest kopiowany z przetworzonego obrazu migawki i używany zamiast tego. Ten nowy przykład zostanie przesłany poprzez pipeline, tak jakby była oryginalną próbką.

Obraz z migawki bufora multimedialnego.

Przewodnik implementacji

Aby włączyć zamianę obrazu, należy dodać następujący wpis rejestru do węzła interfejsu urządzenia aparatu z wartością ustawioną na 1.

Typ klucza rejestru Nazwa klucza rejestru Wartość klucza rejestru
REG_DWORD WłączZastępowanieObrazu 0x1

W przypadku sterownika INF można to dodać, jak pokazano tutaj.

...

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

...

[Strings]
REG_DWORD=0x00010001

W przypadku deskryptora MS-OS można go dodać jako następującą nazwę:

UVC-EnableImageReplacement

Obraz niestandardowy

W przypadku zamiany obrazu niestandardowego sterownik musi podać następujące elementy:

  1. Co najmniej jeden plik obrazu w formacie BMP typu ARGB32 o rozmiarze 1000 x 1000 pikseli. W tym przykładzie jest to "TestImage.bmp".

  2. Biblioteka DLL, w której plik obrazu jest zawarty jako zasób. W tym przykładzie to SampleSocMFT.dll.

Pliki obrazu dostarczone przez sterownik muszą być obrazem ARGB32 o rozmiarze 1000 x 1000 pikseli. Spowoduje to zastąpienie obrazu pokazanego w przeglądzie implementacji. Wszystkie inne zmiany w próbce są wykonywane zgodnie z opisem, a jedynie zastępowany obraz jest dostosowany specjalnie do sterownika. Biblioteka zasobów DLL musi być częścią pakietu sterowników i musi być podpisana. W przypadku większości urządzeń oznacza to umieszczenie go w sterowniku DeviceMFT.

Aby dodać plik obrazu do biblioteki DLL zasobu, zmodyfikuj plik zasobu projektu *.rc, wykonując następujące czynności jako przykład.

#ifdef ID_REPLACEMENT_IMAGE
#define ID_REPLACEMENT_IMAGE    200
#endif

ID_REPLACEMENT_IMAGE     RCDATA    "TestImage.bmp"

Następnym krokiem jest zmodyfikowanie sterownika INF. Jeśli używana biblioteka DLL zasobu jest nowa, musi być częścią dyrektywy CopyFiles. Na koniec należy dodać trzy dodatkowe dyrektywy 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

...

Identyfikator zasobu INF i identyfikator ID_REPLACEMENT_IMAGE zasobu muszą być zgodne. Te wartości można dostosować tak, aby pojedyncza biblioteka DLL zasobów mogła zawierać wiele identyfikatorów zasobów i wiele obrazków, a plik INF można zlokalizować, aby wybrać prawidłowy identyfikator zasobu.

Niestandardowe obramowanie obrazu

W przypadku obrazów niestandardowych, które nie chcą mieć czarnego obramowania podczas formatowania letterbox, mogą określić strukturę MFARGB za pomocą rejestru, co pozwala dostosować kolor obramowania próbki zastępczej.

Typ klucza rejestru Nazwa klucza rejestru Wartość klucza rejestru
REG_BINARY Kolor tła obrazu z kamery 0x1

W przypadku sterownika INF można go dodać, jak pokazano poniżej:

...

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

[Strings]
REG_BINARY=0x00000001