Bagikan melalui


Ekstensi Microsoft untuk spesifikasi USB Video Class 1.5

1 Ringkasan

1.1 Ringkasan

Ekstensi Microsoft ke spesifikasi USB Video Class memungkinkan kontrol baru dan kemampuan untuk membawa metadata bingkai yang ditentukan dengan baik dalam format standar.

1.2 Keputusan Arsitektur

Dukungan metadata bingkai USB Video Class (UVC) tersedia untuk titik akhir ISOCH dan BULK. Namun, dalam kasus titik akhir MASSAL, ukuran metadata dibatasi hingga 240 byte (karena semua data bingkai video ditransfer dalam satu paket bingkai video pada titik akhir MASSAL).

Dukungan metadata UVC hanya tersedia untuk muatan berbasis bingkai.

Dukungan metadata UVC hanya tersedia melalui alur pengambilan Media Foundation (MF).

Metadata UVC adalah keikutsertaan. Setiap IHV/OEM yang membutuhkan dukungan metadata harus diaktifkan melalui file INF kustom.

Metadata UVC hanya mendukung memori yang dialokasikan sistem. Permukaan VRAM atau DX tidak akan didukung.

2 Gambaran Umum Arsitektur

2.1 Deskripsi

2.2.1 Penemuan kemampuan melalui INF

2.2.1.1 Penangkapan Gambar Masih – Metode 2

Beberapa perangkat UVC yang ada mungkin tidak mendukung Metode 2 yang dijelaskan dalam bagian 2.4.2.4 (Still Image Capture) dari specification.pdf Kelas UVC 1.5 yang dapat diunduh di situs web spesifikasi Usb Video Class.

Di Windows 10, versi 1607 dan yang lebih lama, alur pengambilan tidak menggunakan Metode 2, bahkan jika perangkat mengiklankan dukungan untuk itu sesuai spesifikasi UVC 1.5.

Di Windows 10, versi 1703, perangkat yang menggunakan metode ini harus menggunakan file INF kustom untuk driver kamera, tetapi INF kustom diperlukan untuk perangkat keras yang diberikan untuk mengaktifkan pengambilan gambar diam Metode 2).

Catatan: Driver kamera dapat didasarkan pada Windows USBVIDEO.SYS atau dapat didasarkan pada biner driver kustom.

File INF kustom, berdasarkan driver UVC kustom atau driver UVC kotak masuk, harus menyertakan entri AddReg berikut:

EnableDependentStillPinCapture: REG_DWORD: 0x0 (Dinonaktifkan) ke 0x1 (Diaktifkan)

Ketika entri ini diatur ke Diaktifkan (0x1), alur pengambilan menggunakan Metode 2 untuk Still Image Capture (dengan asumsi firmware juga mengiklankan dukungan untuk Metode 2 seperti yang ditentukan oleh spesifikasi UVC 1.5).

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

2.2.2 Kontrol Unit Ekstensi

Ekstensi Microsoft ke spesifikasi USB Video Class untuk mengaktifkan kontrol baru dilakukan melalui unit ekstensi yang diidentifikasi oleh GUID MS_CAMERA_CONTROL_XU (disebut sebagai Microsoft-XU).

// {0F3F95DC-2632-4C4E-92C9-A04782F43BC8}
DEFINE_GUID(MS_CAMERA_CONTROL_XU,
    0xf3f95dc, 0x2632, 0x4c4e, 0x92, 0xc9, 0xa0, 0x47, 0x82, 0xf4, 0x3b, 0xc8);

Microsoft-XU yang diterapkan oleh firmware perangkat menampung kontrol baru yang ditentukan dalam sub bagian berikut. Definisi permintaan berikut berlaku untuk semua kontrol ini kecuali definisi penimpaan ditentukan secara eksplisit untuk kontrol tersebut. Lihat specification.pdf Kelas UVC 1.5 untuk definisi D3, D4, GET_INFO, dan sebagainya.

permintaan GET_INFO harus melaporkan kontrol tanpa kemampuan AutoUpdate dan Asinkron (misalnya, bit D3 dan D4 harus diatur ke 0).

permintaan GET_LEN harus melaporkan panjang maksimum payload untuk kontrol ini (wLength).

GET_RES permintaan harus melaporkan resolusi (ukuran langkah) untuk qwValue/dwValue. Semua bidang lainnya akan diatur ke 0.

permintaan GET_MIN harus melaporkan nilai minimum yang didukung untuk qwValue/dwValue. Semua bidang lainnya akan diatur ke 0.

GET_MAX permintaan harus melaporkan nilai maksimum yang didukung untuk qwValue/dwValue. Selain itu, semua bendera yang didukung harus diatur ke 1 di bmControlFlags. Semua bidang lainnya akan diatur ke 0.

GET_DEF dan permintaan GET_CUR harus melaporkan pengaturan default dan saat ini masing-masing untuk bidang qwValue/dwValue dan bmControlFlags. Semua bidang lainnya akan diatur ke 0.

Permintaan SET_CUR dikeluarkan oleh host setelah mengatur semua bidang.

Tabel berikut memetakan pemilih kontrol untuk Microsoft-XU ke nilai masing-masing dan posisi bit untuk bidang bmControls di Deskriptor Unit Ekstensi:

Pemilih Kontrol Nilai Posisi Bit
(Bidang bmControls)
MSXU_CONTROL_UNDEFINED 0x00 NA
MSXU_CONTROL_FOCUS 0x01 D0
MSXU_CONTROL_EXPOSURE 0x02 D1
MSXU_CONTROL_EVCOMPENSATION 0x03 D2
MSXU_CONTROL_WHITEBALANCE 0x04 D3
Disiapkan untuk penggunaan di masa mendatang 0x05 D4
MSXU_CONTROL_FACE_AUTHENTICATION 0x06 D5
MSXU_CONTROL_CAMERA_EXTRINSICS 0x07 D6
MSXU_CONTROL_CAMERA_INTRINSICS 0x08 D7
MSXU_CONTROL_METADATA 0x09 D8
MSXU_CONTROL_IR_TORCH 0x0A D9
MSXU_CONTROL_DIGITALWINDOW 0X0B D10
MSXU_CONTROL_DIGITALWINDOW_CONFIG 0X0C D11
MSXU_CONTROL_VIDEO_HDR 0X0D D12
MSXU_CONTROL_FRAMERATE_THROTTLE 0x0E D13
MSXU_CONTROL_FIELDOFVIEW2_CONFIG 0x0F D14
MSXU_CONTROL_FIELDOFVIEW2 0x10 D15
2.2.2.1 Kontrol yang Dapat Dibatalkan

Kontrol yang dapat dibatalkan didefinisikan di sini dengan menggunakan kemampuan Pembaruan otomatis.

permintaan GET_INFO harus melaporkan kontrol seperti Kontrol Pembaruan Otomatis (misalnya, bit D3 harus diatur ke 1) tetapi bukan sebagai kontrol Asinkron (misalnya, D4 bit harus diatur ke 0).

Untuk kontrol tersebut, permintaan SET_CUR dapat dikeluarkan untuk menetapkan permintaan nilai baru (SET_CUR(NORMAL) di mana bit bmOperationFlags:D0 diatur ke 0) atau membatalkan permintaan SET_CUR(NORMAL) sebelumnya (SET_CUR(BATAL) di mana bmOperationFlags:D0 bit diatur ke 1). Permintaan SET_CUR harus segera diselesaikan oleh perangkat segera setelah permintaan diterima (meskipun perangkat keras tidak dikonfigurasi atau dikonvergasikan ke pengaturan baru yang diminta). Untuk setiap permintaan SET_CUR(NORMAL), perangkat menghasilkan gangguan Perubahan Kontrol yang sesuai untuk kontrol ini yang dinaikkan ketika pengaturan baru telah diterapkan atau ketika permintaan SET_CUR(BATAL) tiba; hingga interupsi ini tiba, permintaan SET_CUR(NORMAL) dianggap sedang berlangsung. Ketika permintaan SET_CUR(NORMAL) sedang berlangsung, permintaan SET_CUR(NORMAL) tambahan untuk kontrol khusus ini akan mengakibatkan kegagalan. Permintaan SET_CUR(BATAL) akan selalu berhasil. Jika tidak ada yang perlu dibatalkan, maka perangkat tidak melakukan apa pun.

