Bagikan melalui


Panduan implementasi DShow Bridge untuk perangkat UVC

Topik ini menyediakan panduan implementasi untuk mengonfigurasi DShow Bridge untuk kamera dan perangkat yang mematuhi spesifikasi USB Video Class (UVC). Platform ini menggunakan Microsoft OS Descriptors dari standar bus USB untuk mengonfigurasi DShow Bridge. Deskriptor OS Properti Yang Diperluas adalah ekstensi deskriptor standar USB dan digunakan oleh perangkat USB untuk mengembalikan properti perangkat khusus Windows yang tidak diaktifkan melalui spesifikasi standar.

Gambaran Umum

Tumpukan Microsoft Camera Capture terdiri dari tumpukan kerangka kerja warisan yang disebut DirectShow dan kerangka kerja modern yang disebut Multimedia Foundation. IHV dan OEM harus menulis komponen untuk perangkat mereka untuk memenuhi kedua alur.

DShow Bridge ditulis dengan maksud menjegal alur DShow dengan platform Media Foundation. Ini memungkinkan driver universal yang sebenarnya sehingga IHV dan OEM dapat menulis driver yang dapat berjalan dengan aplikasi MediaFoundation dan DShow pada Windows versi 1607 dan yang lebih baru. Dengan keikutsertaan DShow Bridge diaktifkan, aplikasi DShow dan aplikasi berbagi dapat berbagi perangkat keras kamera yang sama secara bersamaan.

IHV dan OEM mungkin memerlukan pengecualian dari kebijakan yang mengatur alur DShow. Mitra dapat mengaktifkan fitur berikut menggunakan Deskriptor OS:

  • Memilih masuk atau keluar dari DShow Bridge: Perangkat dapat memilih ikut atau keluar dari Bridge ke alur yang lebih sesuai dengan kebutuhan mereka. Alur modern lebih di dokumentasikan secara menyeluruh dan menggunakan fitur yang ditambahkan ke OS melalui beberapa rilis. Alur warisan, berada dalam mode pemeliharaan, tertinggal.

  • Dekompresi MJPEG di FrameServer: FrameServer adalah layanan yang memvirtualisasi perangkat kamera. Ini memungkinkan pin dari perangkat dibagikan antara beberapa klien. Arsitektur yang memiliki dekompresor Media Foundation yang dioptimalkan dapat menggunakan fitur ini untuk mendekode MJPEG di FrameServer. Format media terjemahan yang tidak dikompresi (YUY2) ditawarkan ke beberapa aplikasi. Aliran hanya didekompresi sekali untuk beberapa klien yang mungkin. Ini meningkatkan performa aplikasi. Diagram berikut menunjukkan alur pengambilan kamera:

alur pengambilan kamera.

OEM dan IHV yang mengemas perangkat kamera USB mereka dapat menggunakan spesifikasi Deskriptor Fitur OS Properti Diperluas standar bus USB untuk mengonfigurasi DShow Bridge tanpa menggunakan perubahan file INF untuk driver UVC mereka.

Deskriptor OS memungkinkan perangkat untuk menentukan properti registri untuk perangkat USB atau perangkat komposit.

Untuk mengonfigurasi DShow Bridges menggunakan Deskriptor OS USB, perangkat lunak host harus membuat kunci registri berikut untuk setiap antarmuka perangkat USB:

HKLM\SYSTEM\CurrentControlSet\Enum\USB\<DeviceVID&PID>\<DeviceInstance>\Device Parameters

DWORD: EnableDshowRedirection

Nilai registri EnableDshowRedirection adalah nilai masker bit yang dapat digunakan untuk mengonfigurasi DShow Bridge seperti yang dijelaskan oleh tabel di bawah ini.

Masker bit Deskripsi Keterangan
0x00000001 Memilih DShow Bridge 0 – Menolak
1 – Keikutsertaan
0x00000002 Aktifkan pendekodean MJPEG sekali di FrameServer (lihat catatan di bawah) 0 – Jenis media terkompresi MJPEG terekspos (tanpa operasi)
1 – Mengekspos jenis media yang tidak dikompresi yang diterjemahkan dari MJPEG (YUY2)

Catatan

Memungkinkan pendekodean MJPEG sekali di FrameServer dan kemudian format media terjemahan yang tidak dikompresi (YUY2) ditawarkan ke beberapa aplikasi. Aliran hanya didekompresi sekali untuk beberapa klien yang mungkin. Ini meningkatkan performa aplikasi.

