Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Mulai dari Windows 10, driver bawaan USB Video Class (UVC) disediakan untuk perangkat yang sesuai dengan spesifikasi USB Video Class (versi 1.0 hingga 1.5). Driver ini mendukung kamera jenis warna dan sensor. Dokumen ini menguraikan cara mengekspos kemampuan tertentu kamera yang mematuhi UVC ke aplikasi melalui driver kotak masuk.
Terminologi
| Kata kunci | Deskripsi |
|---|---|
| UVC | Kelas Video USB |
| Driver UVC | USBVideo.sys driver yang dikirim dengan OS |
| IR | Inframerah |
| Kamera warna | Kamera yang mengeluarkan aliran warna (misalnya, kamera RGB atau YUV) |
| Kamera sensor | Kamera yang menghasilkan aliran non-warna (misalnya, IR atau kamera Kedalaman) |
| Bos | Penyimpanan Objek Perangkat Biner |
| Deskriptor MS OS 2.0 | Deskriptor kemampuan perangkat BOS khusus platform Microsoft |
Kamera sensor
Windows mendukung dua kategori kamera. Salah satunya adalah kamera warna dan yang lainnya adalah kamera sensor non-warna. Kamera RGB atau YUV dikategorikan sebagai kamera warna dan kamera non-warna seperti skala abu-abu, kamera IR dan Kedalaman dikategorikan sebagai kamera sensor. Driver UVC mendukung kedua jenis kamera. Kami merekomendasikan firmware kamera menentukan nilai berdasarkan mana driver UVC akan mendaftarkan kamera di bawah satu atau kedua kategori yang didukung.
Kamera yang mendukung jenis format warna saja harus didaftarkan di bawah KSCATEGORY_VIDEO_CAMERA. Kamera yang mendukung jenis format IR atau format hanya kedalaman harus diregistrasi sebagai bagian dari KSCATEGORY_SENSOR_CAMERA. Kamera yang mendukung jenis format warna dan non-warna harus didaftarkan di bawah KSCATEGORY_VIDEO_CAMERA dan KSCATEGORY_SENSOR_CAMERA. Kategorisasi ini membantu aplikasi memilih kamera yang ingin digunakan.
Kamera UVC dapat menentukan preferensi kategorinya melalui atribut SensorCameraMode dan SkipCameraEnumeration, sesuai dengan Deskriptor MS OS 2.0 BOS yang dirinci di bagian-bagian berikut.
Atribut SensorCameraMode mengambil nilai 1 atau 2.
Nilai 1 akan mendaftarkan perangkat di bawah KSCATEGORY_SENSOR_CAMERA. Selain itu, tentukan nilai 1 untuk SkipCameraEnumeration untuk membuat kamera tersedia untuk aplikasi yang hanya mencari kamera sensor. Kamera yang hanya mengekspos jenis media kamera sensor harus menggunakan nilai ini.
Nilai 2 untuk SensorCameraMode akan mendaftarkan perangkat di bawah KSCATEGORY_SENSOR_CAMERA &KSCATEGORY_VIDEO_CAMERA. Hal ini membuat kamera tersedia untuk aplikasi yang mencari sensor dan kamera warna. Kamera yang mengekspos kamera sensor dan jenis media kamera warna harus menggunakan nilai ini.
Kami sarankan Anda menentukan nilai registri yang disebutkan di atas menggunakan deskriptor BOS. Lihat bagian Contoh perangkat komposit di bawah ini untuk contoh deskriptor BOS dengan deskriptor MS OS 2.0 tertentu platform.
Jika Anda tidak dapat memperbarui firmware perangkat seperti yang dijelaskan di atas, Anda dapat menggunakan INF kustom dan menentukan bahwa kamera Anda perlu didaftarkan sebagai kamera sensor dengan menentukan nilai untuk SensorCameraMode dan SkipCameraEnumeration sebagai berikut:
File INF kustom (berdasarkan driver UVC bawaan) harus menyertakan entri-entri AddReg berikut:
SensorCameraMode: REG_DWORD: 1 (untuk mendaftar sebagai kamera sensor)
SkipCameraEnumeration: REG_DWORD: 1 (membuatnya hanya tersedia untuk aplikasi IR)
Contoh bagian INF kustom adalah sebagai berikut:
[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
Jika atribut SensorCameraMode dan SkipCameraEnumeration tidak ditentukan dalam firmware atau INF, kamera terdaftar sebagai kamera warna dan hanya akan terlihat oleh aplikasi sadar kamera warna.
Aliran IR
Driver kelas video USB kotak masuk Windows (UVC) mendukung kamera yang mengambil adegan dalam format YUV dan mengirimkan data piksel melalui USB sebagai YUV yang tidak dikompresi atau sebagai bingkai MJPEG terkompresi.
GUID jenis format berikut harus ditentukan dalam deskriptor format video streaming, seperti yang didefinisikan dalam file header WDK ksmedia.h:
| Tipe | Deskripsi |
|---|---|
| KSDATAFORMAT_SUBTYPE_L8_IR | Bidang luma 8-bit tidak dikompresi. Jenis ini memetakan ke MFVideoFormat_L8. |
| KSDATAFORMAT_SUBTYPE_L16_IR | Bidang luma 16-bit yang tidak dikompresi. Jenis ini memetakan ke MFVideoFormat_L16. |
| KSDATAFORMAT_SUBTYPE_MJPG_IR | Bingkai MJPEG terkompresi. Media Foundation mengonversi ini menjadi frame NV12 tanpa kompresi dan hanya menggunakan lapisan luma. |
Ketika GUID jenis format ini ditentukan di bidang guidFormat dari deskriptor bingkai, alur penangkapan Media Foundation menandai aliran sebagai aliran IR. Aplikasi yang ditulis dengan Media Foundation FrameReader API akan dapat menggunakan aliran IR. Tidak ada penskalaan atau konversi bingkai IR yang didukung oleh jalur pemrosesan untuk aliran IR.
Aliran yang mengekspos jenis format IR tidak boleh mengekspos jenis format RGB atau kedalaman.
// 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;
Nota
Aliran IR akan muncul sebagai aliran pengambilan reguler di DShow.
Aliran kedalaman
Driver Windows inbox USB Video Class mendukung kamera yang menghasilkan aliran Kedalaman. Kamera ini menangkap informasi kedalaman (Misalnya, waktu penerbangan) adegan dan mengirimkan peta kedalaman sebagai bingkai YUV yang tidak dikompresi melalui USB. GUID jenis format berikut harus ditentukan dalam deskriptor format video streaming, seperti yang didefinisikan dalam file header WDK ksmedia.h:
| Tipe | Deskripsi |
|---|---|
| KSDATAFORMAT_SUBTYPE_D16 | Nilai peta kedalaman 16-bit. Jenis ini identik dengan MFVideoFormat_D16. Nilainya dalam milimeter. |
Ketika jenis format GUID ditentukan dalam anggota guidFormat dari deskriptor bingkai, alur penangkapan Media Foundation menandai aliran sebagai aliran kedalaman. Aplikasi yang ditulis dengan FRAMEReader API akan dapat menggunakan aliran kedalaman. Pipeline tidak mendukung penskalaan atau konversi bingkai kedalaman untuk aliran kedalaman.
Aliran yang mengekspos jenis format Kedalaman tidak boleh mengekspos jenis format RGB atau IR.
// 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;
Nota
Aliran kedalaman muncul sebagai aliran pengambilan reguler di DShow.
Mengelompokkan kamera
Windows mendukung pengelompokan kamera berdasarkan ID kontainer mereka untuk membantu aplikasi bekerja dengan kamera terkait. Misalnya, kamera IR dan kamera Warna yang ada pada perangkat fisik yang sama dapat diekspos ke OS sebagai kamera terkait. Hal ini membuat aplikasi seperti Windows Hello menggunakan kamera terkait untuk skenarionya.
Hubungan antara fungsi kamera dapat ditentukan dalam deskriptor BOS kamera dalam firmware. Driver UVC akan menggunakan informasi ini untuk menampilkan fungsi kamera ini sebagai fungsi terkait. Ini membuat tumpukan kamera OS mengeksposnya sebagai grup kamera terkait ke aplikasi.
Firmware kamera harus menentukan UVC-FSSensorGroupID, yang merupakan GUID dalam bentuk string dengan tanda kurung keriting. Kamera yang memiliki UVC-FSSensorGroupID yang sama akan dikelompokkan bersama-sama.
Grup sensor dapat diberi nama dengan menentukan UVC-FSSensorGroupName, string Unicode, di firmware.
Lihat bagian Contoh perangkat komposit di bawah ini untuk contoh ilustrasi BOS yang menentukan UVC-FSSensorGroupID dan UVC-FSSensorGroupName.
Jika Anda tidak dapat memperbarui firmware perangkat seperti yang dijelaskan di atas, Anda dapat menggunakan INF kustom dan menentukan bahwa kamera Anda adalah bagian dari grup sensor dengan menentukan ID grup sensor dan nama sebagai berikut. File INF kustom (berdasarkan driver UVC kotak masuk) harus menyertakan entri AddReg berikut:
FSSensorGroupID: REG_SZ: "{ID grup sensor Anda GUID}"
FSSensorGroupName: REG_SZ: "nama ramah grup sensor Anda"
Contoh untuk bagian INF kustom adalah sebagai berikut:
[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%
Nota
Grup Sensor tidak didukung dalam jalur penangkapan DShow.
Metode 2 atau Metode 3 masih menangkap dukungan
Spesifikasi UVC memang menyediakan mekanisme untuk menentukan apakah antarmuka streaming video mendukung pengambilan gambar diam jenis Metode 1/2/3. Untuk membuat OS memanfaatkan dukungan pengambilan gambar diam metode 2/3 perangkat, melalui driver UVC, firmware perangkat dapat menentukan nilai dalam deskriptor BOS.
Nilai yang ditentukan untuk mengaktifkan Pengambilan gambar diam Metode 2/3 adalah DWORD bernama UVC-EnableDependentStillPinCapture. Tentukan nilainya menggunakan deskriptor BOS. Contoh perangkat komposit di bawah ini menggambarkan mengaktifkan pengambilan gambar diam dengan contoh deskriptor BOS.
Jika Anda tidak dapat memperbarui firmware perangkat seperti yang dijelaskan di atas, Anda dapat menggunakan INF kustom untuk menyatakan bahwa kamera Anda mendukung metode pengambilan gambar diam Metode 2 atau Metode 3.
File INF kustom (berdasarkan driver UVC kustom atau driver UVC bawaan) harus menyertakan entri AddReg berikut:
EnableDependentStillPinCapture: REG_DWORD: 0x0 (Dinonaktifkan) ke 0x1 (Diaktifkan)
Ketika entri ini diatur ke Diaktifkan (0x1), alur pengambilan memanfaatkan Metode 2/3 untuk pengambilan gambar diam (dengan asumsi firmware juga mengiklankan dukungan untuk Metode 2/3 seperti yang ditentukan oleh spesifikasi UVC).
Contoh untuk bagian INF kustom adalah sebagai berikut:
[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
Rantai MFT Perangkat
Device MFT adalah mekanisme plugin mode pengguna yang direkomendasikan untuk IHV dan OEM untuk memperluas fungsionalitas kamera di Windows.
Sebelum Windows 10, versi 1703, alur kamera hanya mendukung satu plugin ekstensi DMFT.
Dimulai pada Windows 10, versi 1703, alur kamera Windows mendukung rangkaian opsional DMFT dengan maksimal dua DMFT.
Mulai dari Windows 11, versi 22H2, alur kamera Windows mendukung rangkaian DMFT opsional dengan maksimum empat DMFT.
Ini memberikan fleksibilitas yang lebih besar bagi OEM dan IHV untuk memberikan nilai tambah dalam bentuk aliran kamera pasca pemrosesan. Misalnya, perangkat dapat menggunakan PDMFT bersama dengan IHV DMFT dan OEM DMFT.
Gambar berikut mengilustrasikan arsitektur yang melibatkan rantai DMFT.
Aliran sampel ditangkap dari driver kamera ke DevProxy, lalu melalui rantai DMFT. Setiap DMFT dalam rantai memiliki kesempatan untuk memproses sampel. Jika DMFT tidak ingin memproses sampel, DMFT dapat bertindak sebagai perantara dengan hanya meneruskan sampel ke DMFT berikutnya.
Untuk kontrol seperti KsProperty, panggilan berjalan di hulu - DMFT terakhir dalam rantai mendapatkan panggilan terlebih dahulu, panggilan dapat ditangani di sana atau diteruskan ke DMFT sebelumnya dalam rantai.
Kesalahan disebarluaskan dari DMFT ke DTM kemudian ke aplikasi. Untuk DMFTs IHV/OEM, jika salah satu DMFT gagal diinstansiasi, itu akan merupakan kesalahan fatal untuk DTM.
Persyaratan mengenai DMFTs:
Jumlah pin input DMFT harus cocok dengan jumlah pin output DMFT sebelumnya, jika tidak, DTM akan gagal selama inisialisasi. Namun, jumlah pin input dan output dari DMFT yang sama tidak perlu cocok.
DMFT perlu mendukung antarmuka - IMFDeviceTransform, IMFShutdown, IMFRealTimeClientEx, IKsControl dan IMFMediaEventGenerator; IMFTransform mungkin perlu didukung jika ada MFT0 yang dikonfigurasi atau DMFT berikutnya dalam rantai memerlukan dukungan IMFTransform.
Pada sistem 64-bit yang tidak menggunakan Frame Server, DMFTs 32-bit dan 64-bit perlu didaftarkan. Mengingat bahwa kamera USB mungkin dicolokkan ke dalam sistem acak, untuk kamera USB "eksternal" (atau di luar kotak masuk), vendor kamera USB harus menyediakan DMFT 32-bit dan 64-bit.
Mengonfigurasi rantai DMFT
Perangkat kamera dapat secara opsional menyediakan objek DMFT COM di DLL menggunakan file INF kustom yang menggunakan bagian kotak masuk USBVideo.INF.
Dalam bagian "Interface AddReg" dari file .INF kustom, tentukan CLSID DMFT dengan memasukkan entri registri berikut:
CameraDeviceMftCLSIDChain (REG_MULTI_SZ) %Dmft0.CLSID%,%Dmft.CLSID%,%Dmft2.CLSID%
Seperti yang ditunjukkan pada contoh pengaturan INF di bawah ini (ganti% %Dmft0.CLSID dan % Dmft1.CLSID% dengan string CLSID aktual yang Anda gunakan untuk DMFTs Anda), ada maksimum 2 CLSID yang diizinkan di Windows 10, versi 1703, dan yang pertama paling dekat dengan DevProxy dan yang terakhir adalah DMFT terakhir dalam rantai.
Platform DMFT CLSID adalah {3D096DDE-8971-4AD5-98F9-C74F56492630}.
Beberapa contoh pengaturan CameraDeviceMftCLSIDChain :
Tidak ada DMFT IHV/OEM atau Platform DMFT
- CameraDeviceMftCLSIDChain = "" (atau tidak perlu menentukan entri registri ini)
IHV/OEM DMFT
- CameraDeviceMftCLSIDChain = %Dmft.CLSID%
Platform DMFT <-> IHV/OEM DMFT
CameraDeviceMftCLSIDChain = "{3D096DDE-8971-4AD5-98F9-C74F56492630}",%Dmft.CLSID%
Berikut adalah tangkapan layar dari kunci registri hasil untuk kamera USB dengan Platform DMFT dan DMFT (dengan GUID {D671BE6C-FDB8-424F-81D7-03F5B1CE2CC7}) dalam rantai.
IHV/OEM DMFT0 <-> IHV/OEM DMFT1
- CameraDeviceMftCLSIDChain = %Dmft0.CLSID%,%Dmft1.CLSID%,
Nota
CameraDeviceMftCLSIDChain dapat memiliki maksimum 2 CLSID.
Jika CameraDeviceMftCLSIDChain sudah dikonfigurasi, pengaturan CameraDeviceMftCLSID lama dilewati oleh DTM.
Jika CameraDeviceMftCLSIDChain tidak dikonfigurasi dan CameraDeviceMftCLSID lama dikonfigurasi, maka rantai akan terlihat seperti ini: (jika kamera adalah USB yang didukung oleh Platform DMFT dan Platform DMFT diaktifkan) DevProxy <–> Platform DMFT <–> OEM/IHV DMFT atau (jika kamera tidak didukung oleh Platform DMFT atau Platform DMFT dimatikan) DevProxy <-> OEM/IHV DMFT.
Contoh pengaturan file INF:
[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%
MFT Perangkat Platform
Dimulai pada Windows 10, versi 1703, Windows menyediakan Device MFT bawaan untuk kamera UVC yang dikenal sebagai Platform DMFT (PDMFT) berdasarkan opsi ikut serta. DMFT ini memungkinkan IHV dan OEM untuk memanfaatkan algoritma pasca pemrosesan yang disediakan Windows.
| Fitur yang didukung oleh Platform DMFT | Rilis Windows |
|---|---|
| Memungkinkan pengaturan Daerah Ketertarikan (ROI) berbasis wajah untuk penyesuaian 3A pada kamera USB yang mendukung ROI. | Windows 10, versi 1703 |
Nota
Jika kamera tidak mendukung ROI berbasis UVC 1.5, maka PDMFT tidak akan memuat meskipun perangkat telah memilih untuk mengaktifkan PDMFT.
Kamera UVC dapat memilih untuk menggunakan DMFT platform dengan menentukan EnablePlatformDmft melalui deskriptor BOS.
Nilai yang ditentukan untuk mengaktifkan Platform DMFT adalah DWORD dengan nama UVC-EnablePlatformDmft dan menentukan nilainya menggunakan deskriptor BOS. Bagian Contoh perangkat komposit di bawah ini mengilustrasikan mengaktifkan Platform DMFT dengan contoh deskriptor BOS.
Jika Anda tidak dapat memperbarui firmware perangkat seperti yang dijelaskan di atas, Anda dapat menggunakan file INF kustom untuk mengaktifkan Platform DMFT untuk perangkat.
File INF kustom (berdasarkan driver UVC kustom atau driver UVC bawaan) harus menyertakan entri AddReg berikut:
EnablePlatformDmft: REG_DWORD: 0x0 (Dinonaktifkan) ke 0x1 (Diaktifkan)
Ketika entri ini diatur ke Diaktifkan (0x1), alur pengambilan menggunakan DMFT Platform kotak masuk untuk perangkat. Berikut ini memperlihatkan contoh bagian INF kustom ini:
[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
Di Windows 10, versi 1703, jika perangkat memilih untuk menggunakan PDMFT maka semua fitur yang didukung oleh PDMFT diaktifkan (berdasarkan kemampuan perangkat). Konfigurasi terperinci fitur PDMFT tidak didukung.
Nota
Koordinat ROI berbasis wajah dihitung relatif terhadap bidang tampilan gambar yang ditransmisikan ke PDMFT. Jika bidang tampilan telah dimodifikasi karena penggunaan kontrol seperti Zoom, Pan atau Kemiringan atau Jendela Digital, kamera bertanggung jawab untuk memetakan koordinat yang disediakan kembali ke bidang pandang lengkap sensor, mengingat jendela zoom/pan saat ini.
Profil Otentikasi Wajah melalui Deskriptor MS OS
Windows 10 RS5 sekarang memberlakukan persyaratan Face Auth Profile V2 untuk kamera apa pun dengan dukungan Windows Hello. Untuk sistem berbasis MIPI dengan tumpukan driver kamera kustom, dukungan ini dapat diterbitkan baik melalui INF (atau Extension INF) atau melalui plug-in mode pengguna (Device MFT).
Namun, untuk perangkat USB Video, batasan dengan kamera berbasis UVC adalah bahwa untuk Windows 10 19H1, driver kamera kustom tidak diizinkan. Semua kamera berbasis UVC harus menggunakan driver Kelas Video USB bawaan dan ekstensi vendor apa pun harus diimplementasikan dalam bentuk Perangkat MFT.
Untuk banyak OEM/ODM, pendekatan yang disukai untuk modul kamera adalah mengimplementasikan banyak fungsionalitas dalam firmware modul, yaitu melalui Deskriptor OS Microsoft.
Kamera berikut didukung untuk menerbitkan Profil Face Auth melalui Deskriptor MSOS (juga disebut deskriptor BOS):
Hanya kamera RGB yang akan digunakan dalam Grup Sensor bersama dengan kamera IR terpisah.
Kamera IR hanya digunakan dalam Grup Sensor dengan kamera RGB yang terpisah.
Kamera RGB+IR dengan pin IR dan RGB terpisah.
Nota
Jika firmware kamera tidak dapat memenuhi salah satu dari tiga persyaratan yang dijelaskan di atas, ODM/OEM harus menggunakan INF Ekstensi untuk mendeklarasikan Profil Kamera V2.
Contoh Tata Letak Penerang OS Microsoft
Contoh disertakan di bawah ini untuk spesifikasi berikut:
Spesifikasi deskriptor diperluas Microsoft OS 1.0
Spesifikasi deskriptor Microsoft OS 2.0
Spesifikasi Microsoft OS Extended Descriptor 1.0
Deskriptor OS properti yang diperluas memiliki dua komponen
- Bagian header berpanjang tetap
- Satu atau beberapa bagian properti kustom yang memiliki panjang variabel, yang mengikuti bagian header
Bagian Header Deskriptor Microsoft OS 1.0
Bagian Header menjelaskan satu properti kustom (Profil Face Auth).
| Offset | Bidang | Ukuran (byte) | Nilai | Deskripsi |
|---|---|---|---|---|
| 0 | dwLength | 4 | <> | |
| 4 | bcdVersion | 2 | 0x0100 | Versi 1.0 |
| 6 | wIndex | 2 | 0x0005 | Deskriptor properti OS yang diperluas |
| 8 | wCount | 2 | 0x0001 | Satu properti khusus |
Bagian Properti Kustom Deskripsi Microsoft OS 1.0
| Offset | Bidang | Ukuran (byte) | Nilai | Deskripsi |
|---|---|---|---|---|
| 0 | dwSize | 4 | 0x00000036 (54) | Ukuran total (dalam byte) untuk properti ini. |
| 4 | dwPropertyDataType | 4 | 0x00000004 | REG_DWORD_LITTLE_ENDIAN |
| 8 | wPropertyNameLength | 2 | 0x00000024 (36) | Ukuran (dalam byte) dari nama properti. |
| 10 | bPropertyName | 36 | UVC-CPV2FaceAuth | String "UVC-CPV2FaceAuth" di Unicode. |
| 46 | dwPropertyDataLength | 4 | 0x00000004 | 4 byte untuk data properti (sizeof(DWORD)). |
| 50 | bPropertyData | 4 | Lihat Skema Data Di Bawah Ini | Lihat Skema data di bawah ini. |
Skema Payload
Payload data UVC-CPV2FaceAuth adalah bilangan bulat 32-bit yang tidak ditandatangani. Urutan tinggi 16-bit mewakili indeks berbasis 0 dari daftar jenis media yang diekspos oleh pin RGB. Urutan rendah 16-bit mewakili indeks berbasis 0 dari daftar jenis media yang diekspos oleh pin IR.
Misalnya, Kamera Tipe 3 yang mengekspos jenis media berikut, dalam urutan yang dideklarasikan dari pin RGB:
YUY2, 640x480@30fps
MJPG, 1280x720@30fps
MJPG, 800x600@30fps
MJPG, 1920x1080@30fps
Dan jenis media berikut untuk IR:
L8, 480x480@30fps
L8, 480x480@15fps
L8, 480x480@10fps
Nilai payload 0x00010000 akan mengakibatkan Profil Face Auth berikut diterbitkan:
Pin0:(RES==1280,720; FRT==30,1; SUT==MJPG) // Jenis media kedua (0x0001)
Pin1:(RES==480,480; FRT==30,1; SUT==L8) // Jenis media pertama (0x0000)
Nota
Pada saat penulisan ini, Windows Hello memiliki persyaratan minimum 480x480@7,5fps untuk aliran RGB dan 340x340@15fps untuk aliran IR. IHV/OEM harus memilih jenis media yang memenuhi persyaratan ini ketika mengaktifkan Profil Autentikasi Wajah.
Sampel Kamera Tipe 1
Untuk Kamera Tipe 1, karena tidak ada pin IR (dengan harapan bahwa Kamera Tipe 1 akan dipasangkan ke Kamera Tipe 2 pada mesin dalam Grup Sensor), hanya indeks jenis media RGB yang diterbitkan. Untuk indeks jenis media IR, nilai payload 16-bit pesanan rendah harus diatur ke 0xFFFF.
Misalnya, jika Kamera Tipe 1 mengekspos daftar jenis media berikut:
YUY2, 640x480@30fps
MJPG, 1280x720@30fps
MJPG, 800x600@30fps
MJPG, 1920x1080@30fps
Untuk menerbitkan CPV2FaceAuth menggunakan jenis media MJPG dengan resolusi 1280x720 pada 30fps, payload harus diatur ke 0x0001FFFF.
Sampel Kamera Tipe 2
Untuk Kamera Tipe 2, urutan tinggi 16-bit harus diatur ke 0xFFFF, dengan urutan rendah 16-bit yang menunjukkan jenis media IR yang akan digunakan.
Misalnya, untuk Kamera Tipe 2 dengan jenis media berikut:
L8, 480x480@30fps
L8, 480x480@15fps
L8, 480x480@10fps
Jika jenis media pertama digunakan untuk Face Auth, nilainya harus: 0xFFFF0000.
Spesifikasi Microsoft OS Extended Descriptor 2.0
MSOS Extended Descriptor 2.0 dapat digunakan untuk menentukan nilai registri untuk menambahkan dukungan Profil Face Auth. Ini dilakukan menggunakan Deskriptor Properti Registri Microsoft OS 2.0.
Untuk entri registri UVC-CPV2FaceAuth, berikut ini menunjukkan contoh set deskriptor MSOS 2.0:
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)
}
Saat entri registri UVC-CPV2FaceAuth ditambahkan, perangkat tidak perlu menerbitkan entri registri EnableDshowRedirection seperti yang dijelaskan dalam panduan implementasi DShow Bridge untuk perangkat UVC.
Namun, jika vendor perangkat harus mendukung versi Windows yang lebih lama dan/atau perlu mengaktifkan dekompresi MJPEG dalam Frame Server, entri registri EnableDshowRedirection harus ditambahkan.
Pembuatan Grup Sensor
Ketika OEM membangun sistem menggunakan Kamera Tipe 1 dan Tipe 2 untuk menyediakan aliran RGB dan IR untuk dukungan Windows Hello, OEM harus menyatakan kedua kamera tersebut sebagai bagian dari Grup Sensor yang disintesis.
Ini dilakukan dengan mendeklarasikan tag FSSensorGroupId dan FSSensorGroupName dalam Extension INF yang akan dibuat di bawah properti antarmuka perangkat untuk setiap kamera.
Namun, jika Extension INF tidak disediakan, ODM dapat menggunakan Deskriptor MSOS yang sama untuk menerbitkan nilai FSSensorGroupId dan FSSensorGroupName. Driver USB Video Class bawaan Windows 10 akan secara otomatis mengambil Deskriptor MSOS yang Nama Payload-nya diawali dengan "UVC-" dan memigrasikan tag ke penyimpanan properti antarmuka perangkat (menghapus awalan "UVC-").
Jadi Kamera Tipe 1 dan Tipe 2 yang menerbitkan hal berikut akan memungkinkan OS untuk mensintesis kamera ke dalam Grup Sensor multi-perangkat untuk digunakan dengan Windows Hello:
UVC-FSSensorGroupId
UVC-FSSensorGroupName
Payload untuk setiap tag harus berupa Untai (Karakter) Unicode. Payload UVC-FSSensorGroupId harus berupa string GUID dalam format berikut:
{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}
Nilai GUID harus sama antara Kamera Tipe 1 dan Tipe 2 dan kedua kamera harus ditambahkan ke sasis fisik yang sama. Untuk kamera bawaan, sasis fisik adalah komputer itu sendiri. Untuk kamera eksternal, modul Kamera Tipe 1 dan Tipe 2 harus dibangun ke dalam perangkat fisik yang sama yang terhubung ke komputer.
Kategori Antarmuka Perangkat Kustom untuk Grup Sensor
Mulai 19H1, Windows menyediakan mekanisme ekstensi yang ditentukan IHV/OEM untuk memungkinkan penerbitan Grup Sensor yang disintesis ke dalam kategori kustom atau yang telah ditentukan sebelumnya. Pembuatan Grup Sensor didefinisikan oleh IHV/OEM yang menyediakan kunci ID Grup Sensor di INF kustom:
FSSensorGroupId: {Custom GUID}
FSSensorGroupName: <Nama ramah yang digunakan untuk Grup Sensor>
Selain dua entri AddReg di atas dalam INF, entri AddReg baru didefinisikan untuk kategori kustom:
FSSensorGroupCategoryList: {GUID}; {GUID};...; {GUID}
Beberapa kategori didefinisikan menggunakan daftar GUID yang dipisahkan dengan titik koma (;).
Setiap perangkat yang menyatakan FSSensorGroupId yang cocok harus mendeklarasikan FSSensorGroupCategoryList yang sama. Jika daftar tidak cocok, semua daftar diabaikan dan Grup Sensor diterbitkan secara default ke dalam KSCATEGORY_SENSOR_GROUP seolah-olah tidak ada kategori kustom yang ditentukan.
Rotasi Kamera
Lihat Orientasi Perangkat Kamera
Cache Kontrol UVC
Lihat Cache Kontrol UVC
Deskriptor BOS dan MS OS 2.0
Kamera yang mematuhi UVC dapat menentukan nilai konfigurasi perangkat tertentu Windows dalam deskriptor BOS kemampuan platform di firmware-nya menggunakan Deskriptor Microsoft OS 2.0. Lihat dokumentasi tentang deskriptor MS OS 2.0 untuk memahami cara menentukan deskriptor BOS yang valid yang menyampaikan konfigurasi perangkat ke OS.
Header Set Deskriptor Microsoft OS 2.0
| Offset | Bidang | Ukuran (byte) | Deskripsi |
|---|---|---|---|
| 0 | wLength | 2 | Panjang dalam byte header ini, harus 10. |
| 2 | wDescriptorType | 2 | MSOS20_SET_HEADER_DESCRIPTOR |
| 4 | dwWindowsVersion | 4 | Versi Windows. |
| 8 | wTotalLength | 2 | Ukuran seluruh set deskriptor MS OS 2.0 termasuk ukuran header ini. |
Deskriptor Properti Registri Microsoft OS 2.0
| Offset | Bidang | Ukuran (byte) | Deskripsi |
|---|---|---|---|
| 0 | wLength | 2 | Panjang dalam byte dari deskriptor ini |
| 2 | wDescriptorType | 2 | MS_OS_20_FEATURE_REG_PROPERTY |
| 4 | wPropertyDataType | 2 | 0x04 (REG_DWORD_LITTLE_ENDIAN) |
| 6 | wPropertyNameLength | 2 | Panjang nama properti. |
| 8 | Nama Properti | Variabel | Nama properti registri. |
| 8+M | wPropertyDataLength | 2 | Panjang data properti. |
| 10+ juta | PropertyData | Variabel | Data Properti |
Ketika deskriptor MS OS 2.0 yang valid ditentukan dalam firmware, tumpukan USB menyalin nilai konfigurasi ke dalam kunci registri HW perangkat yang ditunjukkan di bawah ini:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB\<Device ID>\<Instance ID>\Device Parameters
Driver UVC membaca nilai konfigurasi dari kunci registri HW perangkat dan mengonfigurasi perangkat pada OS yang sesuai. Misalnya, jika firmware menentukan perangkat yang akan didaftarkan sebagai kamera sensor menggunakan nilai konfigurasi, driver UVC mendaftarkan perangkat tepat di bawah kategori tersebut.
Mengonfigurasi perangkat UVC melalui deskriptor BOS platform adalah mekanisme yang diaktifkan di Windows 10, versi 1703 untuk membantu vendor perangkat UVC mengonfigurasi perangkat tanpa memerlukan file INF pada OS Windows.
Mengonfigurasi perangkat UVC melalui INF kustom masih didukung dan yang lebih diutamakan daripada mekanisme berbasis deskriptor BOS. Saat menentukan properti perangkat melalui INF, Anda tidak perlu menambahkan awalan "UVC-". Awalan ini hanya diperlukan untuk properti perangkat yang ditentukan melalui deskriptor BOS dan yang spesifik per instans antarmuka. Jika perangkat Anda memerlukan plugin mode pengguna seperti DMFT, maka Anda perlu menyediakan INF untuk menginstal DMFT. Ini tidak dapat dikonfigurasi menggunakan firmware.
Nilai konfigurasi yang saat ini didukung melalui deskriptor BOS
| Nama konfigurasi | Tipe | Deskripsi |
|---|---|---|
| SensorCameraMode | REG_DWORD | Daftarkan kamera di bawah kategori tertentu. |
| UVC-FSSensorGroupID, UVC-FSSensorGroupName | REG_SZ | ** Kelompokkan kamera dengan UVC-FSSensorGroupID yang sama |
| UVC-EnableDependentStillPinCapture | REG_DWORD | Untuk mengaktifkan pengambilan gambar diam metode ke-2/3 |
| UVC-EnablePlatformDmft | REG_DWORD | Untuk mengaktifkan Platform DMFT |
Ketika driver UVC melihat nilai registri dengan awalan "UVC-", driver UVC mengisi kunci registri instans antarmuka kategori perangkat, dengan nilai yang sama tanpa awalan. Driver melakukan ini untuk variabel apa pun yang ditentukan oleh firmware, bukan hanya yang tercantum di atas.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceClasses\{e5323777-f976-4f5b-9b55-b94699c46e44}\<Device Symbolic Link>\Device Parameters
Agar OS dapat menggunakan Kemampuan Perangkat Platform BOS dan deskriptor MS OS 2.0, deskriptor perangkat harus menentukan versi bcdUSB agar 0x0210 atau lebih besar.
Contoh perangkat komposit
Bagian ini menyediakan deskriptor BOS dan deskriptor MS OS 2.0 untuk contoh perangkat komposit dengan dua fungsi kamera. Salah satu fungsinya adalah kamera warna UVC dan fungsi kedua adalah kamera IR UVC.
Contoh deskriptor adalah sebagai berikut:
Daftarkan fungsi kamera warna di bawah KSCATEGORY_VIDEO_CAMERA
Daftarkan fungsi kamera IR di bawah KSCATEGORY_SENSOR_CAMERA
Aktifkan tangkapan gambar diam fungsi kamera warna
Mengaitkan warna dan fungsi kamera IR sebagai grup
Setelah enumerasi perangkat, tumpukan USB mengambil deskriptor BOS dari perangkat. Kemampuan perangkat khusus platform mengikuti deskriptor BOS.
#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
};
Deskriptor kemampuan platform BOS menentukan:
Deskriptor MS OS 2.0 kemampuan platform GUID
Kode kontrol vendor bMS_VendorCode (di sini disetel ke 1. Kode ini dapat diatur ke nilai apa pun sesuai preferensi vendor) untuk mengambil deskriptor MS OS 2.0.
Deskriptor BOS ini berlaku untuk OS versi Windows 10 dan yang lebih baru.
Setelah melihat deskriptor BOS, stack USB akan menghasilkan permintaan kontrol khusus vendor untuk mengambil deskriptor MS OS 2.0.
Format permintaan kontrol untuk mengambil deskriptor khusus vendor MS OS 2.0:
| bmRequestType | BRequest | wValue | WIndex | wLength | Data Informasi |
|---|---|---|---|---|---|
| 1100 0000B | bMS_VendorCode | 0x00 | 0x07 | Panjang | Blob Sekumpulan Deskriptor MS OS 2.0 yang telah dikembalikan |
bmRequestType
Arah Transfer Data – Perangkat ke Host
Jenis – Vendor
Penerima - Perangkat
bRequest
Nilai bMS_VendorCode yang dikembalikan dalam struktur informasi set deskriptor.
wValue
Atur ke 0x00.
wIndex
0x7 untuk MS_OS_20_DESCRIPTOR_INDEX.
wLength
Panjang set deskriptor MS OS 2.0, sebagaimana yang dikembalikan dalam deskriptor BOS. 0x25C (604) dalam contoh ini.
Perangkat diharapkan mengembalikan deskriptor MS OS 2.0 seperti yang ditentukan dalam USBVideoMSOS20DescriptorSet.
USBVideoMSOS20DescriptorSet menjelaskan warna dan fungsi IR. Ini menentukan nilai Deskriptor MS OS 2.0 berikut:
Tetapkan Header
Subset Header Konfigurasi
Fungsi Subset Kamera Warna - Header
Deskriptor Fitur Nilai Registri untuk ID grup sensor
Deskriptor Fitur Nilai Registri untuk nama grup sensor
Deskriptor Fitur Nilai Registri untuk memungkinkan pengambilan gambar diam
Deskriptor Fitur Nilai Registri untuk mengaktifkan Platform DMFT
Fungsi Subset Kamera IR Header
Deskriptor Fitur Nilai Registri untuk ID grup sensor
Deskriptor Fitur Nilai Registri untuk nama grup sensor
Deskriptor Fitur Nilai Registri untuk mendaftarkan kamera sebagai kamera sensor
Firmware akan memiliki handler untuk permintaan vendor yang akan mengembalikan deskriptor MS OS 2.0 berikut untuk perangkat imajiner yang dijelaskan di awal bagian ini.
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
};