Payload interupsi Perubahan Kontrol harus memiliki bit bmOperationFlags:D0 diatur ke 0 jika pengaturan yang ditentukan oleh SET_CUR(NORMAL) diterapkan (misalnya, konvergensi terjadi) dan diatur ke 1 jika pengaturan tidak diterapkan karena permintaan SET_CUR(BATAL) yang muncul setelah permintaan SET_CUR (NORMAL) (misalnya, konvergensi belum terjadi).

2.2.2.2 Kontrol Fokus

Kontrol ini memungkinkan perangkat lunak host menentukan pengaturan fokus untuk kamera. Ini adalah kontrol global yang memengaruhi semua titik akhir pada semua antarmuka streaming video yang terkait dengan antarmuka kontrol video.

kontrol fokus.

Kontrol ini akan berfungsi sebagai Kontrol yang Dapat Dibatalkan (lihat bagian 2.2.2.1 untuk persyaratan permintaan GET_INFO dan perilaku fungsional permintaan SET_CUR).

persyaratan GET_MAX: Kontrol ini akan mengiklankan dukungan untuk bit D0, D1, D2, D8, dan D18 di bmControlFlags.

persyaratan GET_DEF: Default untuk bmControlFlags adalah D0 dan D18 diatur ke 1 dan dwValue diatur ke 0.

Untuk permintaan GET_CUR/SET_CUR, pembatasan berikut berlaku untuk bidang bmControlFlags:

  • Di antara bit D0, D1 dan D8, hanya satu bit yang dapat diatur; tidak satu pun dari mereka yang diatur juga valid jika D2 bit diatur.

  • Di antara D16, D17, D18, D19, dan D20, hanya satu bit yang dapat diatur, tidak ada yang diatur juga valid.

  • D1 tidak kompatibel dengan semua bit lain yang saat ini ditentukan (D0, D2, D8, D16, D17, D18, D19, dan D20).

  • D2 tidak kompatibel dengan D1 dan D8.

  • D2 tidak kompatibel dengan D16, D17, D18, D19, dan D20 jika D0 tidak diatur.

2.2.2.3 Kontrol Paparan

Kontrol ini memungkinkan perangkat lunak host menentukan pengaturan paparan untuk kamera. Ini adalah kontrol global yang memengaruhi semua titik akhir pada semua antarmuka streaming video yang terkait dengan antarmuka kontrol video.

kontrol paparan.

GET_INFO permintaan harus melaporkan kontrol ini sebagai kontrol Asinkron (misalnya, D4 bit harus diatur ke 1) tetapi bukan sebagai kontrol AutoUpdate (misalnya, bit D3 harus diatur ke 0).

persyaratan GET_MAX: Kontrol ini akan mengiklankan dukungan untuk bit D0, D1, dan D2 di bmControlFlags.

persyaratan GET_DEF: Default untuk bmControlFlags adalah D0 diatur ke 1 dan qwValue diatur ke 0.

Untuk permintaan GET_CUR/SET_CUR, pembatasan berikut berlaku untuk bidang bmControlFlags:

  • Di antara bit D0, D1 dan D2, setidaknya satu bit harus diatur.
  • D1 tidak kompatibel dengan D0 dan D2.
2.2.2.4 Kontrol Kompensasi EV

Kontrol ini memungkinkan perangkat lunak host menentukan pengaturan kompensasi EV untuk kamera. Ini adalah kontrol global yang memengaruhi semua titik akhir pada semua antarmuka streaming video yang terkait dengan antarmuka kontrol video.

Kontrol kompensasi E V.

GET_INFO permintaan harus melaporkan kontrol ini sebagai kontrol Asinkron (misalnya, D4 bit harus diatur ke 1) tetapi bukan sebagai kontrol AutoUpdate (misalnya, bit D3 harus diatur ke 0).

GET_RES permintaan harus melaporkan semua resolusi yang didukung (ukuran langkah) dengan mengatur bit yang sesuai di bmControlFlags. Semua bidang lainnya akan diatur ke 0.

permintaan GET_MIN dan GET_MAX harus melaporkan nilai minimum dan maksimum yang didukung untuk dwValue. Bit D4 (menunjukkan ukuran langkah 1) adalah satu-satunya bit yang diatur dalam bmControlFlags. Semua bidang lainnya akan diatur ke 0.

GET_DEF, GET_CUR, permintaan SET_CUR harus mengikuti definisi dalam pasal 2.2.2.1 tetapi harus memiliki satu dan hanya satu bit yang ditetapkan di antara D0, D1, D2, D3, dan D4 bit untuk bidang bmControlFlags. Selain itu, permintaan GET_DEF harus memiliki dwValue yang diatur ke 0.

2.2.2.5 Kontrol Keseimbangan Putih

Kontrol ini memungkinkan perangkat lunak host menentukan pengaturan keseimbangan putih untuk kamera. Ini adalah kontrol global yang memengaruhi semua titik akhir pada semua antarmuka streaming video yang terkait dengan antarmuka kontrol video.

kontrol keseimbangan putih.

GET_INFO permintaan harus melaporkan kontrol ini sebagai kontrol Asinkron (misalnya, D4 bit harus diatur ke 1) tetapi bukan sebagai kontrol AutoUpdate (misalnya, bit D3 harus diatur ke 0).

GET_RES, GET_MIN, permintaan GET_MAX harus mengikuti definisi dalam pasal 2.2.2.1 tetapi harus memiliki dwValueFormat yang diatur ke 1.

persyaratan GET_MAX: Kontrol ini akan mengiklankan dukungan untuk bit D0, D1, dan D2 di bmControlFlags.

persyaratan GET_DEF: Default untuk bmControlFlags harus D0 diatur ke 1 dan dwValueFormat dan dwValue diatur ke 0.

Untuk permintaan GET_CUR/SET_CUR, pembatasan berikut berlaku untuk bidang bmControlFlags:

  • Di antara bit D0, D1 dan D2, setidaknya satu bit harus diatur.
  • D1 tidak kompatibel dengan D0 dan D2.
2.2.2.6 Kontrol Autentikasi Wajah

Kontrol ini memungkinkan perangkat lunak host untuk menentukan apakah kamera mendukung mode streaming yang digunakan untuk autentikasi wajah. Dukungan untuk kontrol ini menyiratkan bahwa kamera mampu melakukan autentikasi wajah. Kontrol ini tidak akan didukung jika tidak.

Kontrol ini hanya berlaku untuk kamera yang dapat menghasilkan data Infra-Red (IR) dan hanya berlaku untuk antarmuka streaming yang ditentukan (yang merupakan subset dari semua antarmuka streaming video yang terkait dengan antarmuka kontrol video).

kontrol autentikasi wajah.

permintaan GET_RES dan GET_MIN harus melaporkan bidang bNumEntries yang diatur ke 0 dan karenanya tidak memiliki bidang tambahan.