Contoh Tata Letak

Contoh disertakan di bawah ini untuk spesifikasi berikut:

  • Spesifikasi deskriptor diperluas OS Microsoft 1.0

  • Spesifikasi deskriptor Microsoft OS 2.0

Spesifikasi deskriptor properti diperluas MICROSOFT OS versi 1.0

Deskriptor OS properti yang diperluas memiliki dua komponen

  • Bagian header panjang tetap

  • Satu atau beberapa bagian properti kustom panjang variabel, yang mengikuti bagian header

Bagian Header

Bagian header menjelaskan seluruh deskriptor properti yang diperluas, termasuk panjang total dan nomor versi.

Offset Bidang Ukuran (byte) Nilai Deskripsi
0 dwLength 4 0x0000004c 76 desimal
4 bcdVersion 2 0x0100 Versi 1.0
6 Windex 2 0x005 Deskriptor OS properti yang diperluas
8 wCount 2 0x0001 Satu properti kustom

Bagian Properti Kustom (deskriptor 1.0)

Deskriptor OS properti usb HID yang diperluas memiliki satu bagian properti kustom untuk membuat kunci registri DWORD EnableDshowRedirection .

Offset Bidang Ukuran (byte) Nilai
0 dwSize 4 0x00000042 (66 byte untuk properti ini)
4 dwPropertyDataType 4 0x00000004 (REG_DWORD_LITTLE_ENDIAN)
8 wPropertyNameLength 2 0x0030
10 bPropertyName 48 EnableDshowRedirection (string Unicode)
58 dwPropertyDataLength 4 0x00000004 (Sizeof(DWORD))
62 bPropertyData 4 0x00000001 (data DWORD)

Spesifikasi deskriptor Microsoft OS 2.0

Contoh ini menunjukkan bagaimana set deskriptor Microsoft 2.0 dapat digunakan untuk memberikan nilai registri DWORD tunggal dari EnableDshowRedirection yang berlaku untuk versi Windows.

Bagian Properti Kustom (deskriptor 2.0)

Offset Bidang Ukuran (byte) Nilai
0 wLength 2 Panjang dalam byte deskriptor ini
4 wDescriptorType 2 0x00000004 (REG_DWORD_LITTLE_ENDIAN)
8 wPropertyDataType 2 0x0030
wPropertyNameLength 2
10 PropertyName Variabel Panjang nama properti
58 dwPropertyDataLength 2 Panjang data properti
62 PropertyData Variabel Data properti
UCHAR Example2\_MSOS20DescriptorSetForFutureWindows\[0x48\] =
{
    //
    // Microsoft OS 2.0 Descriptor Set Header
    //
    0x0A, 0x00,                 // wLength - 12 bytes
    0x00, 0x00,                 // MSOS20_SET_HEADER_DESCRIPTOR
    0x00, 0x00, 0x0?, 0x06,     // dwWindowsVersion – 0x06030000 for future Windows version
    0x4A, 0x00,                 // wTotalLength – 72 bytes

    //
    // Microsoft OS 2.0 Registry Value Feature Descriptor
    //
    0x3E, 0x00,                 // wLength - 62 bytes
    0x04, 0x00,                 // wDescriptorType – 5 for Registry Property
    0x04, 0x00,                 // wPropertyDataType - 4 for REG_DWORD
    0x30, 0x00,                 // wPropertyNameLength – 48 bytes
    0x45, 0x00, 0x6E, 0x00,     // Property Name - "EnableDshowRedirection"
    0x61, 0x00, 0x62, 0x00,
    0x6C, 0x00, 0x65, 0x00,
    0x44, 0x00, 0x73, 0x00,
    0x68, 0x00, 0x6F, 0x00,
    0x77, 0x00, 0x52, 0x00,
    0x65, 0x00, 0x64, 0x00,
    0x69, 0x00, 0x72, 0x00,
    0x65, 0x00, 0x63, 0x00,
    0x74, 0x00, 0x69, 0x00,
    0x6F, 0x00, 0x6E, 0x00,
    0x00, 0x00, 0x00, 0x00,
    0x04, 0x00,                 // wPropertyDataLength – 4 bytes
    0x00, 0x00, 0x00, 0x00      // PropertyData – 0x00000003 (DShow Bridge is enabled and MJPEG is decoded in FrameServer)
}

Sumber

Deskriptor OS Microsoft untuk Perangkat USB

Driver Induk Generik USB (Usbccgp.sys)

Spesifikasi USB