Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье объясняется, как включить замену изображений для камеры с поддержкой отчетов о состоянии затвора. Он также описывает, как предоставить пользовательское замещающее изображение.
Драйверы камер, которые имели затворы или переключатели конфиденциальности до внедрения этой функции, предоставляли сигналы с датчика камеры или должны внедрить собственные механизмы для определения состояния защитного затвора и замены самого сигнала. Эта функция позволяет драйверу камеры полагаться на ОС, чтобы заменить изображение в примере либо предоставленным решением ОС, либо пользовательским изображением, предоставленным драйвером камеры.
Начиная с Windows 11 версии 21H2, программа совместимости оборудования Windows (WHCP) требует от камер с крышками для конфиденциальности или переключателями отключения сообщать о состоянии крышки затвора камеры. Это требование позволяет операционной системе и приложениям знать текущее состояние затвора и использовать для предоставления полезных рекомендаций по изменению состояния затвора. Партнеры OEM используют этот механизм для создания функциональных возможностей в своих драйверах, чтобы заменить изображение, поступающее с камеры, на то, что является информативным для пользователей. Эта функция позволяет изготовителю оборудования использовать эту же функцию без необходимости писать собственный код внутри DeviceMFT.
Требования
Эта функция реализована только камерами, оснащенными жалюзи конфиденциальности или переключателями отключения. Сведения о деталях реализации затворов конфиденциальности описаны в статье Уведомление о затворе/выключателе конфиденциальности.
Устройства, которые хотят поддерживать пользовательский образ для замены, также должны предоставить подписанный исполняемый двоичный файл, являющийся частью пакета драйвера и содержащий их заменяющий образ.
Так как замена образа перезаписывает существующий выходной буфер, устройство выводит несжатые кадры. Для сжатых кадров, таких как MJPEG и JPEG, замена образа не происходит, а исходный образ от драйвера поставляется.
Обзор реализации
Замена изображения происходит, когда устройство отправляет уведомление о закрытии затвора. Если состояние затвора закрыто и включена замена изображения, конвейер камеры загружает изображение замены либо из пользовательского изображения, предоставленного драйвером камеры, либо использует изображение замены из встроенного набора, показанного здесь.
При загрузке конвейер преобразует изображение в выходной буфер, соответствующий тому же разрешению и типу мультимедиа выбранного в данный момент типа носителя драйвера камеры. Если разрешения отличаются, изображение масштабируется вверх или вниз, но не растягивается за пределы существующего пропорции.
С этого момента, до тех пор пока состояние затвора не будет изменено на открытое, все образцы, предоставляемые драйвером камеры, имеют свои метаданные и атрибуты образцов, скопированные в новый образец, и их медиабуфер отбрасывается. Новый медиабуфер копируется из преобразованного изображения затвора и используется вместо прежнего. Этот новый пример будет отправлен через конвейер, как если бы он был исходным.
Руководство по реализации
Чтобы включить замену изображения, в узел интерфейса устройства камеры необходимо добавить следующую запись реестра с значением 1.
| Тип regkey | Имя реестрового ключа | Значение Regkey |
|---|---|---|
| REG_DWORD | Включить замену изображения | 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 на 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-файл можно локализовать, чтобы выбрать правильный идентификатор ресурса.
Настраиваемая граница изображения
Для пользовательских изображений, которым не требуется черная граница при letterboxing, можно указать структуру MFARGB через реестр для настройки цвета границы заменяющего образца.
| Тип regkey | Имя реестрового ключа | Значение Regkey |
|---|---|---|
| REG_BINARY | ЦветФонаИзображенияКамеры | 0x1 |
Для драйвера INF его можно добавить следующим образом:
...
[Device.AddReg]
HKR,,CameraImageBackgroundColor,%REG_ BINARY%,00,00,00,FF
[Strings]
REG_BINARY=0x00000001