Untuk permintaan GET_MAX, bit diatur ke 1 pada bidang bmControlFlags menunjukkan bahwa mode yang sesuai didukung untuk antarmuka streaming tersebut. Output permintaan GET_MAX harus mencantumkan semua dan hanya antarmuka streaming yang mampu D1 atau D2 (misalnya, jika antarmuka streaming mampu D1 atau D2, antarmuka tersebut akan tercantum; jika tidak, antarmuka streaming tidak terdaftar). Selain itu, tidak ada antarmuka streaming yang akan diiklankan untuk dapat menggunakan D1 dan D2. Jika antarmuka streaming juga ditujukan untuk digunakan secara umum (misalnya, di luar tujuan autentikasi wajah), maka D0 harus diatur ke 1 untuk antarmuka streaming tersebut (selain D1/D2).

Untuk permintaan GET_DEF / GET_CUR / SET_CUR, sedikit diatur ke 1 pada bidang bmControlFlags menunjukkan bahwa mode yang sesuai dipilih untuk antarmuka streaming tersebut. Dalam permintaan ini, satu dan hanya satu bit (di antara D0, D1 & D2) harus diatur untuk antarmuka streaming tertentu. Untuk permintaan GET_DEF yang mengembalikan pilihan default (yang spesifik implementasi), jika antarmuka streaming juga dimaksudkan untuk digunakan dengan cara tujuan umum (misalnya, di luar tujuan autentikasi wajah), maka D0 akan diatur ke 1 secara default pada antarmuka streaming tersebut; jika tidak, baik D1 atau D2 (tetapi tidak keduanya) harus diatur ke 1 secara default. Output permintaan GET_DEF / GET_CUR harus berisi informasi tentang semua antarmuka streaming yang tercantum dalam output permintaan GET_MAX, namun, permintaan SET_CUR hanya dapat menyertakan subset antarmuka streaming yang tercantum dalam output permintaan GET_MAX.

Contoh:

Mari kita asumsikan bahwa kamera memiliki empat antarmuka streaming video dengan angka 0x03, 0x05, 0x08, dan 0x0b masing-masing di mana antarmuka streaming video 0x05 menghasilkan data RGB dan tiga antarmuka streaming video yang tersisa menghasilkan data runtime integrasi. Di antara antarmuka streaming yang menghasilkan data IR, mari kita asumsikan antarmuka streaming 0x03 dan 0x0b keduanya mampu D1, tetapi antarmuka streaming 0x03 juga mampu D0. Dalam contoh ini, kontrol autentikasi wajah hanya berlaku untuk antarmuka streaming bernomor 0x03 dan 0x0b dan karenanya hanya antarmuka ini yang muncul dalam permintaan.

Output untuk permintaan GET_MAX adalah sebagai berikut:

GET_MAX autentikasi wajah.

Output untuk permintaan GET_DEF adalah sebagai berikut:

GET_DEF autentikasi wajah.

Permintaan SET_CUR untuk mengubah pengaturan pada antarmuka streaming 0x03 ke D1 adalah sebagai berikut:

SET_CUR autentikasi wajah.

Output untuk permintaan GET_CUR setelah permintaan SET_CUR di atas adalah sebagai berikut:

GET_CUR autentikasi wajah.

2.2.2.7 Kamera Kontrol Ekstrinsik

Kontrol ini memungkinkan perangkat lunak host untuk mendapatkan data ekstrinsik kamera untuk titik akhir pada antarmuka streaming video yang terkait dengan antarmuka kontrol video. Data yang diperoleh untuk setiap titik akhir muncul sebagai atribut MFStreamExtension_Kamera Extrinsics pada penyimpanan atribut untuk aliran yang sesuai (diperoleh menggunakan PANGGILAN IMFDeviceTransform::GetOutputStreamAttributes).

kontrol ekstrinsik kamera.

GET_RES, GET_MIN, GET_MAX, permintaan GET_CUR harus melaporkan bidang bNumEntries yang diatur ke 0 dan karenanya tidak memiliki bidang tambahan.

permintaan GET_DEF harus mencantumkan semua titik akhir yang memiliki informasi ekstrinsik yang tersedia.

Contoh:

Mari kita asumsikan bahwa kamera memiliki tiga antarmuka streaming video dengan angka 0x03, 0x05, dan 0x08 masing-masing di mana antarmuka streaming video 0x05 mendukung pengambilan gambar diam menggunakan metode 2 selain pengambilan video yang didukung oleh semua antarmuka streaming video. Di antara antarmuka streaming ini, mari kita asumsikan antarmuka streaming 0x05 dan 0x08 memiliki informasi ekstrinsik yang tersedia sementara antarmuka streaming 0x03 tidak memiliki informasi ekstrinsik yang tersedia.

Dalam contoh ini, output untuk permintaan GET_DEF adalah sebagai berikut:

GET_DEF ekstrinsik kamera.

2.2.2.8 Kamera Kontrol Intrinsik

Kontrol ini memungkinkan perangkat lunak host untuk mendapatkan data intrinsik kamera untuk titik akhir pada antarmuka streaming video yang terkait dengan antarmuka kontrol video. Data yang diperoleh untuk setiap titik akhir muncul sebagai atribut MFStreamExtension_Pinhole Kamera Intrinsics pada penyimpanan atribut untuk aliran yang sesuai (diperoleh menggunakan panggilan IMFDeviceTransform::GetOutputStreamAttributes).

kontrol intrinsik kamera.

GET_RES, GET_MIN, GET_MAX, permintaan GET_CUR harus melaporkan bidang bNumEntries yang diatur ke 0 dan karenanya tidak memiliki bidang tambahan.

permintaan GET_DEF harus mencantumkan semua titik akhir yang memiliki informasi intrinsik yang tersedia.

Contoh:

Mari kita asumsikan bahwa kamera memiliki tiga antarmuka streaming video dengan angka 0x03, 0x05, dan 0x08 masing-masing di mana antarmuka streaming video 0x05 mendukung pengambilan gambar diam menggunakan metode 2 selain pengambilan video yang didukung oleh semua antarmuka streaming video. Di antara antarmuka streaming ini, mari kita asumsikan antarmuka streaming 0x05 dan 0x08 memiliki informasi intrinsik yang tersedia sementara antarmuka streaming 0x03 tidak memiliki informasi intrinsik yang tersedia.

Dalam contoh ini, output untuk permintaan GET_DEF adalah sebagai berikut:

intrinsik kamera GET_DEF.

2.2.2.9 Kontrol Metadata

Kontrol ini memungkinkan perangkat lunak host untuk mengkueri dan mengontrol metadata yang dihasilkan oleh kamera. Ini adalah kontrol global yang memengaruhi semua titik akhir pada semua antarmuka streaming video yang terkait dengan antarmuka kontrol video.

Kontrol ini akan dipetakan ke KSPROPERTY_CAMERACONTROL_EXTENDED_METADATA oleh driver kamera.

kontrol metadata.

Jika permintaan SET_CUR didukung oleh firmware, hal berikut berlaku:

  • GET_MIN, permintaan GET_DEF harus melaporkan bidang dwValue diatur ke 0.

  • permintaan GET_RES harus melaporkan bidang dwValue menjadi nilai yang sama seperti yang dilaporkan oleh permintaan GET_MAX.

  • Ketika permintaan SET_CUR diterima dengan dwValue diatur ke 0, kamera tidak akan menghasilkan metadata apa pun. Ketika permintaan SET_CUR diterima dengan dwValue diatur menjadi nilai yang sama seperti yang dilaporkan oleh permintaan GET_MAX, kamera dapat menghasilkan metadata dan ukuran metadata tersebut tidak dapat melebihi dwValue untuk bingkai apa pun.

