Поделиться через


Предоставление INF-файла UVC

Важно!

Содержимое и пример кода в этом разделе устарели и в настоящее время не поддерживаются. Она может не работать с текущей цепочкой инструментов разработки драйверов.

В этом разделе показаны различные части INF-файла для конкретного устройства.

Inf-файл, подобный этому, можно использовать для предоставления имени конкретного устройства или для регистрации подключаемого модуля модуля расширения.

Как правило, поставщики, которые предоставляют пакет установки, могут зарегистрировать подключаемый модуль DLL с помощью пакета установки. В этом случае поставщик не предоставляет INF-файл. Для подписывания драйвера может быть проще предоставить пакет установки вместо INF-файла для конкретного устройства.

Однако следует помнить, что этот конкретный пример необходимо установить с помощью INF-файла.

Для этого добавьте следующий код в INF-файл с произвольным именем Xuplgin.inf:

; Copyright (c) CompanyName. All rights reserved.

[Version]
...
Class=Camera
ClassGuid={ca3e7ab9-b4c3-4ae6-8251-579ef933890f}
...

[SourceDisksNames]
1=%Package%

[SourceDisksFiles]
MyPlugin.ax=1

[ControlFlags]
ExcludeFromSelect=*

[DestinationDirs]
MyDevice.CopyList=11    ; %systemroot%\system32 on NT-based systems

[Manufacturer]
%CompanyName%=CompanyName,NT$ARCH$

INF-файл для конкретного устройства сопоставляется с устройством на основе идентификатора VID/PID. В этом случае INF-файл для конкретного устройства имеет приоритет над usbvideo.inf.

[CompanyName.NT$ARCH$]
%MyDevice.DeviceDesc%=MyDevice,USB\Vid_XXXX&Pid_XXXX&MI_XX

[MyDevice]
Include=usbvideo.inf, ks.inf, kscaptur.inf
Needs=USBVideo.NT, KS.Registration, KSCAPTUR.Registration.NT
AddReg=MyDevice.Plugins
CopyFiles=MyDevice.CopyList

Для полноты необходимо включить дополнительные разделы файла Usbvideo.inf .

[MyDevice.SERVICES]
Include=usbvideo.inf
Needs=USBVideo.NT.SERVICES

[MyDevice.HW]
Include=usbvideo.inf
Needs=USBVideo.NT.HW

[MyDevice.WDF]
Include=usbvideo.inf
Needs=USBVideo.NT.WDF

[WdmCompanionFilter_CompanionSect]
CompanionServices = SecureUSBVideo

[WdmCompanionFilter_KmdfSvcSect]
KmdfLibraryVersion = %KMDF_VERSION%

[SecureUSBVideo_UmdfSvcSect]
UmdfLibraryVersion = %UMDF_VERSION%
ServiceBinary = %12%\UMDF\SecureUSBVideo.dll
ServiceType = SecureCompanion ; allowed options are: Driver (default), SecureCompanion, NonSecureCompanion
TrustletIdentity = 4096          ; required if it is SecureCompanion

Inf также требуется раздел CopyFiles, чтобы скопировать подключаемый модуль в системную папку.

[MyDevice.CopyList]
MyPlugin.ax

В первой части следующего раздела INF AddReg регистрируется подключаемый модуль. В оставшейся части этого раздела показаны записи реестра для подключаемого модуля расширения на основе узла. Аналогичные примеры см. в статье Usbvideo.inf .

[MyDevice.PlugIns]
HKCR,CLSID\%Plugin.CLSID%,,,%PlugIn_IExtensionUnit%
HKCR,CLSID\%Plugin.CLSID%\InprocServer32,,,MyPlugin.ax
HKCR,CLSID\%Plugin.CLSID%\InprocServer32,ThreadingModel,,Both

; The IID is aggregated onto the node given the GUID of the property set
HKLM,System\CurrentControlSet\Control\NodeInterfaces\%XU_GUID%,,,
   %PlugIn_IExtensionUnit%
; IID in Little-Endian form
HKLM,System\CurrentControlSet\Control\NodeInterfaces\%XU_GUID%,IID,
   1,yy,yy,yy,yy,yy,yy,yy,yy,yy,yy,yy,yy,yy,yy,yy,yy
