Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Windows 10'dan itibaren, USB Video Sınıfı belirtimiyle (sürüm 1.0 ila 1.5 arası) uyumlu cihazlar için yerleşik bir USB Video Sınıfı (UVC) sürücüsü sağlanır. Bu sürücü renk ve sensör tipi kameraları destekler. Bu belgede, UVC uyumlu bir kameranın belirli özelliklerinin dahili sürücü aracılığıyla uygulamalara nasıl kullanıma sunulacağı özetlenmektedir.
Terminoloji
| Anahtar sözcük | Açıklama |
|---|---|
| UVC | USB Video Sınıfı |
| UVC sürücüsü | İşletim sistemiyle birlikte gelen USBVideo.sys sürücü |
| Kızılötesi | Kızılötesi |
| Renkli kamera | Renk akışları veren kamera (örneğin RGB veya YUV kameralar) |
| Algılayıcı kamera | Renkli olmayan akışlar (örneğin, IR veya Derinlik kameraları) sağlayan kamera |
| BOS | İkili Cihaz Nesne Deposu |
| MS OS 2.0 Tanımlayıcısı | Microsoft platformuna özgü BOS cihaz özelliği tanımlayıcısı |
Algılayıcı kameralar
Windows iki kamera kategorisini destekler. Biri renkli kamera, diğeri ise renk algılayıcısı olmayan bir kamera. RGB veya YUV kameralar renkli kameralar olarak sınıflandırılır ve gri ölçek, IR ve Derinlik kameraları gibi renkli olmayan kameralar sensör kameraları olarak kategorilere ayrılmıştır. UVC sürücüsü her iki kamera türünü de destekler. Kamera üretici yazılımının, UVC sürücüsünün kamerayı desteklenen kategorilerden birine veya her ikisine de kaydedeceği değeri belirtmesini öneririz.
Yalnızca renk biçim türlerini destekleyen bir kamera KSCATEGORY_VIDEO_CAMERA altına kaydedilmelidir. IR veya Yalnızca derinlik biçim türlerini destekleyen bir kamera KSCATEGORY_SENSOR_CAMERA altına kaydedilmelidir. Hem renk hem de renk dışı biçim türlerini destekleyen bir kamera, KSCATEGORY_VIDEO_CAMERA ve KSCATEGORY_SENSOR_CAMERA altına kaydedilmelidir. Bu kategori, uygulamaların çalışmak istedikleri kamerayı seçmesine yardımcı olur.
UVC kamera, aşağıdaki bölümlerde ayrıntılı olarak verilen BOS MS OS 2.0 Tanımlayıcısı'ndaSensorCameraMode ve SkipCameraEnumeration öznitelikleri aracılığıyla kategori tercihini belirtebilir.
SensorCameraMode özniteliği 1 veya 2 değerini alır.
1 değeri cihazı KSCATEGORY_SENSOR_CAMERA altına kaydeder. Buna ek olarak, kamerayı yalnızca algılayıcı kameraları arayan uygulamaların kullanımına açmak için SkipCameraEnumeration için 1 değerini belirtin. Yalnızca algılayıcı kamera medya türlerini kullanıma sunan bir kamera bu değeri kullanmalıdır.
SensorCameraMode için 2 değeri cihazı KSCATEGORY_SENSOR_CAMERA ve KSCATEGORY_VIDEO_CAMERA altına kaydeder. Bu, kamerayı sensör ve renkli kamera arayan uygulamalar için kullanılabilir hale getirir. Hem sensör kamera hem de renkli kamera medya türlerini kullanıma sunan bir kamera bu değeri kullanmalıdır.
YUKARıDA belirtilen kayıt defteri değerini BOS tanımlayıcısını kullanarak belirtmenizi öneririz. Platforma özgü MS OS 2.0 tanımlayıcısına sahip örnek bir BOS tanımlayıcısı için aşağıdaki Örnek bileşik cihaz bölümüne bakın.
Cihaz üretici yazılımını yukarıda açıklandığı gibi güncelleştiremiyorsanız, özel bir INF kullanabilir ve SensorCameraMode ve SkipCameraEnumeration için aşağıdaki gibi bir değer belirterek kameranızın algılayıcı kamera olarak kaydedilmesi gerektiğini belirtebilirsiniz:
Özel bir INF dosyası (gelen kutusu UVC sürücüsüne göre) aşağıdaki AddReg girdilerini içermelidir:
SensorCameraMode: REG_DWORD: 1 (sensör kamerası olarak kaydolmak için)
SkipCameraEnumeration: REG_DWORD: 1 (yalnızca IR uygulamaları için kullanılabilir hale getirin)
Özel INF bölümüne örnek olarak şunlar verilmiştir:
[USBVideo.NT.HW]
AddReg=USBVideo.HW.AddReg
[USBVideo.HW.AddReg]
HKR,, SensorCameraMode, 0x00010001,1 ; places the value under device HW
; Registry key
HKR,, SkipCameraEnumeration, 0x00010001,1 ; This makes the camera available
; only for application looking for
; IR cameras
SensorCameraMode ve SkipCameraEnumeration öznitelikleri üretici yazılımında veya INF'de belirtilmezse, kamera renkli kamera olarak kaydedilir ve yalnızca renk kamerası kullanan uygulamalar tarafından görülebilir.
IR akışı
Windows gelen kutusu USB video sınıfı (UVC) sürücüsü, sahneyi YUV biçiminde yakalayan ve piksel verilerini USB üzerinden sıkıştırılmamış YUV veya sıkıştırılmış MJPEG çerçeveleri olarak ileten kameraları destekler.
Aşağıdaki biçim türü GUID'leri, WDK ksmedia.h üst bilgi dosyasında tanımlandığı gibi akış video biçimi tanımlayıcısında belirtilmelidir:
| Türü | Açıklama |
|---|---|
| KSDATAFORMAT_SUBTYPE_L8_IR | Sıkıştırılmamış 8 bit luma düzlemi. Bu tür MFVideoFormat_L8 ile eşleşir. |
| KSDATAFORMAT_SUBTYPE_L16_IR | Sıkıştırılmamış 16 bit luma düzlemi. Bu tür MFVideoFormat_L16 ile eşleşir. |
| KSDATAFORMAT_SUBTYPE_MJPG_IR | Sıkıştırılmış MJPEG çerçeveleri. Media Foundation bunu NV12 sıkıştırılmamış çerçevelere dönüştürür ve yalnızca luma düzlemini kullanır. |
Bu biçim türü GUID'leri çerçeve tanımlayıcısının guidFormat alanında belirtildiğinde, Media Foundation yakalama işlem hattı akışı IR akışı olarak işaretler. Media Foundation FrameReader API'siyle yazılan uygulamalar IR akışını tüketebilecektir. IR akışları için işlem hattı tarafından IR çerçevelerinin ölçeklendirilmesi veya dönüştürülmesi desteklenmez.
IR format türlerini sunan bir akış, RGB veya Derinlik formatı türlerini sunmamalıdır.
// Example Format Descriptor for UVC 1.1 frame based format
typedef struct _VIDEO_FORMAT_FRAME
{
UCHAR bLength;
UCHAR bDescriptorType;
UCHAR bDescriptorSubtype;
UCHAR bFormatIndex;
UCHAR bNumFrameDescriptors;
GUID guidFormat; // this field should contain the IR subtype GUID
UCHAR bBitsPerPixel;
UCHAR bDefaultFrameIndex;
UCHAR bAspectRatioX;
UCHAR bAspectRatioY;
UCHAR bmInterlaceFlags;
UCHAR bCopyProtect;
UCHAR bVariableSize;
} VIDEO_FORMAT_FRAME, *PVIDEO_FORMAT_FRAME;
Uyarı
IR akışları, DShow'da düzenli yakalama akışları olarak gösterilir.
Derinlik akışı
Windows yerleşik USB Video Class sürücüsü, Derinlik akışları üreten kameraları destekler. Bu kameralar, sahnenin derinlik bilgilerini (örneğin, uçuş süresi) yakalar ve derinlik haritasını USB üzerinden sıkıştırılmamış YUV çerçeveleri olarak iletir. WDK ksmedia.h üst bilgi dosyasında tanımlandığı gibi, akış video biçimi tanımlayıcısında aşağıdaki biçim türü GUID belirtilmelidir:
| Türü | Açıklama |
|---|---|
| KSDATAFORMAT_SUBTYPE_D16 | 16-bit derinlik haritası değerleri. Bu tür MFVideoFormat_D16 aynıdır. Değerler milimetre şeklindedir. |
Guid biçim türü çerçeve tanımlayıcısının guidFormat üyesinde belirtildiğinde, Media Foundation yakalama işlem hattı akışı derinlik akışı olarak işaretler. FrameReader API'siyle yazılan uygulamalar derinlik akışından yararlanabilecektir. Derinlik çerçevelerinin ölçeklenmesi veya dönüştürülmesi, derinlik akışları için boru hattı tarafından desteklenmez.
Derinlik biçim türlerini gösteren bir akış RGB veya IR biçim türlerini içermemelidir.
// Example Format Descriptor for UVC 1.1 frame based format
typedef struct _VIDEO_FORMAT_FRAME
{
UCHAR bLength;
UCHAR bDescriptorType;
UCHAR bDescriptorSubtype;
UCHAR bFormatIndex;
UCHAR bNumFrameDescriptors;
GUID guidFormat; // this field should contain the IR subtype GUID
UCHAR bBitsPerPixel;
UCHAR bDefaultFrameIndex;
UCHAR bAspectRatioX;
UCHAR bAspectRatioY;
UCHAR bmInterlaceFlags;
UCHAR bCopyProtect;
UCHAR bVariableSize;
} VIDEO_FORMAT_FRAME, *PVIDEO_FORMAT_FRAME;
Uyarı
Derinlik akışları, DShow'da düzenli yakalama akışları olarak gösterilir.
Kameraları gruplandırma
Windows, uygulamaların ilgili kameralarla çalışmasına yardımcı olmak için kapsayıcı kimliklerine göre kameraların gruplanması destekler. Örneğin, aynı fiziksel cihazda bulunan bir IR kamera ve Renkli kamera, işletim sistemine ilgili kameralar olarak gösterilebilir. Bu, Windows Hello gibi uygulamaların senaryoları için ilgili kameraları kullanmasını sağlar.
Kamera işlevleri arasındaki ilişki, üretici yazılımındaki kameranın BOS tanımlayıcısında belirtilebilir. UVC sürücüsü bu bilgileri kullanır ve bu kamera işlevlerini ilişkili olarak kullanıma sunar. Bu, işletim sistemi kamera yığınının bunları uygulamalar için ilgili bir kamera grubu olarak kullanıma sunmasını sağlar.
Kamera üretici yazılımı, kıvırcık parantezli dize biçiminde bir GUID olan UVC-FSSensorGroupID belirtmelidir. Aynı UVC-FSSensorGroupID'ye sahip kameralar birlikte gruplandırılır.
Algılayıcı grubuna üretici yazılımında bir Unicode dizesi olan UVC-FSSensorGroupName belirtilerek bir ad verilebilir.
UVC-FSSensorGroupID ve UVC-FSSensorGroupName değerlerini belirten örnek bir BOS örneği için aşağıdaki Örnek bileşik cihaz bölümüne bakın.
Cihaz üretici yazılımını yukarıda açıklandığı gibi güncelleştiremiyorsanız, aşağıdaki gibi bir algılayıcı grubu kimliği ve adı belirterek özel bir INF kullanabilir ve kameranızın bir algılayıcı grubunun parçası olduğunu belirtebilirsiniz. Özel INF dosyası (gelen kutusu UVC sürücüsüne göre) aşağıdaki AddReg girdilerini içermelidir:
FSSensorGroupID: REG_SZ: "{algılayıcı grubu kimliğiniz GUID}"
FSSensorGroupName: REG_SZ: "algılayıcı grubunuzun kolay adı"
Özel INF bölümüne örnek olarak aşağıdakiler gösterilebilir:
[USBVideo.NT.Interfaces]
AddInterface=%KSCATEGORY_CAPTURE%,GLOBAL,USBVideo.Interface
AddInterface=%KSCATEGORY_RENDER%,GLOBAL,USBVideo.Interface
AddInterface=%KSCATEGORY_VIDEO%,GLOBAL,USBVideo.Interface
AddInterface=%KSCATEGORY_RENDER_EXT%,GLOBAL,USBVideo.Interface
AddInterface=%KSCATEGORY_VIDEO_CAMERA%,GLOBAL,USBVideo.Interface
[USBVideo.Interface]
AddReg=USBVideo.Interface.AddReg
[USBVideo.Interface.AddReg]
HKR,,CLSID,,%ProxyVCap.CLSID%
HKR,,FriendlyName,,%USBVideo.DeviceDesc%
HKR,,RTCFlags,0x00010001,0x00000010
HKR,, FSSensorGroupID,0x00000000,%FSSensorGroupID%
HKR,, FSSensorGroupName,0x00000000,%FSSensorGroupName%
Uyarı
Algılayıcı Grupları DShow yakalama işlem hattında desteklenmez.
Yöntem 2 veya Yöntem 3 hala destek yakalamaya devam ediyor
UVC spesifikasyonu, video akış arabiriminin Yöntem 1/2/3 türü durağan görüntü yakalamayı destekleyip desteklemediğini belirtmek için bir mekanizma sağlar. İşletim sisteminin cihazın Yöntem 2/3 fotoğraf yakalama desteğinden yararlanmasını sağlamak için, UVC sürücüsü aracılığıyla cihaz üretici yazılımı BOS tanımlayıcısında bir değer belirtebilir.
Yöntem 2/3 hareketsiz görüntü yakalamayı etkinleştirmek için belirtilmesi gereken değer , UVC-EnableDependentStillPinCapture adlı bir DWORD'dür. BOS tanımlayıcısını kullanarak değerini belirtin. Aşağıdaki Örnek bileşik cihaz , örnek bir BOS tanımlayıcısı ile hareketsiz görüntü yakalamayı etkinleştirmeyi gösterir.
Cihaz üretici yazılımını yukarıda açıklandığı gibi güncelleştiremiyorsanız, kameranızın Yöntem 2 veya Yöntem 3'ü hala yakalama yöntemini desteklediğini belirtmek için özel bir INF kullanabilirsiniz.
Özel INF dosyası (özel UVC sürücüsüne veya gelen kutusu UVC sürücüsüne göre) aşağıdaki AddReg girişini içermelidir:
EnableDependentStillPinCapture: REG_DWORD: 0x0 (Devre Dışı) ile 0x1 (Etkin)
Bu giriş Etkin (0x1) olarak ayarlandığında, yakalama işlem hattı durağan görüntü yakalama için Yöntem 2/3'ü kullanır (firmware'in UVC spesifikasyonuyla belirtilen Yöntem 2/3 desteğini de sunduğu varsayılır).
Özel INF bölümüne örnek olarak aşağıdakiler verilmiştir:
[USBVideo.NT.Interfaces]
AddInterface=%KSCATEGORY_CAPTURE%,GLOBAL,USBVideo.Interface
AddInterface=%KSCATEGORY_RENDER%,GLOBAL,USBVideo.Interface
AddInterface=%KSCATEGORY_VIDEO%,GLOBAL,USBVideo.Interface
AddInterface=%KSCATEGORY_RENDER_EXT%,GLOBAL,USBVideo.Interface
AddInterface=%KSCATEGORY_VIDEO_CAMERA%,GLOBAL,USBVideo.Interface
[USBVideo.Interface]
AddReg=USBVideo.Interface.AddReg
[USBVideo.Interface.AddReg]
HKR,,CLSID,,%ProxyVCap.CLSID%
HKR,,FriendlyName,,%USBVideo.DeviceDesc%
HKR,,RTCFlags,0x00010001,0x00000010
HKR,,EnableDependentStillPinCapture,0x00010001,0x00000001
Cihaz MFT Zincirleme
Cihaz MFT, Windows'ta kamera işlevselliğini genişletmek için IHV'ler ve OEM'ler için önerilen kullanıcı modu eklenti mekanizmasıdır.
Windows 10, sürüm 1703'e kadar kamera işlem hattı yalnızca bir DMFT uzantısı eklentisini destekliyor.
Windows 10, sürüm 1703'ten itibaren, Windows kamera işlem hattı, en fazla iki DMFT'yi içerebilen isteğe bağlı bir DMFT zincirini destekler.
Windows 11, sürüm 22H2 itibarıyla, Windows kamera veri hattı, en fazla dört DMFT içerebilen opsiyonel bir DMFT zincirini destekler.
Bu, OEM'ler ve IHV'ler için, işlem sonrası kamera akışları biçiminde değer katma olanağı sağlamak için daha fazla esneklik sağlar. Örneğin, bir cihaz IHV DMFT ve OEM DMFT ile birlikte PDMFT kullanabilir.
Aşağıdaki şekilde, bir DMFT zinciri içeren mimari gösterilmektedir.
Kamera sürücüsünden DevProxy'ye giden örnekleri yakalayın, ardından DMFT zincirlerini inceleyin. Zincirdeki her DMFT örneği işleme şansına sahiptir. DMFT örneği işlemek istemiyorsa, aktarım görevi görerek örneği doğrudan sonraki DMFT'ye geçirebilir.
KsProperty gibi denetimler için çağrı yukarı akışa geçer; zincirdeki son DMFT çağrıyı önce alır, çağrı orada işlenebilir veya zincirdeki önceki DMFT'ye geçirilebilir.
Hatalar DMFT'den DTM'ye ve ardından uygulamalara yayılır. IHV/OEM DMFT'leri için, herhangi bir DMFT örneği oluşturulamıyorsa, DTM için ölümcül bir hata olur.
DMFT'ler için gereksinimler:
DMFT'nin giriş pin sayısı önceki DMFT'nin çıkış pin sayısıyla eşleşmelidir, aksi takdirde başlatma sırasında DTM başarısız olur. Ancak, aynı DMFT'nin giriş ve çıkış pini sayılarının eşleşmesi gerekmez.
DMFT'nin arabirimleri desteklemesi gerekiyor - IMFDeviceTransform, IMFShutdown, IMFRealTimeClientEx, IKsControl ve IMFMediaEventGenerator; MFT0 yapılandırılmışsa veya zincirdeki bir sonraki DMFT için IMFTransform desteği gerekiyorsa, IMFTransform'un desteklenmesi gerekebilir.
Çerçeve Sunucusu kullanmayan 64 bit sistemlerde hem 32 bit hem de 64 bit DMFT'ler kaydedilmelidir. Bir USB kamerasının rastgele bir sisteme takılma olasılığı göz önüne alındığında, "harici" veya "inbox olmayan" USB kameralar için, USB kamera satıcısının hem 32 bit hem de 64 bit DMFT'ler sağlaması gerekir.
DMFT zincirini yapılandırma
Kamera cihazı isteğe bağlı olarak gelen kutusu USBVideo.INF'nin bölümlerini kullanan özel bir INF dosyası kullanarak DLL'de bir DMFT COM nesnesi sağlayabilir.
Özel .INF dosyasının "Interface AddReg" bölümünde, aşağıdaki kayıt defteri girdisini ekleyerek DMFT CLSID'lerini belirtin.
CameraDeviceMftCLSIDChain (REG_MULTI_SZ) %Dmft0.CLSID%,%Dmft.CLSID%,%Dmft2.CLSID%
Aşağıdaki örnek INF ayarlarında gösterildiği gibi (%Dmft0.CLSID% ve % Dmft1.CLSID% DMFTs'leriniz için kullandığınız gerçek CLSID dizeleriyle değiştirin), Windows 10'da izin verilen en fazla 2 CLSID vardır, sürüm 1703 ve ilki DevProxy'ye en yakın olan ve sonuncusu zincirdeki son DMFT'dir.
Platform DMFT CLSID: {3D096DDE-8971-4AD5-98F9-C74F56492630}.
Bazı örnek CameraDeviceMftCLSIDChain ayarları:
IHV/OEM DMFT veya Platform DMFT yok
- CameraDeviceMftCLSIDChain = "" (veya bu kayıt defteri girdisini belirtmeniz gerekmez)
IHV/OEM DMFT
- CameraDeviceMftCLSIDChain = %Dmft. CLSID%
Platform DMFT <-> IHV/OEM DMFT
CameraDeviceMftCLSIDChain = "{3D096DDE-8971-4AD5-98F9-C74F56492630}",%Dmft. CLSID%
İşte, zincirinde Platform DMFT ve GUID {D671BE6C-FDB8-424F-81D7-03F5B1CE2CC7} olan bir DMFT bulunan bir USB kamera için sonuç kayıt anahtarının ekran görüntüsü.
IHV/OEM DMFT0 <-> IHV/OEM DMFT1
- CameraDeviceMftCLSIDChain = %Dmft0.CLSID%,%Dmft1.CLSID%,
Uyarı
CameraDeviceMftCLSIDChain en fazla 2 CLSID'ye sahip olabilir.
CameraDeviceMftCLSIDChain yapılandırılırsa, eski CameraDeviceMftCLSID ayarları DTM tarafından atlanır.
CameraDeviceMftCLSIDChain yapılandırılmadıysa ve eski CameraDeviceMftCLSID yapılandırıldıysa, ardından zincir (USB kamerasıysa ve Platform DMFT tarafından destekleniyorsa ve Platform DMFT etkinse) DevProxy <–> Platform DMFT <–> OEM/IHV DMFT veya (kamera Platform DMFT tarafından desteklenmiyorsa veya Platform DMFT etkin değilse) DevProxy <-> OEM/IHV DMFT gibi görünür.
Örnek INF dosyası ayarları:
[USBVideo.Interface.AddReg]
HKR,,CLSID,,%ProxyVCap.CLSID%
HKR,,FriendlyName,,%USBVideo.DeviceDesc%
HKR,,RTCFlags,0x00010001,0x00000010
HKR,,EnablePlatformDmft,0x00010001,0x00000001
HKR,,DisablePlatformDmftFeatures,0x00010001,0x00000001
HKR,,CameraDeviceMftCLSIDChain, 0x00010000,%Dmft0.CLSID%,%Dmft1.CLSID%
Platform Cihazı MFT
Windows 10, sürüm 1703'ten itibaren, Windows, UVC kameralar için Platform DMFT (PDMFT) olarak bilinen yerleşik bir Cihaz MFT'si sağlar ve bu özellik isteğe bağlı olarak kullanılabilir. Bu DMFT, IHV'lerin ve OEM'lerin Windows tarafından sağlanan işlem sonrası algoritmalarından yararlanmasına olanak tanır.
| Platform DMFT tarafından desteklenen özellikler | Windows Sürümü |
|---|---|
| ROI özellikli USB kameralarda 3A ayarlamaları için yüz tabanlı İlgi Bölgesi'ni (ROI) etkinleştirir. | Windows 10, sürüm 1703 |
Uyarı
Kamera UVC 1.5 tabanlı ROI'yi desteklemiyorsa, cihaz PDMFT'yi kullanmayı kabul etse bile PDMFT yüklenmez.
UVC kamera, BOS tanımlayıcısı aracılığıyla EnablePlatformDmft'yi etkinleştirerek platform DMFT'yi kullanmayı seçebilir.
Platform DMFT'yi etkinleştirmek için belirtilmesi gereken değer , UVC-EnablePlatformDmft adına göre bir DWORD'dür ve BOS tanımlayıcısını kullanarak değerini belirtir. Aşağıdaki Örnek bileşik cihaz bölümünde Platform DMFT'nin örnek bir BOS tanımlayıcısı ile etkinleştirilmesi gösterilmektedir.
Cihaz üretici yazılımını yukarıda açıklandığı gibi güncelleştiremiyorsanız, cihaz için Platform DMFT'yi etkinleştirmek için özel bir INF dosyası kullanabilirsiniz.
Özel INF dosyası (özel UVC sürücüsüne veya gelen kutusu UVC sürücüsüne göre) aşağıdaki AddReg girişini içermelidir:
EnablePlatformDmft: REG_DWORD: 0x0 (Devre Dışı) - 0x1 (Etkin)
Bu giriş Etkin (0x1) olarak ayarlandığında yakalama işlem hattı cihaz için gelen kutusu Platformu DMFT'sini kullanır. Aşağıda bu özel INF bölümünün bir örneği gösterilmektedir:
[USBVideo.NT.Interfaces]
AddInterface=%KSCATEGORY_CAPTURE%,GLOBAL,USBVideo.Interface
AddInterface=%KSCATEGORY_RENDER%,GLOBAL,USBVideo.Interface
AddInterface=%KSCATEGORY_VIDEO%,GLOBAL,USBVideo.Interface
AddInterface=%KSCATEGORY_RENDER_EXT%,GLOBAL,USBVideo.Interface
AddInterface=%KSCATEGORY_VIDEO_CAMERA%,GLOBAL,USBVideo.Interface
[USBVideo.Interface]
AddReg=USBVideo.Interface.AddReg
[USBVideo.Interface.AddReg]
HKR,,CLSID,,%ProxyVCap.CLSID%
HKR,,FriendlyName,,%USBVideo.DeviceDesc%
HKR,,RTCFlags,0x00010001,0x00000010
HKR,,EnablePlatformDmft,0x00010001,0x00000001
Windows 10, sürüm 1703'te bir cihaz PDMFT kullanmayı kabul ederse PDMFT tarafından desteklenen tüm özellikler etkinleştirilir (cihaz özelliklerine göre). PDMFT özelliklerinin ayrıntılı yapılandırması desteklenmez.
Uyarı
Yüz tabanlı ROI koordinatları, PDMFT'ye iletilen görüntünün görünüm alanına göre hesaplanır. Önizleme, Kaydırma veya Eğme veyaDijital Pencere gibi bir denetimin kullanılması nedeniyle görünüm alanı değiştirilmişse kamera, mevcut yakınlaştırma/kaydırma penceresini göz önünde bulundurarak sağlanan koordinatları algılayıcının tam görüş alanına geri eşlemekle sorumludur.
MS OS Tanımlayıcıları Aracılığıyla Yüz Doğrulama Profili
Windows 10 RS5 artık Windows Hello desteğine sahip tüm kameralarda Yüz Doğrulama Profili V2 gereksinimini zorunlu kıyor. Özel kamera sürücüsü yığınına sahip MIPI tabanlı sistemler için bu destek, INF (veya Uzantı INF) veya kullanıcı modu eklentisi (Cihaz MFT) aracılığıyla yayımlanabilir.
Ancak USB Video cihazları için UVC tabanlı kameralarla ilgili bir kısıtlama, Windows 10 19H1 için özel kamera sürücülerine izin verilmemiş olmasıdır. UVC tabanlı tüm kameralar dahili USB Video Sınıfı sürücüsünü kullanmalıdır ve üretici uzantıları bir Cihaz MFT biçiminde uygulanmalıdır.
Birçok OEM/ODM için kamera modülleri için tercih edilen yaklaşım, modülün üretici yazılımındaki işlevselliğin büyük bir kısmını microsoft işletim sistemi tanımlayıcıları aracılığıyla uygulamaktır.
Aşağıdaki kameralar, MSOS Tanımlayıcıları (BOS tanımlayıcıları olarak da adlandırılır) aracılığıyla Yüz Doğrulama Profili yayımlamak için desteklenir:
Sensör Grubu'nda, ayrı bir IR kamera ile kullanılacak sadece RGB kamera.
Yalnızca IR kameranın, ayrı RGB kamera ile birlikte bir Sensör Grubunda kullanılması.
Ayrı IR ve RGB pinleri olan RGB+IR kamera.
Uyarı
Kamera üretici yazılımı yukarıda açıklanan üç gereksinimden birini karşılayamıyorsa, ODM/OEM'nin Kamera Profili V2'yi bildirmek için bir Uzantı INF kullanması gerekir.
Örnek Microsoft İşletim Sistemi Tanımlayıcı Düzeni
Aşağıdaki belirtimler için örnekler aşağıda verilmiştir:
Microsoft işletim sistemi genişletilmiş tanımlayıcıları belirtimi 1.0
Microsoft OS 2.0 tanımlayıcıları belirtimi
Microsoft İşletim Sistemi Genişletilmiş Tanımlayıcısı 1.0 Belirtimi
Genişletilmiş özellikler işletim sistemi tanımlayıcısının iki bileşeni vardır
- Sabit uzunlukta üst bilgi bölümü
- Üst bilgi bölümünü izleyen bir veya daha fazla değişken uzunluklu özel özellikler bölümü
Microsoft OS 1.0 Tanımlayıcı Üst Bilgisi Bölümü
Üst Bilgi Bölümü tek bir özel özelliği (Yüz Kimliği Doğrulama Profili) açıklar.
| Ofset baskı | Veri Alanı | Boyut (bayt) | Değer | Açıklama |
|---|---|---|---|---|
| 0 | dwLength | 4 | <> | |
| 4 | bcdVersion | 2 | 0x0100 | Sürüm 1.0 |
| 6 | wIndex | 2 | 0x0005 | Genişletilmiş özellik işletim sistemi tanımlayıcısı |
| 8 | Kelime Sayısı | 2 | 0x0001 | Bir özel özellik |
Microsoft OS 1.0 Tanımlayıcısı Özel Özellik Bölümü
| Ofset baskı | Veri Alanı | Boyut (bayt) | Değer | Açıklama |
|---|---|---|---|---|
| 0 | dwSize | 4 | 0x00000036 (54) | Bu özellik için toplam boyut (bayt cinsinden). |
| 4 | dwPropertyDataType | 4 | 0x00000004 | REG_DWORD_LITTLE_ENDIAN (Küçük Sıralı DWORD Kaydı) |
| 8 | wÖzellikAdıUzunluğu | 2 | 0x00000024 (36) | Özellik adının boyutu (bayt cinsinden). |
| 10 | bPropertyName | 36 | UVC-CPV2FaceAuth | Unicode'da "UVC-CPV2FaceAuth" dizesi. |
| 46 | dwPropertyDataLength | 4 | 0x00000004 | Özellik verileri için 4 bayt (sizeof(DWORD)). |
| 50 | bPropertyData | 4 | Aşağıdaki Veri Şemasına Bakın | Aşağıdaki Veri Şemasına bakın. |
Yük Şeması
UVC-CPV2FaceAuth veri yükü 32 bit işaretsiz bir tamsayıdır. Yüksek dereceli 16 bit, RGB pini tarafından sağlanan medya türü listesinin sıfır tabanlı dizinini temsil eder. Düşük sıra 16 bit, IR pini tarafından sunulan medya türü listesinin 0 tabanlı dizinini temsil eder.
Örneğin, RGB pininden bildirilen sırayla aşağıdaki medya türlerini açığa çıkaran bir Tip 3 Kamera:
YUY2, 640x480@30fps
MJPG, 1280x720@30fps
MJPG, 800x600@30fps
MJPG, 1920x1080@30fps
IR için aşağıdaki medya türü:
L8, 480x480@30fps
L8, 480x480@15fps
L8, 480x480@10fps
0x00010000 yük değeri aşağıdaki Yüz Doğrulama Profilinin yayımlanmasını sağlar:
Pin0:(RES==1280,720; FRT==30,1; SUT==MJPG) // İkinci medya türü (0x0001)
Pin1:(RES==480.480; FRT==30,1; SUT==L8) // İlk medya türü (0x0000)
Uyarı
Bu yazma sırasında Windows Hello, RGB akışı için en az 480x480@7.5fps ve IR akışı için 340x340@15fps gereksinimine sahiptir. Yüz Tanıma Kimlik Doğrulama Profili etkinleştirilirken, IHV/OEM'lerin bu gereksinimi karşılayan medya türlerini seçmeleri gereklidir.
Tür 1 Kamera Örneği
Tür 1 Kamera için, IR pini olmadığından (Bir Tür 1 Kamerasının Algılayıcı Grubundaki makinedeki bir Type 2 Kamera ile eşleştirileceği beklentisiyle), yalnızca RGB medya türü dizini yayımlanır. IR medya türü dizini için yükün düşük sıralı 16 bit değeri 0xFFFF olarak ayarlanmalıdır.
Örneğin, Tür 1 Kamera aşağıdaki medya türlerinin listesini ortaya çıkardıysa:
YUY2, 640x480@30fps
MJPG, 1280x720@30fps
MJPG, 800x600@30fps
MJPG, 1920x1080@30fps
MJPG 1280x720@30fps medya türünü kullanarak CPV2FaceAuth'un yayımlanması için yükün 0x0001FFFF olarak ayarlanması gerekir.
Tür 2 Kamera Örneği
Tür 2 Kamera için, üst düzey 16 bit 0xFFFF olarak ayarlanmalıdır ve alt düzey 16 bit kullanılacak IR medya türünü belirtir.
Örneğin, aşağıdaki medya türlerine sahip bir Tür 2 Kamera için:
L8, 480x480@30fps
L8, 480x480@15fps
L8, 480x480@10fps
Yüz Tanıma Kimlik Doğrulaması için ilk medya türü kullanılıyorsa, değer şu olmalıdır: 0xFFFF0000.
Microsoft İşletim Sistemi Genişletilmiş Tanımlayıcısı 2.0 Belirtimi
MSOS Genişletilmiş Tanımlayıcı 2.0, Yüz Doğrulama Profili desteği eklemek için kayıt defteri değerlerini tanımlamak için kullanılabilir. Bu işlem Microsoft OS 2.0 Kayıt Defteri Özellik Tanımlayıcısı kullanılarak yapılır.
UVC-CPV2FaceAuth kayıt defteri girdisi için, aşağıda örnek bir MSOS 2.0 tanımlayıcı kümesi gösterilmektedir:
UCHAR Example2_MSOS20DescriptorSet_UVCFaceAuthForFutureWindows[0x3C] =
{
//
// Microsoft OS 2.0 Descriptor Set Header
//
0x0A, 0x00, // wLength - 10 bytes
0x00, 0x00, // MSOS20_SET_HEADER_DESCRIPTOR
0x00, 0x00, 0x0?, 0x06, // dwWindowsVersion – 0x060?0000 for future Windows version
0x3C, 0x00, // wTotalLength – 60 bytes
//
// Microsoft OS 2.0 Registry Value Feature Descriptor
//
0x32, 0x00, // wLength - 50 bytes
0x04, 0x00, // wDescriptorType – 4 for Registry Property
0x04, 0x00, // wPropertyDataType - 4 for REG_DWORD_LITTLE_ENDIAN
0x30, 0x00, // wPropertyNameLength – 36 bytes
0x55, 0x00, 0x56, 0x00, // Property Name - "UVC-CPV2FaceAuth"
0x43, 0x00, 0x2D, 0x00,
0x43, 0x00, 0x50, 0x00,
0x56, 0x00, 0x32, 0x00,
0x46, 0x00, 0x61, 0x00,
0x63, 0x00, 0x65, 0x00,
0x41, 0x00, 0x75, 0x00,
0x74, 0x00, 0x68, 0x00,
0x00, 0x00, 0x00, 0x00,
0x04, 0x00, // wPropertyDataLength – 4 bytes
0x00, 0x00, 0x01, 0x00 // PropertyData – 0x00010000 (see Payload Schema)
}
UVC-CPV2FaceAuth kayıt defteri girdisi eklendiğinde, cihazların UVC cihazları için DShow Köprüsü uygulama kılavuzunda açıklandığı gibi EnableDshowRedirection kayıt defteri girdisini yayımlaması gerekmez.
Ancak, cihaz satıcısının Windows'un eski sürümlerini desteklemesi ve/veya Çerçeve Sunucusu içinde MJPEG sıkıştırmasını etkinleştirmesi gerekiyorsa EnableDshowRedirection kayıt defteri girdisi eklenmelidir.
Algılayıcı Grubu Oluşturma
OEM'ler, Windows Hello desteği için hem RGB hem de IR akışları sağlamak üzere Tür 1 ve Tür 2 Kameraları kullanan sistemler oluştururken, OEM'lerin iki kamerayı sentezlenmiş bir Algılayıcı Grubu'nun parçası olarak bildirmesi gerekir.
Bu, her kamera için cihaz arabirimi özelliği altında oluşturulacak bir Uzantı INF'sinde FSSensorGroupId ve FSSensorGroupName etiketi bildirilerek yapılır.
Ancak Uzantı INF sağlanmazsa, ODM'ler FSSensorGroupId ve FSSensorGroupName değerlerini yayımlamak için aynı MSOS Tanımlayıcılarını kullanabilir. Gelen kutusu Windows 10 USB Video Sınıfı sürücüsü, Yük Adı ön eki "UVC-" olan herhangi bir MSOS Tanımlayıcısını otomatik olarak alır ve etiketi cihaz arabirimi özellik deposuna geçirir ("UVC-" ön ekini kaldırır).
Bu nedenle, belirtilenleri yayımlayan bir Tip 1 ve Tip 2 Kamera, işletim sisteminin kameraları Windows Hello ile kullanmak üzere çok cihazlı bir Algılayıcı Grubuna sentezlemesine olanak tanır.
UVC-FSSensorGroupId
UVC-FSSensorGroupName
Her etiketin yükü bir Unicode Dizesi olmalıdır. UVC-FSSensorGroupId yükü aşağıdaki biçimde bir GUID dizesi olmalıdır:
{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}
GUID değeri Tür 1 ile Tür 2 Kameralar arasında aynı olmalı ve her iki kamera da aynı fiziksel kasaya eklenmelidir. Yerleşik kameralar için fiziksel kasa, bilgisayarın kendisidir. Harici kameralar için, hem Tür 1 hem de Tür 2 Kamera modüllerinin bilgisayara bağlı aynı fiziksel cihazda yerleşik olması gerekir.
Algılayıcı Grupları için Özel Cihaz Arabirimi Kategorileri
19H1'den itibaren Windows, sentezlenmiş Algılayıcı Gruplarının herhangi bir özel veya önceden tanımlanmış kategoride yayımlanmasına izin vermek için IHV/OEM tarafından belirtilen bir uzantı mekanizması sağlıyor. Algılayıcı Grubu oluşturma, özel INF'de Algılayıcı Grubu Kimlik anahtarı sağlayan IHV/OEM'ler tarafından tanımlanır:
FSSensorGroupId: {Custom GUID}
FSSensorGroupName: <Algılayıcı Grubu için Kullanılan Kolay Ad>
INF'de yukarıdaki AddReg girişlerine ek olarak, özel kategoriler için yeni bir AddReg girdisi tanımlanır:
FSSensorGroupCategoryList: {GUID}; {GUID};...; {GUID}
Birden çok kategori noktalı virgül (;) sınırlandırılmış GUID listesi kullanılarak tanımlanır.
Eşleşen bir FSSensorGroupId bildiren her cihaz aynı FSSensorGroupCategoryList'i bildirmelidir. Liste eşleşmiyorsa, tüm listeler yoksayılır ve Algılayıcı Grubu varsayılan olarak hiçbir özel kategori tanımlanmamış gibi KSCATEGORY_SENSOR_GROUP olarak yayımlanır.
Kamera Döndürme
Bkz . Kamera Cihazı Yönlendirmesi
UVC Denetim Önbelleği
BOS ve MS OS 2.0 tanımlayıcısı
UVC uyumlu kamera , Microsoft OS 2.0 Tanımlayıcılarını kullanarak üretici yazılımında bir platform özelliği BOS tanımlayıcısında Windows'a özgü cihaz yapılandırma değerlerini belirtebilir. Cihaz yapılandırmasını işletim sistemine ileten geçerli bir BOS tanımlayıcısının nasıl belirtileceğini anlamak için MS OS 2.0 tanımlayıcısı belgelerine bakın.
Microsoft OS 2.0 Tanımlayıcı Kümesi Üst Bilgisi
| Ofset baskı | Veri Alanı | Boyut (bayt) | Açıklama |
|---|---|---|---|
| 0 | wUzunluk | 2 | Bu üst bilginin bayt cinsinden uzunluğu 10 olmalıdır. |
| 2 | wDescriptorType | 2 | MSOS20_SET_HEADER_DESCRIPTOR |
| 4 | dwWindowsVersion | 4 | Windows sürümü. |
| 8 | wToplamUzunluk | 2 | Bu üst bilgi boyutu da dahil olmak üzere MS OS 2.0 tanımlayıcı kümesinin tamamının boyutu. |
Microsoft OS 2.0 Kayıt Defteri Özellik Tanımlayıcısı
| Ofset baskı | Veri Alanı | Boyut (bayt) | Açıklama |
|---|---|---|---|
| 0 | wUzunluk | 2 | Bu tanımlayıcının bayt cinsinden uzunluğu |
| 2 | wDescriptorType | 2 | MS_OS_20_ÖZELLİK_KAYIT_ÖZELLİĞİ |
| 4 | wPropertyDataType | 2 | 0x04 (REG_DWORD_LITTLE_ENDIAN) |
| 6 | wÖzellikAdıUzunluğu | 2 | Özellik adının uzunluğu. |
| 8 | ÖzellikAdı | Değişken | Kayıt defteri özelliğinin adı. |
| 8+M | wPropertyDataLength | 2 | Özellik verilerinin uzunluğu. |
| 10 milyon+ | PropertyData | Değişken | Özellik Verileri |
Üretici yazılımında geçerli bir MS OS 2.0 tanımlayıcısı belirtildiğinde, USB yığını yapılandırma değerlerini aşağıdaki cihaz HW kayıt defteri anahtarı gösterisine kopyalar:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB\<Device ID>\<Instance ID>\Device Parameters
UVC sürücüsü, cihaz HW kayıt defteri anahtarından yapılandırma değerlerini okur ve işletim sistemindeki cihazı buna göre yapılandırıyor. Örneğin, üretici yazılımı bir yapılandırma değeri kullanarak algılayıcı kamerası olarak kaydedilecek cihazı belirtirse, UVC sürücüsü cihazı bu kategorinin hemen altına kaydeder.
UVC cihazlarını platform BOS tanımlayıcısı aracılığıyla yapılandırmak, UVC cihaz satıcılarının Windows işletim sisteminde INF dosyası gerekmeden cihazı yapılandırmalarına yardımcı olmak için Windows 10, sürüm 1703'te etkinleştirilen bir mekanizmadır.
Özel INF aracılığıyla UVC cihazlarının yapılandırılması hala desteklenir ve bu, BOS tanımlayıcısına dayalı mekanizmaya göre önceliklidir. INF aracılığıyla cihaz özelliklerini belirtirken "UVC-" ön ekini eklemeniz gerekmez. Bu ön ek yalnızca BOS tanımlayıcısı aracılığıyla belirtilen ve arabirim örneğine özgü cihaz özellikleri için gereklidir. Cihazınızda DMFT gibi kullanıcı modu eklentileri gerekiyorsa DMFT'yi yüklemek için bir INF sağlamanız gerekir. Ürün yazılımı kullanılarak yapılandırılamaz.
ŞU anda BOS tanımlayıcısı aracılığıyla desteklenen yapılandırma değerleri
| Yapılandırma adı | Türü | Açıklama |
|---|---|---|
| Sensör Kamera Modu | REG_DWORD | Kamerayı belirli bir kategoriye kaydedin. |
| UVC-FSSensorGroupID, UVC-FSSensorGroupName | REG_SZ | Aynı UVC-FSSensorGroupID sahip kameraları gruplandırma |
| UVC-EnableDependentStillPinCapture | REG_DWORD | Durağan yakalama Yöntemi 2/3'ü etkinleştirmek için |
| UVC-EnablePlatformDmft | REG_DWORD | Platform DMFT'yi etkinleştirmek için |
UVC sürücüsü kayıt defteri değerlerini "UVC-" ön ekiyle gördüğünde, cihazın kategori arabirimi örneği kayıt defteri anahtarını ön ek olmadan aynı değerlerle doldurur. Sürücü bunu yalnızca yukarıda listelenenler için değil üretici yazılımı tarafından belirtilen herhangi bir değişken için yapar.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceClasses\{e5323777-f976-4f5b-9b55-b94699c46e44}\<Device Symbolic Link>\Device Parameters
İşletim sisteminin BOS Platformu Cihaz Özelliği ve MS OS 2.0 tanımlayıcılarını kullanabilmesi için, cihaz tanımlayıcısının 0x0210 veya daha yüksek olması için bcdUSB sürümünü belirtmesi gerekir.
Örnek bileşik cihaz
Bu bölümde, iki kamera işlevine sahip örnek bir bileşik cihaz için BIR BOS tanımlayıcısı ve MS OS 2.0 tanımlayıcısı sağlanır. İşlevlerden biri UVC renkli kamera, ikinci işlev ise UVC IR kameradır.
Örnek tanımlayıcılar aşağıdaki gibidir:
Renk kamerası işlevini KSCATEGORY_VIDEO_CAMERA altına kaydedin
IR kamera işlevini KSCATEGORY_SENSOR_CAMERA altına kaydetme
Renkli kamera ile hareketsiz görüntü yakalama işlevini etkinleştirin.
Renk ve IR kamera işlevlerini grup olarak ilişkilendirir
Cihaz numaralandırmasından sonra, USB yığını cihazdan BOS tanımlayıcısını alır. BOS tanımlayıcısını takip etme, platforma özgü bir cihaz özelliğidir.
#include <usbspec.h>
const BYTE USBVideoBOSDescriptor[0x21] =
{
/* BOS Descriptor */
0x05, // Descriptor size
USB_BOS_DESCRIPTOR_TYPE, // Device descriptor type BOS
0x21, 0x00, // Length 0x21 (33) this and all sub descriptors
0x01, // Number of device capability descriptors
/* Platform Device Capability Descriptor */
0x1C, // 28 bytes bLength
USB_DEVICE_CAPABILITY_DESCRIPTOR_TYPE, // Platform Descriptor type
USB_DEVICE_CAPABILITY_PLATFORM, // bDevCapabilityType PLATFORM
0, // bReserved
0xDF, 0x60, 0xDD, 0xD8, // PlatformCapabilityUUID
0x89, 0x45, // MS OS2.0 Descriptor
0xC7, 0x4C, // D8DD60DF-4589-4CC7-9CD2-659D9E648A9F
0x9C, 0xD2, 0x65, 0x9D, 0x9E, 0x64, 0x8A, 0x9F,
// CapabilityData
0x00, 0x00, 0x00, 0x0A, // dwWindowsVersion for Windows 10 and later
0xC8, 0x02, // wLength 0x2C8 (712)
0x01, // bMS_VendorCode - any value. e.g. 0x01
0x00 // bAltEnumCmd 0
};
BOS platform yetenek tanımlayıcısı aşağıdakileri belirtir:
MS OS 2.0 tanımlayıcı platform yeteneği GUID
Satıcı denetim kodu bMS_VendorCode (burada 1 olarak ayarlanmıştır). MS OS 2.0 tanımlayıcısını almak, satıcının tercih istediği herhangi bir değeri alabilir.
Bu BOS tanımlayıcısı işletim sistemi sürümü Windows 10 ve üzeri için geçerlidir.
BOS tanımlayıcısını gördükten sonra, USB yığını MS OS 2.0 tanımlayıcısını almak için satıcıya özgü denetim isteğinde bulunur.
MS OS 2.0 satıcıya özgü tanımlayıcıyı almak için denetim isteğinin biçimi:
| bmRequestType | BRequest | wValue | WIndex | wUzunluk | Data |
|---|---|---|---|---|---|
| 1100 0000B | bMS_VendorCode | 0x00 | 0x07 | Uzunluk | Döndürülen MS OS 2.0 Tanımlayıcı Kümesi blobu |
bmRequestType
Veri Aktarım Yönü – Cihazdan Ana Bilgisayara
Tür – Satıcı
Alıcı - Cihaz
bRequest
Tanımlayıcı kümesi bilgi yapısında döndürülen bMS_VendorCode değeri.
wValue
0x00 olarak ayarlayın.
wIndex
MS_OS_20_DESCRIPTOR_INDEX için 0x7.
wLength
BOS tanımlayıcısında döndürülen MS OS 2.0 tanımlayıcı kümesinin uzunluğu. Bu örnekte 0x25C (604).
Cihazın, USBVideoMSOS20DescriptorSet içinde belirtilen gibi MS OS 2.0 tanımlayıcısını döndürmesi beklenir.
USBVideoMSOS20DescriptorSet, renk ve IR işlevlerini açıklar. Aşağıdaki MS OS 2.0 Tanımlayıcı değerlerini belirtir:
Başlık Ayarla
Yapılandırma Alt Kümesi Başlığı
Renkli Kamera İşlev Alt Kümesi Başlığı
Sensör grubu kimliği için Kayıt Defteri Değeri Özelliği Tanımlayıcısı
Algılayıcı grubu adı için Kayıt Defteri Değeri Özellik Tanımlayıcısı
Hareketsiz görüntü yakalamayı etkinleştirmek için Kayıt Defteri Değeri Tanımlayıcısı
Platform DMFT'yi etkinleştirmek için Kayıt Defteri Değeri Özellik Tanımlayıcısı
IR Kamera İşlevi Alt Kümesi Başlığı
Algılayıcı grubu kimliği için Kayıt Defteri Değeri Özellik Tanımlayıcısı
Algılayıcı grubu adı için Kayıt Defteri Değeri Özellik Tanımlayıcısı
Kamerayı sensör kamerası olarak kaydetmek için Kayıt Defteri Değeri Özellik Tanımlayıcısı
Üretici yazılımı, bu bölümün başında açıklanan sanal cihaz için aşağıdaki MS OS 2.0 tanımlayıcısını döndürecek satıcı isteği için bir işleyiciye sahip olacaktır.
UCHAR USBVideoMSOS20DescriptorSet[0x2C8] =
{
/* Microsoft OS 2.0 Descriptor Set Header */
0x0A, 0x00, // wLength of MSOS20_SET_HEADER_DESCRIPTOR
0x00, 0x00, // wDescriptorType == MSOS20_SET_HEADER_DESCRIPTOR
0x00, 0x00, 0x00, 0x0A, // dwWindowsVersion – 0x10000000 for Windows 10
0xC8, 0x02, // wTotalLength - Total length 0x2C8 (712)
/* Microsoft OS 2.0 Configuration Subset Header */
0x08, 0x00, // wLength of MSOS20_SUBSET_HEADER_CONFIGURATION
0x01, 0x00, // wDescriptorType == MSOS20_SUBSET_HEADER_CONFIGURATION
0x00, // bConfigurationValue set to the first configuration
0x00, // bReserved set to 0.
0xBE, 0x02, // wTotalLength - Total length 0x2BE (702)
/****************Color Camera Function******************/
/* Microsoft OS 2.0 Function Subset Header */
0x08, 0x00, // wLength of MSOS20_SUBSET_HEADER_FUNCTION
0x02, 0x00, // wDescriptorType == MSOS20_SUBSET_HEADER_FUNCTION
0x00, // bFirstInterface field of the first IAD
0x00, // bReserved set to 0.
0x6E, 0x01, // wSubsetLength - Length 0x16E (366)
/****************Register the Color Camera in a sensor group******************/
/* Microsoft OS 2.0 Registry Value Feature Descriptor */
0x80, 0x00, // wLength 0x80 (128) in bytes of this descriptor
0x04, 0x00, // wDescriptorType – MSOS20_FEATURE_REG_PROPERTY
0x01, 0x00, // wPropertyDataType - REG_SZ
0x28, 0x00, // wPropertyNameLength – 0x28 (40) bytes
'U', 0x00, 'V', 0x00, // Property Name - "UVC-FSSensorGroupID"
'C', 0x00, '-', 0x00,
'F', 0x00, 'S', 0x00,
'S', 0x00, 'e', 0x00,
'n', 0x00, 's', 0x00,
'o', 0x00, 'r', 0x00,
'G', 0x00, 'r', 0x00,
'o', 0x00, 'u', 0x00,
'p', 0x00, 'I', 0x00,
'D', 0x00, 0x00, 0x00,
0x4E, 0x00, // wPropertyDataLength – 0x4E (78) bytes
// FSSensorGroupID GUID in string format:
// "{20C94C5C-F402-4F1F-B324-0C1CF0257870}"
'{', 0x00, '2', 0x00, // This is just an example GUID.
'0', 0x00, 'C', 0x00, // You need to generate and use your
'9', 0x00, '4', 0x00, // own GUID for the sensor group ID
'C', 0x00, '5', 0x00,
'C', 0x00, '-', 0x00,
'F', 0x00, '4', 0x00,
'0', 0x00, '2', 0x00,
'-', 0x00, '4', 0x00,
'F', 0x00, '1', 0x00,
'F', 0x00, '-', 0x00,
'B', 0x00, '3', 0x00,
'2', 0x00, '4', 0x00,
'-', 0x00, '0', 0x00,
'C', 0x00, '1', 0x00,
'C', 0x00, 'F', 0x00,
'0', 0x00, '2', 0x00,
'5', 0x00, '7', 0x00,
'8', 0x00, '7', 0x00,
'0', 0x00, '}', 0x00,
0x00, 0x00,
/* Microsoft OS 2.0 Registry Value Feature Descriptor */
0x56, 0x00, // wLength 0x56 (86) in bytes of this descriptor
0x04, 0x00, // wDescriptorType – MSOS20_FEATURE_REG_PROPERTY
0x01, 0x00, // wPropertyDataType - REG_SZ
0x2C, 0x00, // wPropertyNameLength – 0x2C (44) bytes
'U', 0x00, 'V', 0x00, // Property Name - "UVC-FSSensorGroupName"
'C', 0x00, '-', 0x00,
'F', 0x00, 'S', 0x00,
'S', 0x00, 'e', 0x00,
'n', 0x00, 's', 0x00,
'o', 0x00, 'r', 0x00,
'G', 0x00, 'r', 0x00,
'o', 0x00, 'u', 0x00,
'p', 0x00, 'N', 0x00,
'a', 0x00, 'm', 0x00,
'e', 0x00, 0x00, 0x00,
0x20, 0x00, // wPropertyDataLength – 0x20 (32) bytes
// FSSensorGroupName "YourCameraGroup"
'Y', 0x00, 'o', 0x00,
'u', 0x00, 'r', 0x00,
'C', 0x00, 'a', 0x00,
'm', 0x00, 'e', 0x00,
'r', 0x00, 'a', 0x00,
'G', 0x00, 'r', 0x00,
'o', 0x00, 'u', 0x00,
'p', 0x00, 0x00, 0x00,
/****************Enable Still Image Capture for Color Camera************/
/* Microsoft OS 2.0 Registry Value Feature Descriptor */
0x54, 0x00, // wLength 0x54 (84) in bytes of this descriptor
0x04, 0x00, // wDescriptorType – MSOS20_FEATURE_REG_PROPERTY
0x04, 0x00, // wPropertyDataType - REG_DWORD
0x46, 0x00, // wPropertyNameLength – 0x46 (70) bytes
'U', 0x00, 'V', 0x00, // Property Name - "UVC-EnableDependentStillPinCapture"
'C', 0x00, '-', 0x00,
'E', 0x00, 'n', 0x00,
'a', 0x00, 'b', 0x00,
'l', 0x00, 'e', 0x00,
'D', 0x00, 'e', 0x00,
'p', 0x00, 'e', 0x00,
'n', 0x00, 'd', 0x00,
'e', 0x00, 'n', 0x00,
't', 0x00, 'S', 0x00,
't', 0x00, 'i', 0x00,
'l', 0x00, 'l', 0x00,
'P', 0x00, 'i', 0x00,
'n', 0x00, 'C', 0x00,
'a', 0x00, 'p', 0x00,
't', 0x00, 'u', 0x00,
'r', 0x00, 'e', 0x00,
0x00, 0x00,
0x04, 0x00, // wPropertyDataLength – 4 bytes
0x01, 0x00, 0x00, 0x00, // Enable still pin capture using Method 2 or Method 3
/****************Enable Platform DMFT for ROI-capable USB Camera************/
/* Microsoft OS 2.0 Registry Value Feature Descriptor */
0x3C, 0x00, // wLength 0x3C (60) in bytes of this descriptor
0x04, 0x00, // wDescriptorType – MSOS20_FEATURE_REG_PROPERTY
0x04, 0x00, // wPropertyDataType - REG_DWORD
0x2E, 0x00, // wPropertyNameLength – 0x2E (46) bytes
'U', 0x00, 'V', 0x00, // Property Name - "UVC-EnablePlatformDmft"
'C', 0x00, '-', 0x00,
'E', 0x00, 'n', 0x00,
'a', 0x00, 'b', 0x00,
'l', 0x00, 'e', 0x00,
'P', 0x00, 'l', 0x00,
'a', 0x00, 't', 0x00,
'f', 0x00, 'o', 0x00,
'r', 0x00, 'm', 0x00,
'D', 0x00, 'm', 0x00,
'f', 0x00, 't', 0x00,
0x00, 0x00,
0x04, 0x00, // wPropertyDataLength – 4 bytes
0x01, 0x00, 0x00, 0x00, // Enable Platform DMFT
/****************IR Camera Function*********************************************/
/* Microsoft OS 2.0 Function Subset Header */
0x08, 0x00, // wLength of MSOS20_SUBSET_HEADER_FUNCTION
0x02, 0x00, // wDescriptorType == MSOS20_SUBSET_HEADER_FUNCTION
0x01, // bFirstInterface set of the second function
0x00, // bReserved set to 0.
0x48, 0x01, // wSubsetLength - Length 0x148 (328)
/********Register the IR Camera to the same sensor group as the Color Camera*****/
/* Microsoft OS 2.0 Registry Value Feature Descriptor */
0x80, 0x00, // wLength 0x80 (128) in bytes of this descriptor
0x04, 0x00, // wDescriptorType – MSOS20_FEATURE_REG_PROPERTY
0x01, 0x00, // wPropertyDataType - REG_SZ
0x28, 0x00, // wPropertyNameLength – 0x28 (40) bytes
'U', 0x00, 'V', 0x00, // Property Name - "UVC-FSSensorGroupID"
'C', 0x00, '-', 0x00,
'F', 0x00, 'S', 0x00,
'S', 0x00, 'e', 0x00,
'n', 0x00, 's', 0x00,
'o', 0x00, 'r', 0x00,
'G', 0x00, 'r', 0x00,
'o', 0x00, 'u', 0x00,
'p', 0x00, 'I', 0x00,
'D', 0x00, 0x00, 0x00,
0x4E, 0x00, // wPropertyDataLength – 78 bytes
// FSSensorGroupID GUID in string format:
// "{20C94C5C-F402-4F1F-B324-0C1CF0257870}"
'{', 0x00, '2', 0x00,
'0', 0x00, 'C', 0x00,
'9', 0x00, '4', 0x00,
'C', 0x00, '5', 0x00,
'C', 0x00, '-', 0x00,
'F', 0x00, '4', 0x00,
'0', 0x00, '2', 0x00,
'-', 0x00, '4', 0x00,
'F', 0x00, '1', 0x00,
'F', 0x00, '-', 0x00,
'B', 0x00, '3', 0x00,
'2', 0x00, '4', 0x00,
'-', 0x00, '0', 0x00,
'C', 0x00, '1', 0x00,
'C', 0x00, 'F', 0x00,
'0', 0x00, '2', 0x00,
'5', 0x00, '7', 0x00,
'8', 0x00, '7', 0x00,
'0', 0x00, '}', 0x00,
0x00, 0x00,
/* Microsoft OS 2.0 Registry Value Feature Descriptor */
0x56, 0x00, // wLength 0x56 (86) in bytes of this descriptor
0x04, 0x00, // wDescriptorType – MSOS20_FEATURE_REG_PROPERTY
0x01, 0x00, // wPropertyDataType - REG_SZ
0x2C, 0x00, // wPropertyNameLength – 0x2C (44) bytes
'U', 0x00, 'V', 0x00, // Property Name - "UVC-FSSensorGroupName"
'C', 0x00, '-', 0x00,
'F', 0x00, 'S', 0x00,
'S', 0x00, 'e', 0x00,
'n', 0x00, 's', 0x00,
'o', 0x00, 'r', 0x00,
'G', 0x00, 'r', 0x00,
'o', 0x00, 'u', 0x00,
'p', 0x00, 'N', 0x00,
'a', 0x00, 'm', 0x00,
'e', 0x00, 0x00, 0x00,
0x20, 0x00, // wPropertyDataLength – 32 bytes
// FSSensorGroupName "YourCameraGroup"
'Y', 0x00, 'o', 0x00,
'u', 0x00, 'r', 0x00,
'C', 0x00, 'a', 0x00,
'm', 0x00, 'e', 0x00,
'r', 0x00, 'a', 0x00,
'G', 0x00, 'r', 0x00,
'o', 0x00, 'u', 0x00,
'p', 0x00, 0x00, 0x00,
/****************Make IR camera visible to applications*********************/
/* Microsoft OS 2.0 Registry Value Feature Descriptor */
0x30, 0x00, // wLength 0x30 (48) in bytes of this descriptor
0x04, 0x00, // wDescriptorType – MSOS20_FEATURE_REG_PROPERTY
0x04, 0x00, // wPropertyDataType - REG_DWORD
0x22, 0x00, // wPropertyNameLength – 0x22 (34) bytes
'S', 0x00, 'e', 0x00,
'n', 0x00, 's', 0x00,
'o', 0x00, 'r', 0x00,
'C', 0x00, 'a', 0x00,
'm', 0x00, 'e', 0x00,
'r', 0x00, 'a', 0x00,
'M', 0x00, 'o', 0x00,
'd', 0x00, 'e', 0x00,
0x00, 0x00,
0x04, 0x00, // wPropertyDataLength – 4 bytes
0x01, 0x00, 0x00, 0x00, // This exposes the camera to OS as an IR only camera
// i.e. KSCATEGORY_SENSOR_CAMERA
/* Microsoft OS 2.0 Registry Value Feature Descriptor */
0x3A, 0x00, // wLength 0x3A (58) in bytes of this descriptor
0x04, 0x00, // wDescriptorType – MSOS20_FEATURE_REG_PROPERTY
0x04, 0x00, // wPropertyDataType - REG_DWORD
0x2C, 0x00, // wPropertyNameLength – 0x2C (44) bytes
'S', 0x00, 'k', 0x00,
'i', 0x00, 'p', 0x00,
'C', 0x00, 'a', 0x00,
'm', 0x00, 'e', 0x00,
'r', 0x00, 'a', 0x00,
'E', 0x00, 'n', 0x00,
'u', 0x00, 'm', 0x00,
'e', 0x00, 'r', 0x00,
'a', 0x00, 't', 0x00,
'i', 0x00, 'o', 0x00,
'n', 0x00, 0x00, 0x00,
0x04, 0x00, // wPropertyDataLength – 4 bytes
0x01, 0x00, 0x00, 0x00 // This exposes the camera to applications looking for IR only cameras
};