Jika permintaan SET_CUR tidak didukung oleh firmware, hal berikut berlaku:

  • GET_MIN, permintaan GET_DEF harus melaporkan bidang dwValue menjadi nilai yang sama seperti yang dilaporkan oleh permintaan GET_MAX.

  • permintaan GET_RES harus melaporkan bidang dwValue diatur ke 0.

  • Kamera dapat menghasilkan metadata dan ukuran total metadata tersebut tidak dapat melebihi dwValue - seperti yang dilaporkan oleh permintaan GET_MAX - kali 1024 byte kurang ukuran payload metadata UsbVideoHeader , untuk bingkai apa pun.

  • Payload metadata UsbVideoHeader adalah sizeof(KSCAMERA_METADATA_ITEMHEADER) + sizeof(KSTREAM_UVC_METADATA) atau 24 byte.

Metadata yang dihasilkan harus sesuai dengan metadata format standar Microsoft yang dijelaskan dalam bagian 2.2.3.

2.2.2.10 IR Torch Control

Kontrol ini menyediakan cara yang fleksibel bagi perangkat keras IR LED untuk melaporkan sejauh mana ia dapat dikontrol dan menyediakan kemampuan untuk mengontrolnya. Ini adalah kontrol global yang memengaruhi semua titik akhir pada semua antarmuka streaming video yang terkait dengan antarmuka kontrol video dengan menyesuaikan daya ke lampu IR yang terhubung ke kamera.

Kontrol ini akan dipetakan ke KSPROPERTY_CAMERACONTROL_EXTENDED_IRTORCHMODE oleh driver kamera.

Kontrol obor I R.

Berikut ini berlaku:

  • permintaan GET_LEN akan melaporkan nilai 8.

  • permintaan GET_INFO akan melaporkan nilai 3. Nilai ini menunjukkan kontrol sinkron yang mendukung GET_CUR dan SET_CUR.

  • permintaan GET_MIN harus melaporkan bidang dwMode yang diatur ke 0 dan dwValue diatur ke nilai yang menunjukkan daya minimum. Tingkat daya 0 dapat menunjukkan NONAKTIF, tetapi tingkat daya operasional minimum tidak perlu 0.

  • permintaan GET_RES harus melaporkan bidang dwMode yang diatur ke 0 dan dwValue diatur ke angka yang kurang dari atau sama dengan GET_MAX(dwValue) – GET_MIN(dwValue) dan sedih sehingga GET_MAX(dwValue) – GET_MIN(dwValue) dapat dibagi secara merata oleh nilai tersebut. dwValue mungkin bukan nol (0).

  • permintaan GET_MAX harus melaporkan bidang dwMode yang diatur dengan bit D[0-2] yang diatur untuk mengidentifikasi kemampuan kontrol ini. dwMode harus memiliki set bit D0, yang menunjukkan bahwa OFF didukung, dan harus memiliki setidaknya satu set bit lainnya, mendukung status aktif. dwValue harus diatur ke nilai yang menunjukkan daya normal.

  • GET_DEF permintaan harus melaporkan bidang dwMode yang diatur ke mode default yang harus dilakukan sistem sebelum streaming dimulai. dwMode harus diatur ke 2 (AKTIF) atau 4 (BERGANTIAN). dwValue harus diatur ke tingkat daya yang biasanya digunakan untuk kontrol FaceAuth. dwValue didefinisikan oleh produsen.

  • permintaan GET_CUR harus melaporkan bidang dwMode yang diatur ke mode operasi saat ini dan dwValue diatur ke iluminasi saat ini.

  • Ketika permintaan SET_CUR diterima, IR Torch mengatur iluminasi ke intensitas prorat menggunakan mode operasi yang diminta.

Obor IR harus memancarkan atribut MF_CAPTURE_METADATA_FRAME_ILLUMINATION untuk setiap bingkai. Ini dapat menyediakan ini melalui MFT Perangkat atau dengan menyertakan atribut MetadataId_FrameIllumination dalam payload metadata dari kamera. Lihat bagian 2.2.3.4.4.

Tujuan tunggal metadata ini adalah untuk menunjukkan apakah bingkai diterangi atau tidak. Ini adalah metadata yang sama yang diperlukan oleh DDI KSPROPERTY_CAMERACONTROL_EXTENDED_FACEAUTH_MODE dan MSXU_FACE_AUTHENTICATION_CONTROL yang ditentukan dalam bagian 2.2.2.6.

2.2.2.11 Kontrol Jendela Digital

Jendela Digital menentukan bidang tampilan dan perbesar tampilan kamera saat kamera sedang streaming. Kontrol ini adalah pengganti potensial untuk Pan, Tilt, dan Zoom. Kontrol ini hanya berlaku saat kamera secara aktif melakukan streaming.

Kontrol ini tersedia untuk semua jenis kamera dan tidak bergantung pada jenis media yang sedang dialirkan.

Kontrol ini memungkinkan perangkat lunak host untuk mengkueri dan mengontrol jendela digital yang terkait dengan kamera.

Ini adalah kontrol global yang memengaruhi semua titik akhir pada semua antarmuka streaming video yang terkait dengan antarmuka kontrol video. Ini menyesuaikan sumber data piksel yang digunakan oleh ISP. Ini termasuk Metode 2 dan Metode 3 masih menangkap pin.

Kontrol ini dipetakan ke KSPROPERTY_CAMERACONTROL_EXTENDED_DIGITALWINDOW oleh driver kamera kotak masuk.

kontrol jendela digital.

Berikut ini berlaku:

  • permintaan GET_LEN akan melaporkan nilai 16.

  • permintaan GET_INFO akan melaporkan nilai 3. Nilai ini menunjukkan kontrol sinkron yang mendukung GET_CUR dan SET_CUR.

  • permintaan GET_MIN harus melaporkan bidang dwMode yang diatur ke 0, OriginX dan OriginY diatur ke 0,0 dan WindowSize diatur ke 1.0. Permintaan ini saat ini tidak digunakan.

  • permintaan GET_RES harus melaporkan bidang dwMode yang diatur ke 0, OriginX dan OriginY diatur ke 0,0 dan WindowSize diatur ke 1.0. Permintaan ini saat ini tidak digunakan.

  • permintaan GET_MAX harus melaporkan bidang dwMode yang diatur dengan bit D0 diatur untuk mengidentifikasi kemampuan kontrol ini. Nilai 0 menunjukkan bahwa hanya mode manual yang didukung. Nilai 1 menunjukkan bahwa mode pembingkaian wajah otomatis didukung. Bidang lainnya tidak digunakan, namun, kami merekomendasikan OriginX dan OriginY diatur ke 0,0 dan WindowSize diatur ke 1.0.

  • permintaan GET_DEF harus melaporkan bidang dwMode yang diatur ke 0, OriginX dan OriginY diatur ke 0,0 dan WindowSize diatur ke 1.0. Ini selalu merupakan jendela default.

  • permintaan GET_CUR harus melaporkan bidang dwMode yang diatur ke mode operasi saat ini dan OriginX, OriginY , dan WindowSize menjelaskan jendela digital saat ini.

  • Saat permintaan SET_CUR diterima, kamera menyesuaikan bidang tampilannya agar sesuai dengan mode operasi dan jendela digital yang dipilih.

  • Jika mode pembingkaian wajah otomatis dipilih, kamera memilih jendela yang sepenuhnya mencakup wajah dominasi di adegan dan OriginX, OriginY, dan WindowSize yang diteruskan akan diabaikan. Jika tidak ada wajah yang ditemukan, jendela default akan digunakan.

  • Setiap perubahan pada jendela digital harus tercermin dalam setiap payload metadata sampel.

  • Perubahan pada jendela digital mungkin tidak segera efektif, tetapi kontrol harus segera merespons. Perubahan pada jendela digital harus dilaporkan dalam payload metadata bingkai segera setelah diterapkan.

2.2.2.12 Kontrol Konfigurasi Jendela Digital

