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.
Beberapa produsen kamera mungkin ingin menyertakan rana fisik atau pemutus daya yang dapat memblokir kamera menggunakan kontrol fisik yang tidak dapat dikendalikan oleh perangkat lunak. Fitur-fitur ini tidak didorong karena risiko aktivasi yang tidak disengaja dan mengakibatkan kebingungan pelanggan, tetapi jika diimplementasikan, mereka harus mengikuti panduan yang dijelaskan dalam Rana privasi Kamera dan mematikan sakelar, termasuk untuk melaporkan status rana/sakelar.
Ketika rana ditutup atau sakelar mati aktif, kamera terus berfungsi penuh ke Windows dan aplikasi menggunakan API kamera yang ada, tetapi aliran gambar atau video akan berwarna hitam atau gelap (atau diganti dengan gambar statis, seperti gambar perangkat dengan panah yang menunjuk ke lokasi kontrol fisik). Hal ini menimbulkan potensi masalah di mana aplikasi yang mengakses kamera tidak menyadari bahwa kamera dihilangkan, dan pengguna akhir yang secara tidak sengaja mengaktifkan kontrol fisik mungkin bingung tentang mengapa kamera mereka tidak berfungsi seperti yang diharapkan.
Untuk mengatasi masalah ini, kamera yang mengimplementasikan rana atau mematikan sakelar harus menerapkan mekanisme untuk mendeteksi status rana/sakelar dan melaporkannya ke sistem operasi. Topik ini memberikan panduan untuk OEM dan ODM yang akan menerapkan mekanisme pelaporan ini, dan juga menjelaskan kontrol dan struktur yang akan digunakan pengembang driver kamera untuk menerbitkan status rana/beralih ke OS.
Selain fitur pemberitahuan rana/sakelar privasi, OS mengimplementasikan deteksi terhalangnya kamera di mana kamera depan (FFC) terhalang oleh tutup perangkat ketika aksi penutupan sakelar tutup diatur ke opsi "Do Nothing", misalnya, komputer tidak akan masuk ke mode tidur atau mati saat tutup ditutup. Contoh skenario bisa menjadi laptop yang terhubung ke dok dengan monitor eksternal digunakan saat tutup laptop tertutup. Mungkin ada beberapa faktor bentuk perangkat di mana perilaku ini tidak diinginkan, oleh karena itu, mekanisme untuk menolak deteksi oklusi tutup perangkat didefinisikan di bawah ini.
Gambaran umum arsitektur
Kontrol KSPROPERTY_CAMERACONTROL_PRIVACY digunakan saat OS mengkueri status saat ini dari driver kamera. Ini hanya boleh digunakan sebagai properti Get. Pengembang driver tidak boleh mendukung kontrol set properti KSPROPERTY_CAMERACONTROL_PRIVACY di driver mereka.
Nota
Kamera yang menerapkan rana privasi atau mematikan sakelar harus sesuai dengan persyaratan yang dijelaskan dalam Rana privasi kamera dan mematikan sakelar.
Dalam driver USB Video Class (UVC), kontrol KSPROPERTY_CAMERACONTROL_PRIVACY dipetakan ke properti CT_PRIVACY_CONTROL yang ditentukan dalam Spesifikasi Kelas UVC v1.5.
Selain penggunaan kontrol KSPROPERTY yang ada, KSPROPERTY_CAMERACONTROL_PRIVACY, alur panggilan KSEVENT baru diperkenalkan sehingga driver kamera dapat memberi sinyal ketika status rana/sakelar privasi kamera diubah jika ada klien yang mendaftar untuk KSEVENT tersebut.
KSEVENT dikeluarkan dengan menggunakan Set GUID dan Id yang sama dengan yang digunakan KSPROPERTY.
Untuk mengklarifikasi apa yang ditunjukkan pada diagram di atas, OS mengharapkan driver AVS untuk menerapkan mekanisme, jika pengembang driver memilih untuk mendukung fitur ini, untuk mendapatkan dan mendengarkan perubahan status yang dihasilkan sensor rana. OS meminta status melalui metode KSPROPERTY get dan mengeluarkan KSEVENT yang akan menunggu sampai driver memberi sinyal ketika status rana diubah. Perubahan status rana/sakelar tidak boleh mencegah kamera berfungsi, misalnya, untuk menyebabkan situasi kesalahan.
NOTA: Jika driver AVS mendukung fitur ini tetapi perangkat keras yang mendasarinya tidak, driver AVS akan mengembalikan kesalahan 'tidak didukung' ketika OS mengeluarkan pendaftaran KSEVENT.
Metode Pendeteksian dan Pelaporan
Beberapa kamera merasakan status rana menggunakan algoritma analisis piksel yang berjalan di firmware Image Signal Processor (ISP). Ini memberlakukan batasan pada kamera karena kamera harus melakukan streaming secara aktif untuk mendeteksi dan melaporkan kondisi penutup lensa. Lihat Sensor dan pelaporan status rana untuk detail selengkapnya tentang kapan dan bagaimana kamera harus melaporkan status rana/sakelarnya.
Demikian pula, pengembang aplikasi yang menggunakan sinyal oklusi kamera tidak boleh menggunakan status rana yang dilaporkan kecuali kamera sedang aktif melakukan streaming. Lihat Kelas CameraOcclusionInfo untuk detail selengkapnya.
KSPROPERTY
Tabel Ringkasan Penggunaan (KSPROPERTY)
| Dapatkan | Tetapkan | Target | Jenis deskriptor properti | Jenis nilai properti |
|---|---|---|---|---|
| Ya | Tidak. | Filter | KSPROPERTY_CAMERACONTROL_S | Panjang |
Nilai properti (data operasi) adalah LONG yang menentukan apakah mode privasi diaktifkan atau dinonaktifkan:
Nilai 0 menunjukkan bahwa sensor kamera dapat mengambil gambar video
Nilai 1 menunjukkan bahwa sensor kamera dicegah untuk menangkap gambar video
Struktur KSPROPERTY_CAMERA_CONTROL_S harus diisi sebagai berikut:
| Anggota struktur | Nilai |
|---|---|
| KSPROPERTY.Set | Harus PROPSETID_VIDCAP_CAMERACONTROL |
| KSPROPERTY.Id | Harus KSPROPERTY_CAMERACONTROL_PRIVACY |
| KSPROPERTY.Flags | Harus KSPROPERTY_TYPE_GET |
| Nilai | Inisialisasi ke 0 |
| Bendera | Diabaikan, atur ke 0 |
| Kemampuan | Diabaikan, atur ke 0 |
KSEVENT
Tabel Ringkasan Penggunaan (KSEVENT)
| Dapatkan | Tetapkan | Target | Jenis deskriptor peristiwa | Jenis nilai peristiwa |
|---|---|---|---|---|
| Tidak. | Ya | Filter | KSEVENT | KSEVENTDATA |
Struktur KSEVENT harus diisi sebagai berikut:
| Anggota struktur | Nilai |
|---|---|
| Tetapkan | Harus PROPSETID_VIDCAP_CAMERACONTROL |
| Id | Harus KSPROPERTY_CAMERACONTROL_PRIVACY |
| Bendera | KSEVENT_TYPE_ENABLE |
Struktur KSEVENTDATA harus diisi sebagai berikut:
| Anggota struktur | Nilai |
|---|---|
| NotificationType | Harus KSEVENTF_EVENT_HANDLE |
Menolak deteksi oklusi tutup perangkat
Untuk menolak deteksi oklusi tutup perangkat, OEM dapat menentukan Kunci Properti Perangkat berikut:
DEVPROPKEY
DEVPROPGUID = {3AB8560B-EFCF-43C1-A7EC-130E46857AF4}
DEVPROPID = 2
DEVPROPTYPE = DEVPROP_TYPE_UINT32
PropertyBuffer = (ULONG) 1
PropertyBufferSize = sizeof(ULONG)
Nota
Mengatur nilai PropertyBuffer ke 0 sama dengan tidak menentukan Kunci Properti Perangkat sama sekali.
Kunci Properti Perangkat dapat disediakan baik dalam file INF driver dengan menggunakan AddProperty atau dengan menggunakan deskriptor MS OS jika tidak ada file INF, misalnya, kamera USB menggunakan driver kamera kotak masuk UVC.
Contoh INF AddProperty
[OptOutLidOcclusionSampleAddPropertySection]
{3AB8560B-EFCF-43C1-A7EC-130E46857AF4},2,7,,1
Contoh deskriptor MS OS
UCHAR Example2_MSOS20DescriptorSet_UVCDevicePropertyKeyForLidOcclusionOptOut[0x76] =
{
//
// Microsoft OS 2.0 Descriptor Set Header
//
0x0A, 0x00, // wLength of MSOS20_SET_HEADER_DESCRIPTOR (10 bytes)
0x00, 0x00, // wDescriptorType MSOS20_SET_HEADER_DESCRIPTOR
0x00, 0x00, 0x00, 0x0A, // dwWindowsVersion – 0x10000000 for Windows 10
0x76, 0x00, // wTotalLength – 0x76(118) bytes
//
// Microsoft OS 2.0 Registry Value Feature Descriptor
//
0x6C, 0x00, // wLength - 0x6C(108) bytes
0x04, 0x00, // wDescriptorType – MSOS20_FEATURE_REG_PROPERTY
0x04, 0x00, // wPropertyDataType - 4 for REG_DWORD_LITTLE_ENDIAN
0x5E, 0x00, // wPropertyNameLength – 0x5E(94) bytes
'D', 0x00, 'K', 0x00, // Property Name – DKEY-{3AB8560B-EFCF-43C1-A7EC-130E46857AF4},2
'E', 0x00, 'Y', 0x00,
'-', 0x00, '{', 0x00,
'3', 0x00, 'A', 0x00,
'B', 0x00, '8', 0x00,
'5', 0x00, '6', 0x00,
'0', 0x00, 'B', 0x00,
'-', 0x00, 'E', 0x00,
'F', 0x00, 'C', 0x00,
'F', 0x00, '-', 0x00,
'4', 0x00, '3', 0x00,
'C', 0x00, '1', 0x00,
'-', 0x00, 'A', 0x00,
'7', 0x00, 'E', 0x00,
'C', 0x00, '-', 0x00,
'1', 0x00, '3', 0x00,
'0', 0x00, 'E', 0x00,
'4', 0x00, '6', 0x00,
'8', 0x00, '5', 0x00,
'7', 0x00, 'A', 0x00,
'F', 0x00, '4', 0x00,
'}', 0x00, ',', 0x00,
'2', 0x00, 0x00, 0x00,
0x00, 0x00,
0x04, 0x00, // wPropertyDataLength – 4 bytes
0x01, 0x00, 0x00, 0x00 // PropertyData – 0x00000001 (1)
};