;CLSID in Little-Endian form
HKLM,System\CurrentControlSet\Control\NodeInterfaces\%XU_GUID%,
   CLSID,1,zz,zz,zz,zz,zz,zz,zz,zz,zz,zz,zz,zz,zz,zz,zz,zz

В следующем разделе INF показано, как заполнить записи реестра, относящиеся к интерфейсу.

[MyDevice.Interfaces]
AddInterface=%KSCATEGORY_CAPTURE%,<Custom GUID/Global>,MyDevice.Interface
AddInterface=%KSCATEGORY_VIDEO_CAMERA%,<Custom GUID/Global>,MyDevice.Interface
AddInterface=%KSCATEGORY_VIDEO%,<Custom GUID/Global>,MyDevice.Interface

[MyDevice.Interface]
AddReg=MyDevice.Interface.AddReg

[MyDevice.Interface.AddReg]
HKR,,CLSID,,%ProxyVCap.CLSID%
HKR,,FriendlyName,,%MyDevice.DeviceDesc%
HKR,,RTCFlags,0x00010001,0x00000010

Для USB-камер, если расположение раздела реестра интерфейса устройства содержит запись реестра DWORD EnableDependentStillPinCapture с ненулевым значением, для фотозахвата будет использоваться зависимый контакт на таких камерах. Если запись реестра отсутствует или имеет нулевое значение, зависимый пин-код не будет использоваться. Вместо этого фотосъемка будет выполнена с помощью кадра, взятого из контакта предварительного просмотра. Следующее позволяет включить захват зависимого по-прежнему закрепления:

HKR,,EnableDependentStillPinCapture,0x00010001,1

Можно также определить необязательное значение реестра с именем UvcFlags. UvcFlags должно быть значением DWORD. Когда устройство подключено, драйвер UVC получает запрос на запуск Plug and Play (PnP). Затем драйвер ищет UvcFlags в разделе реестра устройств. Значение DWORD является битовой маской и может содержать значения из следующей таблицы.

Имя битовой маски Значение Описание
WORKAROUNDS_DV_INTERLEAVED_DEFAULT_MASK 0x00000001 UVC поддерживает диапазоны данных только для видео и диапазоны данных dv с чередованием. Задайте эту битовую маску для dv с чередованием.
WORKAROUNDS_SUPPRESS_CLOCK_MASK 0x00000002 В настоящее время не используется.
WORKAROUNDS_MPEG2TS_SUPPORT_FID 0x00000004 Маска FID указывает, что заголовок потока содержит бит FID.
WORKAROUNDS_MPEG2TS_SUPPORT_EOF 0x00000008 Маска EOF указывает, что заголовки полезных данных содержат бит конца кадра.
WORKAROUNDS_VARIABLE_FRAME_RATE_MASK 0x00000010 Установите эту маску, если на устройстве может отличаться частота кадров. Устройства DV с фиксированной скоростью не должны устанавливать эту маску.

Добавьте строку, аналогичную приведенному в следующем примере, чтобы указать применяемую битовую маску:

HKR,,UvcFlags,0x00010001,0x00000010

Если вы используете драйвер UVC в Windows Server 2003 и Windows Vista или более поздних версиях операционной системы, маски FID и EOF можно использовать с форматами на основе потоков, такими как MPEG-2 TS.

В условиях низкой частоты кадров бит EOF может сообщать о завершении быстрее, чем бит FID следующего кадра. Бит EOF можно использовать для уменьшения задержки при доставке кадров MPEG-2.

Дополнительные сведения о позициональном синтаксисе директив AddReg см. в разделе Inf AddReg Directive.

В последнем разделе содержатся отсутствующие определения для INF.

[Strings]
; Non-localizable
Plugin.CLSID="{zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzzz}"
ProxyVCap.CLSID="{17CCA71B-ECD7-11D0-B908-00A0C9223196}"
XU_GUID="{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}"
KSCATEGORY_VIDEO_CAMERA="{E5323777-F976-4f5b-9B55-B94699C46E44}"
KSCATEGORY_CAPTURE="{65E8773D-8F56-11D0-A3B9-00A0C9223196}"
KSCATEGORY_VIDEO="{6994AD05-93EF-11D0-A3CC-00A0C9223196}"

; Localizable
CompanyName="CompanyName"
Package="Installation Package"
MyDevice.DeviceDesc="CompanyName Camera"

PlugIn_IMyExtensionUnit="CompanyName Extension Unit Interface"