Kontrol Batas Konfigurasi Jendela Digital menentukan batas penskalaan kamera yang diberikan semua resolusi yang tersedia. Resolusi tidak bergantung pada jenis media, sehingga dua jenis media yang mengiklankan resolusi tampilan yang sama digabungkan menjadi satu kemampuan.

Karena batasan ukuran titik akhir kontrol, kontrol ini dapat menjelaskan paling banyak 1820 resolusi unik.

Kontrol ini harus selalu tersedia untuk melaporkan kemampuan kontrol Jendela Digital jika kontrol tersebut juga ada.

Kontrol ini dipetakan ke KSPROPERTY_CAMERACONTROL_EXTENDED_DIGITALWINDOW_CONFIGCAPS oleh driver kamera kotak masuk.

kontrol konfigurasi jendela digital.

Berikut ini berlaku:

  • permintaan GET_LEN harus melaporkan seluruh ukuran payload. Ukuran payload harus kelipatan 36 karena masing-masing definisi resolusi panjangnya adalah 36 byte.

  • permintaan GET_INFO akan melaporkan 1. Nilai ini menunjukkan kontrol sinkron yang hanya mendukung GET_CUR.

  • permintaan GET_CUR harus melaporkan array kemampuan. Bidang struktur kemampuan ditentukan di atas.

  • permintaan GET_MIN, GET_MAX, GET_RES, dan GET_DEF tidak digunakan, tetapi harus mengembalikan nilai yang sama seperti GET_CUR.

  • permintaan SET_CUR tidak didukung.

2.2.2.13 Kontrol HDR Video

Kontrol ini memungkinkan perangkat lunak host untuk menentukan apakah kamera mendukung Video HDR. Dukungan untuk kontrol ini menyiratkan bahwa kamera mampu melakukan HDR video sebagai upaya terbaik. Jika kamera tidak mendukung Video HDR, kamera tidak boleh menerapkan kontrol ini.

Kontrol ini akan dipetakan ke KSPROPERTY_CAMERACONTROL_EXTENDED_VIDEOHDR oleh driver kamera.

kontrol H D R video.

Berikut ini berlaku:

  • GET_LEN permintaan harus melaporkan seluruh ukuran payload (misalnya, 4 byte).

  • permintaan GET_INFO akan melaporkan nilai 3. Nilai ini menunjukkan kontrol sinkron yang mendukung GET_CUR, SET_CUR.

  • permintaan GET_CUR harus melaporkan bidang dwMode yang diatur ke mode operasi saat ini.

  • GET_DEF harus memiliki dwMode yang diatur ke NONAKTIF (0).

  • permintaan GET_MAX harus mengiklankan dukungan untuk mode operasi yang tersedia: [1 (ON/OFF), 3 (ON/OFF/Auto)]. Dukungan untuk ON (1) wajib untuk kontrol ini.

  • permintaan GET_MIN dan GET_RES akan melaporkan 0.

  • permintaan SET_CUR harus mengatur mode ke OFF (0), ON (1), atau AUTO (2).

2.2.2.14 Kontrol Pembatasan Framerate

Kontrol ini memungkinkan perangkat lunak host untuk menentukan apakah kamera mendukung pembatasan Framerate.

Kontrol ini hanya berlaku saat kamera secara aktif melakukan streaming. Untuk streaming secara aktif berarti pratinjau atau pin rekaman harus dalam KSSTATE_RUN, siap, dan dapat mengirimkan bingkai. Pada set jika aliran tidak aktif, kontrol ini harus mengembalikan STATUS_INVALID_DEVICE_STATE.

Bahkan jika ini adalah kontrol cakupan filter, kontrol kecepatan bingkai seharusnya tidak memengaruhi pin foto atau aliran tanpa RGB seperti IR/kedalaman. Selain itu, ketika pembatasan kecepatan bingkai berlaku, durasi sampel juga harus disesuaikan.

Kontrol ini akan dipetakan ke KSPROPERTY_CAMERACONTROL_EXTENDED_FRAMERATE_THROTTLE oleh driver kamera.

Pemilih kontrol MSXU_CONTROL_FRAMERATE_THROTTLE
Permintaan Wajib GET_INFO, GET_LEN, GET_RES, GET_MIN, GET_MAX, GET_DEF, GET_CUR, SET_CUR
Permintaan Opsional
wLength 20
Offset Bidang Ukuran Nilai Deskripsi
0 dwMode 4 Bendera D0: 0 (NONAKTIF) atau 1 (AKTIF)
D1-D31: dicadangkan dan diatur ke 0
4 scaleFactorPercentage 4 Angka Nilai ini harus berada dalam rentang Min dan Max, dan harus diatur ke kelipatan nilai Langkah. Misalnya: jika Min = 5, Maks = 100 dan Langkah = 5 dan jika aplikasi memutuskan untuk mengurangi kecepatan bingkai menjadi 80% dari nilai asli, maka nilai anggota ini harus diatur ke 80. Dengan mengatur nilai ini dengan tepat, aplikasi dapat memastikan bahwa kecepatan bingkai baru tidak pernah melebihi nilai asli, atau masuk ke nol, tetapi kecepatan bingkai asli dimungkinkan.
8 min 4 Angka Min harus sama dengan ukuran satu langkah yang disewakan atau harus kelipatan ukuran langkah, (Contoh: langkah1, Langkah2 dll.). Nilai min tidak dapat diatur ke 0.
12 max 4 Angka Maks harus diatur ke 100, yang berarti tidak ada perubahan kecepatan bingkai.
16 Langkah 4 Angka Langkah harus menjadi faktor ketat Max, misalnya, {Max % Step == 0}. Contoh: 1, 2, 4, 5 dll.

Berikut ini berlaku:

  • permintaan GET_LEN harus melaporkan seluruh ukuran payload (misalnya, 20 byte). 

  • permintaan GET_INFO akan melaporkan nilai 3. Nilai ini menunjukkan kontrol sinkron yang mendukung GET_CUR, SET_CUR. 

  • permintaan GET_CUR harus melaporkan bidang dwMode yang diatur ke mode operasi saat ini dan scaleFactorPercentage diatur ke nilai scaleFactor saat ini. Min, maks, dan langkah harus melaporkan nilai seperti yang dijelaskan dalam tabel di atas.

  • GET_DEF harus memiliki dwMode yang diatur ke OFF(0), scaleFactorPercentage=100, Min diatur ke nilai minimum default, maks diatur ke 100 dan, langkah diatur ke nilai langkah default. Nilai min dan langkah harus ditentukan oleh produsen, tetapi harus mengikuti pedoman yang disebutkan dalam tabel di atas.

  • GET_ permintaan MAX harus mengiklankan dukungan untuk mode operasi yang tersedia dan akan melaporkan nilai 1 [ AKTIF | NONAKTIF ]. Dukungan untuk ON dan OFF wajib untuk kontrol ini. Min, max, step, dan scaleFactorPercentage dapat diatur ke nilai default.

  • permintaan GET_MIN dan GET_RES akan melaporkan 0. 

  • SET_CUR permintaan harus mengatur mode ke OFF(0), ON(1). Jika dwMode diatur ke AKTIF, maka scaleFactorPercentage akan berlaku. Untuk kasus OFF dan ON, scaleFactorPercentage harus valid seperti yang dijelaskan dalam tabel di atas.

2.2.2.15 Bidang Kontrol Konfigurasi Tampilan 2

Kontrol Bidang Konfigurasi Tampilan 2 menentukan nilai Bidang diagonal tampilan derajat yang didukung sebagai array nilai. Semua nilai yang didukung harus dalam rentang min teoritis dan maks, 1 derajat - 360 derajat.

