一部のカメラメーカーは、ソフトウェアでオーバーライドできない物理的なコントロールを使用してカメラをブロックできる物理的なシャッターやキルスイッチを含めたい場合があります。 これらの機能は、不注意によるアクティブ化のリスクや顧客の混乱のリスクのため推奨されませんが、実装されている場合は、シャッター/スイッチの状態を報告するなど、 カメラのプライバシー シャッターとキル スイッチに関するページに記載されているガイダンスに従う必要があります。
シャッターが閉じているか、キル スイッチがアクティブな場合、カメラは Windows や既存のカメラ API を使用するアプリケーションで引き続き完全に機能しますが、画像またはビデオ ストリームは黒または暗くなります (または、物理的なコントロールの場所を指す矢印が付いたデバイスの画像などの静的な画像に置き換えられます)。 これにより、カメラにアクセスしているアプリケーションがカメラが隠されていることを認識せず、物理コントロールを誤ってアクティブ化したエンド ユーザーが、カメラが期待どおりに動作しない理由について混乱する可能性がある潜在的な問題が発生します。
これらの問題に対処するには、シャッターまたはキル スイッチを実装するカメラに、シャッター/スイッチの状態を検出してオペレーティング システムに報告するメカニズムを実装する必要があります。 このトピックでは、このレポート メカニズムを実装する OEM と ODM に関するガイダンスを提供します。また、カメラ ドライバー開発者がシャッター/スイッチの状態を OS に公開するために使用するコントロールと構造についても説明します。
OS では、プライバシー シャッター/スイッチ通知機能に加えて、前面カメラ (FFC) が、 蓋スイッチの閉じるアクション が "Do Nothing" に設定されている場合にデバイスの蓋によって隠されるカメラ オクルージョン検出を実装します。たとえば、蓋を閉じたときにコンピューターがスリープ状態にならず、電源がオフになります。 たとえば、ノート PC の蓋が閉じられている間に、外部モニターが使用されているドッキングされたノート PC が考えられます。 この動作が望まれていないデバイス フォーム ファクターが存在する可能性があるため、デバイスの蓋のオクルージョン検出をオプトアウトするメカニズムを以下に定義します。
アーキテクチャの概要
KSPROPERTY_CAMERACONTROL_PRIVACY コントロールは、OS がカメラ ドライバーから現在の状態を照会するときに使用されます。 Get プロパティとしてのみ使用する必要があります。 ドライバー開発者は、ドライバーの KSPROPERTY_CAMERACONTROL_PRIVACY コントロール Set プロパティをサポートしてはなりません。
注
プライバシー シャッターまたはキル スイッチを実装するカメラは、「 カメラ プライバシー シャッターとキル スイッチ」で説明されている要件に準拠している必要があります。
USB ビデオ クラス (UVC) ドライバーでは、KSPROPERTY_CAMERACONTROL_PRIVACY コントロールは、UVC v1.5 クラス仕様で定義されているCT_PRIVACY_CONTROLプロパティにマップされます。
既存の KSPROPERTY コントロールの使用に加えて、 KSPROPERTY_CAMERACONTROL_PRIVACY、新しい KSEVENT 呼び出しフローが導入されるため、カメラ ドライバーは、その KSEVENT に登録しているクライアントがある場合に、カメラのプライバシー シャッター/スイッチの状態が変更されたときに通知できます。
KSEVENT は、KSPROPERTY が使用しているのと同じセット GUID と ID を使用して発行されます。
上の図に示されている内容を明確にするために、OS は AVS ドライバーにメカニズムの実装を期待しています。ドライバー開発者がこの機能をサポートすることを選択した場合、シャッター センサーが生成している状態の変化を取得してリッスンします。 OS は 、KSPROPERTY get メソッドを使用して状態を照会し、シャッター状態が変更されたときにドライバーが通知する待機 KSEVENT を発行します。 シャッター/スイッチの状態の変化は、エラー状態を引き起こすなど、カメラの機能を妨げるものではありません。
手記: AVS ドライバーがこの機能をサポートしているが、基になるハードウェアがサポートされていない場合、OS が KSEVENT 登録を発行するときに、AVS ドライバーはサポートされていないエラーを返す必要があります。
センシングおよびレポート方法
一部のカメラでは、イメージ シグナル プロセッサ (ISP) ファームウェアで実行されているピクセル分析アルゴリズムを使用してシャッター状態を検出します。 これにより、カメラがシャッター状態を検出して報告するためにアクティブにストリーミングする必要があるカメラに制限が課されます。 カメラがシャッター/スイッチの状態を報告するタイミングと方法の詳細については、シャッター状態の検出とレポートを参照してください。
同様に、カメラオクルージョン信号を利用するアプリケーション開発者は、カメラがアクティブにストリーミングされない限り、報告されたシャッター状態を利用してはなりません。 詳細については、 CameraOcclusionInfo クラス を参照してください。
KSPROPERTY
使用状況の概要テーブル (KSPROPERTY)
| 取得 | 設定 | ターゲット | プロパティ記述子の種類 | プロパティ値の型 |
|---|---|---|---|---|
| イエス | いいえ | フィルター | KSPROPERTY_CAMERACONTROL_S | 長い |
プロパティ値 (操作データ) は、プライバシー モードが有効か無効かを指定する LONG です。
値 0 は、カメラ センサーがビデオ画像をキャプチャできることを示します
値 1 は、カメラ センサーがビデオ 画像をキャプチャできないようにすることを示します
KSPROPERTY_CAMERA_CONTROL_S構造体は、次のように入力する必要があります。
| 構造体のメンバー | 価値 |
|---|---|
| KSPROPERTY.Set | PROPSETID_VIDCAP_CAMERACONTROLである必要があります。 |
| KSPROPERTY.Id | KSPROPERTY_CAMERACONTROL_PRIVACYでなければなりません |
| KSPROPERTY.Flags | KSPROPERTY_TYPE_GETでなければなりません |
| 価値 | 0 に初期化する |
| Flags | 無視、0 に設定 |
| 機能 | 無視、0 に設定 |
KSEVENT
使用状況の概要テーブル (KSEVENT)
| 取得 | 設定 | ターゲット | イベント記述子の種類 | イベント値の種類 |
|---|---|---|---|---|
| いいえ | イエス | フィルター | KSEVENT | KSEVENTDATAをする |
KSEVENT 構造体は、次のように入力する必要があります。
| 構造体のメンバー | 価値 |
|---|---|
| 設定 | 使用するのは PROPSETID_VIDCAP_CAMERACONTROL でなければなりません。 |
| 身分証明書 | KSPROPERTY_CAMERACONTROL_PRIVACYである必要があります |
| Flags | KSEVENT_TYPE_ENABLE |
KSEVENTDATA 構造体は、次のように入力する必要があります。
| 構造体のメンバー | 価値 |
|---|---|
| NotificationType | KSEVENTF_EVENT_HANDLEである必要があります。 |
デバイスの蓋による検出妨害を無効化する
デバイスの蓋のオクルージョン検出をオプトアウトするために、OEM は次のデバイス プロパティ キーを定義できます。
DEVPROPKEY
DEVPROPGUID = {3AB8560B-EFCF-43C1-A7EC-130E46857AF4}
DEVPROPID = 2
DEVPROPTYPE = DEVPROP_TYPE_UINT32
PropertyBuffer = (ULONG) 1
PropertyBufferSize = sizeof(ULONG)
注
PropertyBuffer 値を 0 に設定することは、デバイス プロパティ キーをまったく定義しない場合と同じです。
デバイス プロパティ キーは、 AddProperty を使用してドライバー INF ファイル内で提供することも、UVC 受信トレイ カメラ ドライバーを使用する USB カメラなどの INF ファイルがない場合は MS OS 記述子を使用して提供することもできます。
INF AddProperty の例
[OptOutLidOcclusionSampleAddPropertySection]
{3AB8560B-EFCF-43C1-A7EC-130E46857AF4},2,7,,1
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)
};
こちらも参照ください
KSPROPERTY_CAMERACONTROL_PRIVACY
KSPROPERTY を する
KSEVENT を する
KSEVENTDATA の