Изображение замены при закрытии конфиденциальности
В этой статье объясняется, как включить замену изображений для камеры, поддерживающей отчеты о состоянии при закрытии. Он также описывает, как предоставить пользовательский образ замены.
Камера драйверах, которые имели приватные спуски или переключатели до реализации этой функции, предоставили образцы с датчика камеры или должны реализовать собственные функции для обнаружения состояния затвора и замены самого образца. Эта функция позволяет драйверу камеры полагаться на ос, чтобы заменить изображение в примере либо предоставленным решением ОС, либо пользовательским изображением, предоставленным драйвером Камера.
Начиная с Windows 11 версии 21H2, программа совместимости оборудования Windows (WHCP) требует камер, которые приходят с закрытыми затворами или убийства переключателей, чтобы сообщить о состоянии затвора камеры. Это требование позволяет операционной системе и приложениям знать текущее состояние затвора и использовать для предоставления полезных рекомендаций по изменению состояния затвора. Партнеры OEM используют этот механизм для создания функциональных возможностей в своих драйверах, чтобы заменить изображение, поступающее с камеры, на то, что является информативным для пользователей. Эта функция позволяет изготовителю оборудования использовать эту же функцию без необходимости писать собственный код внутри DeviceMFT.
Требования
Эта функция реализована только камерами с закрытыми переключателями или переключателями конфиденциальности. Сведения о реализации при закрытии конфиденциальности описаны в статье уведомления о закрытии и переключении конфиденциальности .
Устройства, которые хотят поддерживать пользовательский образ для замены образа, также должны предоставить подписанный двоичный файл, часть пакета драйвера, содержащего их образ замены.
Обзор реализации
Замена изображения возникает, когда устройство отправляет уведомление, которое закрывается для устройства. Если состояние при закрытии, а замена изображения включена, конвейер камеры загружает изображение замены из пользовательского изображения, предоставленного драйвером камеры, или с помощью изображения замены папки "Входящие", показанного здесь.
При загрузке конвейер преобразует изображение в выходной буфер, соответствующий тому же разрешению и типу мультимедиа выбранного в данный момент типа носителя драйвера камеры. Если разрешения отличаются, изображение масштабируется вверх или вниз, но не растягивается за пределы существующего пропорции.
С этого момента, пока состояние затвора не будет открыто, все образцы, предоставляемые драйвером камеры, имеют свои метаданные и примеры атрибутов, скопированные в новый образец, и их носитель не карта. Новый mediabuffer копируется из преобразованного образа затвора и используется вместо этого. Этот новый пример будет отправлен через конвейер, как если бы он был исходным.
Руководство по реализации
Чтобы включить замену изображения, в узел интерфейса устройства камеры необходимо добавить следующую запись реестра с значением 1.
Тип regkey | Имя regkey | Значение regkey |
---|---|---|
REG_DWORD | EnableImageReplacement | 0x1 |
Для INF-файла драйвера это можно добавить, как показано здесь.
...
[Device.AddReg]
HKR,,EnableImageReplacement,%REG_DWORD%,1
...
[Strings]
REG_DWORD=0x00010001
Для дескриптора MS-OS это можно добавить в качестве следующего имени:
UVC-EnableImageReplacement
Пользовательский образ
Для замены пользовательского образа драйвер должен указать следующее:
Один или несколько файлов изображений типа BMP типа ARGB32 с размером 1000 x 1000 пикселей. В этом примере это "TestImage.bmp".
Библиотека DLL ресурсов с файлом образа, содержащимся в качестве ресурса. В этом примере SampleSocMFT.dll.
Драйвер, предоставленный файлами изображений, должен быть изображением ARGB32 в 1000 x 1000 пикселей. Это заменяет изображение, показанное в обзоре реализации. Все остальные изменения в примере происходят, как описано, только заменяемый образ настраивается драйвером. Библиотека DLL ресурсов должна быть частью пакета драйвера и должна быть подписана. Для большинства устройств это означает размещение его в Driver DeviceMFT.
Чтобы добавить файл изображения в библиотеку DLL ресурсов, измените файл ресурса проекта *.rc следующим образом.
#ifdef ID_REPLACEMENT_IMAGE
#define ID_REPLACEMENT_IMAGE 200
#endif
ID_REPLACEMENT_IMAGE RCDATA "TestImage.bmp"
Следующим шагом является изменение INF-файла драйвера. Если используется библиотека DLL ресурсов, она должна быть частью директивы CopyFiles. Наконец, необходимо добавить три дополнительных директивы 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
...
Идентификатор INF ResourceID и идентификатор ID_REPLACEMENT_IMAGE для ресурса должен быть сопоставлен. Эти значения можно настроить таким образом, чтобы одна библиотека DLL ресурсов содержала несколько идентификаторов ресурсов и несколько образов, а INF-файл можно локализовать, чтобы выбрать правильный идентификатор ресурса.
Настраиваемая граница изображения
Для пользовательских изображений, которые не хотят черной границы при возникновении букв, они могут указать структуру MFARGB через реестр, который настраивает цвет границы образца замены.
Тип regkey | Имя regkey | Значение regkey |
---|---|---|
REG_BINARY | Камера ImageBackgroundColor | 0x1 |
Для INF драйвера его можно добавить, как показано здесь:
...
[Device.AddReg]
HKR,,CameraImageBackgroundColor,%REG_ BINARY%,00,00,00,FF
[Strings]
REG_BINARY=0x00000001