Jika perangkat ingin mendukung nilai Bidang Tampilan berkelanjutan, perangkat perlu melaporkan semua nilai yang didukung. Misalnya, jika perangkat ingin mendukung Bidang Tampilan diagonal dari 85 derajat - 60 derajat dengan ukuran langkah 1, kontrol ini perlu melaporkan array nilai [85, 84, 83, 82, ..., 62, 61, 60].

Kontrol ini harus tersedia untuk melaporkan kemampuan ketika kontrol Bidang Tampilan 2 ada.

Ini adalah kontrol tingkat filter sinkron.

Kontrol ini dipetakan ke KSPROPERTY_CAMERACONTROL_EXTENDED_ FIELDOFVIEW2_CONFIGCAPS oleh driver kamera.

Pemilih kontrol MSXU_CONTROL_FIELDOFVIEW2_CONFIG
Permintaan Wajib GET_INFO, GET_LEN, GET_RES, GET_MIN, GET_MAX, GET_DEF, GET_CUR
Permintaan Opsional
wLength 4 byte + Hitung kali 4 byte, di mana Hitungan adalah jumlah nilai Bidang Tampilan yang unik.
Offset Bidang Ukuran Nilai Deskripsi
0 dwDefaultFieldOfView 4 Angka Bidang tampilan diagonal default harus salah satu nilai yang dilaporkan dalam array FieldOfViewValues.
4 FieldOfViewValues[0] 4 Angka Nilai Bidang Tampilan Pertama, ini harus menjadi nilai FoV (Bidang Tampilan) terluas.
4 + 4*(Count-1) FieldOfViewValues [Count -1] 4 Angka Nilai Bidang Tampilan Terakhir, ini harus menjadi nilai FoV tersempit.

Berikut ini berlaku:

  • permintaan GET_LEN harus melaporkan seluruh ukuran payload.

  • permintaan GET_INFO akan melaporkan 1. Nilai ini menunjukkan kontrol sinkron yang hanya mendukung GET_CUR.

  • permintaan GET_CUR harus melaporkan data yang berisi FoV default dan array nilai FoV yang didukung dalam urutan menurun. Bidang struktur ditentukan di atas.

  • permintaan GET_DEF akan melaporkan hal yang sama seperti GET_CUR.

  • permintaan GET_MIN, GET_MAX, dan GET_RES tidak digunakan, tetapi harus mengembalikan nilai yang sama dengan GET_CUR.

  • permintaan SET_CUR tidak didukung.

Bidang nilai Tampilan harus dalam urutan turun, misalnya, Bidang Tampilan terluas adalah yang pertama dan tersempit adalah yang terakhir.

2.2.2.16 Bidang Kontrol Tampilan 2

Kontrol ini menentukan bidang dasar tampilan yang digunakan kamera saat streaming. Kontrol ini dapat diterapkan sebelum atau selama streaming.

Kontrol ini tersedia untuk semua jenis kamera dan tidak bergantung pada jenis media yang sedang dialirkan.

Kontrol ini memungkinkan perangkat lunak host untuk mengkueri dan mengontrol bidang tampilan yang terkait dengan kamera.

Ini adalah kontrol global yang memengaruhi semua titik akhir pada semua antarmuka streaming video yang terkait dengan antarmuka kontrol video. Ini menyesuaikan sumber data piksel (atau sensor) yang digunakan oleh ISP (Image Signal Processor). Ini termasuk Metode 2 dan Metode 3 masih menangkap pin.

Ini adalah kontrol tingkat filter sinkron.

Kontrol ini dipetakan ke KSPROPERTY_CAMERACONTROL_EXTENDED_ FIELDOFVIEW2 oleh driver kamera.

Pemilih kontrol MSXU_CONTROL_FIELDOFVIEW2
Permintaan Wajib GET_INFO, GET_LEN, GET_RES, GET_MIN, GET_MAX, GET_DEF, GET_CUR, SET_CUR
Permintaan Opsional
wLength 4
Offset Bidang Ukuran Nilai Deskripsi
0 dwValue 4 Angka Bidang Diagonal nilai Tampilan dalam derajat.

Berikut ini berlaku:

  • permintaan GET_LEN akan melaporkan nilai 4.

  • permintaan GET_INFO akan melaporkan 3. Nilai ini menunjukkan kontrol sinkron yang mendukung GET_CUR dan SET_CUR.

  • permintaan GET_MIN harus melaporkan bidang dwValue yang diatur ke nilai Bidang Tampilan minimum yang didukung.

  • permintaan GET_RES harus melaporkan bidang dwValue set 0. Permintaan ini saat ini tidak digunakan.

  • permintaan GET_MAX harus melaporkan bidang dwValue yang diatur ke nilai Bidang Tampilan maksimum yang didukung.

  • permintaan GET_DEF harus melaporkan bidang dwValue yang diatur ke nilai Bidang Tampilan default.

  • permintaan GET_CUR harus melaporkan bidang dwValue yang diatur ke nilai Bidang Tampilan saat ini.

  • Saat permintaan SET_CUR diterima, kamera mengatur bidang tampilannya agar sesuai dengan dwValue yang diberikan.

  • Jika kamera mengimplementasikan CT_ZOOM_RELATIVE_CONTROL dan/atau CT_ZOOM_ABSOLUTE_CONTROL, kontrol ini akan diatur ulang ke nilai defaultnya saat MSXU_CONTROL_FIELDOFVIEW2 SET_CUR dipanggil.

Jika kamera mengimplementasikan MSXU_CONTROL_DIGITALWINDOW, kamera akan mencerminkan perubahan jendela saat nilai Bidang Tampilan baru diatur. Dan sebaliknya, Bidang Tampilan akan mencerminkan perubahan yang dilakukan melalui Jendela Digital. Lihat KSPROPERTY_CAMERACONTROL_EXTENDED_ FIELDOFVIEW2 untuk detailnya.

2.2.3 Metadata

Desain untuk metadata bingkai format standar dibangun pada desain metadata kustom UVC dari Windows 10. Di Windows 10, metadata kustom didukung untuk UVC dengan menggunakan INF kustom untuk driver kamera (catatan: driver kamera dapat didasarkan pada USBVIDEO.SYS Windows, tetapi INF kustom diperlukan untuk perangkat keras yang diberikan agar metadata dapat dilewati). Jika MetadataBufferSizeInKB<PinIndex> entri registri ada dan bukan nol, maka metadata kustom didukung untuk pin tersebut dan nilai menunjukkan ukuran buffer yang digunakan untuk metadata. Bidang <PinIndex> menunjukkan indeks berbasis 0 dari indeks pin video.

Di Windows 10, versi 1703, driver kamera dapat memberi sinyal dukungan untuk metadata format standar Microsoft dengan menyertakan entri AddReg berikut:

StandardFormatMetadata<PinIndex>: REG_DWORD: 0x0 (Tidak Didukung) ke 0x1 (Didukung)

Kunci registri ini akan dibaca oleh DevProxy dan memberi tahu driver UVC bahwa metadata dalam format standar dengan mengatur bendera KSSTREAM_METADATA_INFO_FLAG_STANDARDFORMAT di bidang Bendera untuk struktur KSSTREAM_METADATA_INFO.

2.2.3.1 Metadata berformat Microsoft Standard

Metadata format standar Microsoft adalah satu atau beberapa instans dari struktur berikut:

metadata format standar.

typedef struct tagKSCAMERA_METADATA_ITEMHEADER {
    ULONG MetadataId;
    ULONG Size; // Size of this header + metadata payload following
} KSCAMERA_METADATA_ITEMHEADER, *PKSCAMERA_METADATA_ITEMHEADER;

Bidang MetadataId diisi oleh pengidentifikasi dari definisi enum berikut yang berisi pengidentifikasi dan pengidentifikasi kustom yang terdefinisi dengan baik (pengidentifikasi >= MetadataId_Custom_Start).

typedef enum {
    MetadataId_Standard_Start = 1,
    MetadataId_PhotoConfirmation = MetadataId_Standard_Start,
    MetadataId_UsbVideoHeader,
    MetadataId_CaptureStats,
    MetadataId_CameraExtrinsics,
    MetadataId_CameraIntrinsics,
    MetadataId_FrameIllumination,
    MetadataId_Standard_End = MetadataId_FrameIllumination,
    MetadataId_Custom_Start = 0x80000000,
} KSCAMERA_MetadataId;

Bidang Ukuran diatur ke sizeof(KSCAMERA_METADATA_ITEMHEADER) + sizeof(Metadata Payload).

2.2.3.2 Metadata format standar yang dihasilkan firmware dari paket bingkai video USB

Selama transfer melalui UVC untuk video berbasis bingkai, bingkai video dikemas ke dalam serangkaian paket, masing-masing didahului oleh Header Payload UVC. Setiap Header Payload UVC ditentukan oleh spesifikasi Payload Berbasis Bingkai Driver Kelas Video USB:

Payload Header

Berikut ini adalah deskripsi format header payload untuk format Berbasis Bingkai.

header payload.

Bidang HLE (Panjang header)

Bidang panjang header menentukan panjang header, dalam byte.

Bidang header bidang bit

FID: Pengidentifikasi Bingkai

  • Bit ini beralih pada setiap batas awal bingkai dan tetap konstan untuk sisa bingkai.

EOF: Akhir Bingkai

  • Bit ini menunjukkan akhir bingkai video dan diatur dalam sampel video terakhir milik bingkai. Penggunaan bit ini adalah pengoptimalan untuk mengurangi latensi dalam penyelesaian transfer bingkai, dan bersifat opsional.

PTS: Stempel Waktu Presentasi

  • Bit ini, ketika diatur, menunjukkan keberadaan bidang PTS.

SCR: Referensi Jam Sumber

  • Bit ini, ketika diatur, menunjukkan keberadaan bidang SCR.

Dicadangkan.

  • Atur ke 0.

STI: Gambar Diam

  • Bit ini, ketika diatur, mengidentifikasi sampel video sebagai milik gambar diam.

ERR: Bit Kesalahan

  • Bit ini, ketika diatur, menunjukkan kesalahan dalam streaming perangkat.

EOH: Akhir Header

  • Bit ini, ketika diatur, menunjukkan akhir bidang BFH.

PTS: Stempel Waktu Presentasi, Ukuran: 4 byte, Nilai: Angka

  • Bidang PTS ada ketika bit PTS diatur di bidang BFH[0]. Lihat Bagian 2.4.3.3 "Header Payload Video dan Gambar Diam" di Definisi Kelas Perangkat USB untuk spesifikasi Perangkat Video.

SCR: Referensi Jam Sumber, Ukuran: 6 byte, Nilai: Angka

  • Bidang SCR ada ketika bit SCR diatur di bidang BFH[0]. Lihat Bagian 2.4.3.3 Video dan Header Payload Gambar Diam di Definisi Kelas Perangkat USB untuk spesifikasi Perangkat Video.

Bidang HLE di driver UVC yang ada diperbaiki menjadi 2 byte (tidak ada PTS/SCR yang ada) atau hingga 12 byte (PTS/SCR ada). Namun, bidang HLE, yang menjadi bidang ukuran byte, berpotensi menentukan hingga 255 byte data header. Jika PTS/SCR ada, dan HLE lebih dari 12 byte, data tambahan apa pun setelah 12 byte pertama header payload diambil sebagai metadata standar khusus untuk bingkai video ketika entri StandardFormatMetadata<PinIndex> INF diatur.

Metadata format standar (dihasilkan oleh firmware) untuk bingkai diperoleh dengan menggabungkan blob parsial yang ditemukan dalam paket bingkai video yang mewakili bingkai tersebut.

paket bingkai metadata.

2.2.3.3 Buffer metadata disediakan untuk komponen mode pengguna

Buffer metadata yang disediakan untuk komponen mode pengguna akan memiliki item metadata untuk tanda waktu UVC (dihasilkan oleh driver UVC) diikuti oleh item metadata yang dihasilkan firmware dan ditata sebagai berikut:

buffer metadata.

Format Metadata 2.2.3.4 untuk pengidentifikasi metadata standar

Firmware dapat memilih apakah akan menghasilkan metadata yang sesuai dengan pengidentifikasi atau tidak. Jika firmware memilih untuk menghasilkan metadata yang sesuai dengan pengidentifikasi, metadata pengidentifikasi tersebut akan ada di semua bingkai yang dipancarkan oleh firmware.

2.2.3.4.1 MetadataId_CaptureStats

Format metadata untuk pengidentifikasi ini ditentukan oleh struktur berikut:

typedef struct tagKSCAMERA_METADATA_CAPTURESTATS {
    KSCAMERA_METADATA_ITEMHEADER Header;
    ULONG Flags;
    ULONG Reserved;
    ULONGLONG ExposureTime;
    ULONGLONG ExposureCompensationFlags;
    LONG ExposureCompensationValue;
    ULONG IsoSpeed;
    ULONG FocusState;
    ULONG LensPosition; // a.k.a Focus
    ULONG WhiteBalance;
    ULONG Flash;
    ULONG FlashPower;
    ULONG ZoomFactor;
    ULONGLONG SceneMode;
    ULONGLONG SensorFramerate;
} KSCAMERA_METADATA_CAPTURESTATS, *PKSCAMERA_METADATA_CAPTURESTATS;

Bidang Bendera menunjukkan bidang mana yang lebih baru dalam struktur yang diisi dan memiliki data yang valid. Bidang Bendera tidak boleh bervariasi dari bingkai ke bingkai. Saat ini, bendera berikut didefinisikan:

#define KSCAMERA_METADATA_CAPTURESTATS_FLAG_EXPOSURETIME            0x00000001
#define KSCAMERA_METADATA_CAPTURESTATS_FLAG_EXPOSURECOMPENSATION    0x00000002
#define KSCAMERA_METADATA_CAPTURESTATS_FLAG_ISOSPEED                0x00000004
#define KSCAMERA_METADATA_CAPTURESTATS_FLAG_FOCUSSTATE              0x00000008
#define KSCAMERA_METADATA_CAPTURESTATS_FLAG_LENSPOSITION            0x00000010
#define KSCAMERA_METADATA_CAPTURESTATS_FLAG_WHITEBALANCE            0x00000020
#define KSCAMERA_METADATA_CAPTURESTATS_FLAG_FLASH                   0x00000040
#define KSCAMERA_METADATA_CAPTURESTATS_FLAG_FLASHPOWER              0x00000080
#define KSCAMERA_METADATA_CAPTURESTATS_FLAG_ZOOMFACTOR              0x00000100
#define KSCAMERA_METADATA_CAPTURESTATS_FLAG_SCENEMODE               0x00000200
#define KSCAMERA_METADATA_CAPTURESTATS_FLAG_SENSORFRAMERATE         0x00000400

Bidang Cadangan dicadangkan untuk masa mendatang dan akan diatur ke 0.

Bidang ExposureTime berisi waktu pencahayaan, dalam 100 ns, diterapkan ke sensor saat bingkai diambil. Ini muncul sebagai atribut MF_CAPTURE_METADATA_EXPOSURE_TIME pada sampel MF yang sesuai.

Bidang ExposureCompensationFlags berisi langkah kompensasi EV (tepat salah satu bendera langkah KSCAMERA_EXTENDEDPROP_EVCOMP_XXX harus diatur) yang digunakan untuk menyampaikan nilai Kompensasi EV. Bidang ExposureCompensationValue berisi nilai Kompensasi EV dalam unit langkah yang diterapkan ke sensor saat bingkai diambil. Ini muncul sebagai atribut MF_CAPTURE_METADATA_EXPOSURE_COMPENSATION pada sampel MF yang sesuai.

Bidang IsoSpeed berisi nilai kecepatan ISO yang diterapkan ke sensor saat bingkai diambil. Ini tidak bersatu. Ini muncul sebagai atribut MF_CAPTURE_METADATA_ISO_SPEED pada sampel MF yang sesuai.

Bidang FocusState berisi status fokus saat ini yang dapat mengambil salah satu nilai yang ditentukan dalam enum KSCAMERA_EXTENDEDPROP_FOCUSSTATE. Ini muncul sebagai atribut MF_CAPTURE_METADATA_FOCUSSTATE pada sampel MF yang sesuai.

Bidang LensPosition berisi posisi lensa logis saat bingkai ditangkap, yang tidak bersatu. Ini adalah nilai yang sama yang dapat dikueri dari KSPROPERTY_CAMERACONTROL_EXTENDED_FOCUS dalam panggilan GET. Ini muncul sebagai atribut MF_CAPTURE_METADATA_LENS_POSITION pada sampel MF yang sesuai.

Bidang WhiteBalance berisi keseimbangan putih yang diterapkan ke sensor saat bingkai diambil, yang merupakan nilai di Kelvin. Ini muncul sebagai atribut MF_CAPTURE_METADATA_WHITEBALANCE pada sampel MF yang sesuai.

Bidang Flash berisi nilai boolean dengan 1 yang berarti lampu kilat aktif, dan 0 yang berarti lampu kilat mati, saat bingkai diambil. Ini muncul sebagai atribut MF_CAPTURE_METADATA_FLASH pada sampel MF yang sesuai.

Bidang FlashPower berisi daya lampu kilat yang diterapkan ke bingkai yang diambil yang merupakan nilai dalam rentang [0, 100]. Bidang ini harus dihilangkan jika driver tidak mendukung daya yang dapat disesuaikan untuk flash. Ini muncul sebagai atribut MF_CAPTURE_METADATA_FLASH_POWER pada sampel MF yang sesuai.

Bidang ZoomFactor berisi nilai zoom dalam format Q16 yang diterapkan ke bingkai yang diambil. Ini muncul sebagai atribut MF_CAPTURE_METADATA_ZOOMFACTOR pada sampel MF yang sesuai.

Bidang SceneMode berisi mode adegan yang diterapkan ke bingkai yang diambil yang merupakan bendera KSCAMERA_EXTENDEDPROP_SCENEMODE_XXX 64 bit. Ini muncul sebagai atribut MF_CAPTURE_METADATA_SCENE_MODE pada sampel MF yang sesuai.

Bidang SensorFramerate berisi tingkat pembacaan sensor yang diukur dalam hertz ketika bingkai ditangkap, yang terdiri dari nilai pembius di 32 bit atas dan nilai denominator di 32 bit yang lebih rendah. Ini muncul sebagai atribut MF_CAPTURE_METADATA_SENSORFRAMERATE pada sampel MF yang sesuai.

2.2.3.4.2 MetadataId_Kamera Extrinsics

Format metadata untuk pengidentifikasi ini melibatkan KSCAMERA_METADATA_ITEMHEADER standar diikuti dengan payload byte-array. Payload harus selaras dengan struktur MF Kamera Extrinsics diikuti oleh nol atau lebih struktur MF Kamera Extrinsic_CalibratedTransform. Payload harus selaras 8 byte dan semua byte yang tidak digunakan akan terjadi di akhir payload dan diatur ke 0.

2.2.3.4.3 MetadataId_Kamera Intrinsics

Format metadata untuk pengidentifikasi ini melibatkan KSCAMERA_METADATA_ITEMHEADER standar diikuti dengan payload byte-array. Payload harus selaras dengan struktur MFPinhole Kamera Intrinsics. Payload harus selaras 8 byte dan semua byte yang tidak digunakan akan terjadi di akhir payload dan diatur ke 0.

2.2.3.4.4 MetadataId_FrameIllumination

Format metadata untuk pengidentifikasi ini ditentukan oleh struktur berikut:

typedef struct tagKSCAMERA_METADATA_FRAMEILLUMINATION {
    KSCAMERA_METADATA_ITEMHEADER Header;
    ULONG Flags;
    ULONG Reserved;
} KSCAMERA_METADATA_FRAMEILLUMINATION, *PKSCAMERA_METADATA_FRAMEILLUMINATION;

Bidang Bendera menunjukkan informasi tentang bingkai yang diambil. Saat ini, bendera berikut didefinisikan:

#define KSCAMERA_METADATA_FRAMEILLUMINATION_FLAG_ON 0x00000001

Jika bingkai ditangkap ketika penerangan menyala, bendera KSCAMERA_METADATA_FRAMEILLUMINATION_FLAG_ON akan diatur. Jika tidak, bendera ini tidak akan diatur.

Bidang Cadangan dicadangkan untuk digunakan di masa mendatang dan akan diatur ke 0.

Contoh:

Sebagai contoh, struktur KSCAMERA_METADATA_FRAMEILLUMINATION yang menunjukkan iluminasi menyala adalah sebagai berikut:

KSCAMERA_METADATA_FRAMEILLUMINATION.Header.MetadataId = MetadataId_FrameIllumination;
KSCAMERA_METADATA_FRAMEILLUMINATION.Header.Size = 16; // 4 ULONG variables in total inside the structure
KSCAMERA_METADATA_FRAMEILLUMINATION.Flags = KSCAMERA_METADATA_FRAMEILLUMINATION_FLAG_ON;
KSCAMERA_METADATA_FRAMEILLUMINATION.Reserved = 0;
2.2.3.4.5 MetadataId_USBVideoHeader

Format metadata untuk pengidentifikasi ini didefinisikan oleh KSCAMERA_METADATA_ITEMHEADER umum diikuti oleh struktur KSSTREAM_UVC_METADATA:

typedef struct
{
    ULONG       PresentationTimeStamp;
    ULONG       SourceClockReference;
    union
    {
        struct
        {
            USHORT    Counter : 11;
            USHORT  Reserved : 5;
        };
        USHORT    SCRToken;
    };
    USHORT      Reserved0;
    ULONG       Reserved1;
} KSSTREAM_UVC_METADATATYPE_TIMESTAMP, *PKSSTREAM_UVC_METADATATYPE_TIMESTAMP;

typedef struct {
    KSSTREAM_UVC_METADATATYPE_TIMESTAMP StartOfFrameTimestamp;
    KSSTREAM_UVC_METADATATYPE_TIMESTAMP EndOfFrameTimestamp;
} KSSTREAM_UVC_METADATA, *PKSSTREAM_UVC_METADATA;

Bidang StartOfFrameTimestamp dan EndOfFrameTimestamp adalah tanda waktu yang terkandung dalam header UVC di payload UVC pertama dan terakhir yang dikeluarkan oleh kamera untuk membangun bingkai ini.

Payload ini tidak boleh dikirim oleh perangkat.

Payload metadata ini unik karena ini adalah satu-satunya payload metadata yang dihasilkan langsung oleh driver kelas USB Video dari informasi yang diperoleh dari header payload yang mematuhi UVC.

Payload ini ditambahkan ke buffer metadata dari setiap bingkai.

Jika perangkat mendukung metadata standar, perangkat harus menyertakan ruang yang diperlukan untuk menyimpan payload ini dalam persyaratan buffer seperti yang dilaporkan oleh kontrol Metadata yang ditentukan dalam bagian 2.2.2.9.