カメラのハードウェア
トポロジの概要
Windows ドライバーのサポートについては、カメラのサブシステムには、カメラ センサー、オプションのオート フォーカス ユニット、フラッシュ、場合によっては、その他の関連ハードウェアなどの SoC (System on a Chip) コンポーネントが含まれています。 カメラ ハードウェアには、SoC の画像処理ユニットも含まれます。
SoC の画像処理ハードウェアは、SoC ベンダーによって提供される電源エンジン プラグイン (PEP) により電源管理される必要があります。 画像処理ハードウェアは、ACPI で単一のデバイスとして列挙し、Windows Driver Framework (WDF) ドライバーによって管理する必要があります。 画像処理デバイスのアイドル状態 タイムアウトのシステム管理を有効化すると、PEP が SoC に固有のクロックおよびパワー レール共有トポロジを制御できます。 カメラ デバイスがオフの際は常に、SoC の画像処理ハードウェアの電源をオフにする必要があります。
一部の SoC 設計では、カメラ キャプチャその他の画像とグラフィックス処理の両方を行う共有関数ブロックが備わっています。 このような SoC を使用するプラットフォームでは、SoC ベンダーによって提供される PEP は、この共有ブロックの使用を参照カウントして、すべてのクライアントがアイドル状態の際は電源をオフにする必要があります。
一部のプラットフォームでは、SoC の画像処理ハードウェアが複数のカメラ デバイス間で共有される場合があります。 この場合、画像処理ハードウェアはカメラ デバイス間で多重化します。 各カメラ デバイスのコンポーネントは、ACPI 名前空間で個別に記述する必要があります。また、Windows プラグ アンド プレイ マネージャーとは別のデバイス オブジェクトとして列挙する必要があります。
複数のカメラが組み込まれているプラットフォームでは、Windows でサポートされているモードと解像度の任意の組み合わせで、 個々のカメラが両方(またはすべて)のカメラを同時に使用できるようにする必要があります (コンテンツのストリーミングなど)。 この要件を満たできない SoC ベンダーは、ドライバーとシステム ファームウェアの実装に関するガイダンスのため、Microsoft と直接作業を行うする必要があります。
サポートされる電源構成
Windows は、モダン スタンバイ プラットフォームのカメラ デバイス用の単一のハードウェア電源管理構成をサポートします。 つまり、各カメラ センサーは MIPI-CSI リンクを介して SoC (System on a Chip) に接続する必要があります。また、必要に応じて I2C バスと 1 つ以上の GPIO ピンに接続できます。 カメラ センサー デバイス、オプションのフラッシュ、その他の SoC 以外のカメラ コンポーネントは、ACPI ファームウェアでオンとオフを切り替え可能な電源レールに配置する必要があります。
MIPI-CSI リンクに加えて、カメラ デバイスにカメラ センサーまたはフラッシュ デバイスを制御する I2C または GPIO ピンがある場合は、これらのピンを SoC 上の I2C コントローラーまたは GPIO コントローラーの対応するピンにルーティングする必要があります。 システム インテグレーターは、ACPI 名前空間のカメラ デバイスの下にある _CRS オブジェクト内のカメラ センサーとフラッシュ デバイスの両方の I2C および GPIO リソースを列挙する必要があります。
注 システム インテグレーターは、カメラ サブシステム ドライバー開発者と連携し、カメラ ドライバーが GPIO および I2C リソースの順序を決定する方法を選ぶ必要があります。 たとえば、2 つの I2C リソースを受け取るドライバーを、リソース リストに表示される順序に基づいてそれらを区別する設計にします。 同様に、3 つの GPIO リソースを受け取るドライバーのために、これらのリソースが特定の順序でリストされる必要があります。 システム インテグレーターは、I2C リソースと GPIO リソースを同じ順序で _CRS オブジェクトに列挙する必要があります。
カメラ センサーとフラッシュ デバイスは、ACPI 制御方法でオンとオフを切り替え可能な電源レールに配置する必要があります。 SoC の GPIO ピンを使用して、電源スイッチ ハードウェアを制御することをお勧めします。 ACPI 制御メソッドによって状態を変更できるよう、GPIO を GPIO 操作領域に列挙する必要があります。 システム インテグレーターは、ACPI 名前空間内のカメラ デバイス (センサー、フラッシュ、その他のカメラ コンポーネントなど) の電源リソースを記述する必要があります。 このリソースには、電源スイッチ ハードウェアにルーティングされる GPIO 信号の状態を変更するための _ON メソッドと _OFF メソッドが含まれている必要があります。 システム インテグレーターは、ACPI 名前空間のカメラ デバイスで電源リソースを参照する _PR0 オブジェクトと _PR3 オブジェクトを提供する必要があります。
カメラ コントローラー ドライバーは、すべてのストリーミング ピンが KSSTATE_STOP 状態に入ったことを検出すると、プライベート インターフェイスを使用して、キャプチャするオフ SoC カメラ コンポーネントを制御するドライバーに不要になったことを伝えます。 さらに、これらのドライバーは IWDFDevice2::ResumeIdle メソッドを呼び出して、ハードウェアがアイドル状態をドライバー フレームワークに伝えます。 応答として、ドライバー フレームワークは D3 への移行を開始します。この場合、D3 IRP はカメラ のデバイス ドライバー スタックを通過します。 (D3 IRPは、PowerDeviceD3のDEVICE_POWER_STATE列挙値を指定するIRP_MJ_POWER IRPです)。Windows ACPIドライバー (Acpi.sys) は、D3 IRPを監視し、ACPI名前空間のカメラ デバイスの下にある _PR3オブジェクトによって識別される電源リソースの _OFFメソッドを実行します。
前の段落の最後の文については、電源リソースが 1 つのカメラ デバイス以外のデバイスに電力を供給しないものとします。 他のデバイスにこの電源リソースへの参照がある場合、Acpi.sys は、電源リソースを参照する他のすべてのデバイスが D3 に移行した後にのみ、_OFF メソッドを実行します。 詳細については、「D3cold への切り替えの有効化」を参照してください。
カメラ ハードウェアをアクティブな電源状態に戻す際も同様のプロセスです。 カメラ コントローラー ドライバーが KSSTATE_ACQUIRE 状態に入る最初のストリーム キャプチャ ピンを検出すると、カメラ コントローラー ドライバーは、カメラ サブシステムを構成する他の On-SoC コンポーネントとオフ SoC コンポーネントのドライバーと通信します。 応答として、On-SoC 画像処理ユニットを制御するドライバーは、IWDFDevice2::StopIdle メソッドを呼び出します。このメソッドは、イメージ処理ユニットのハードウェアの電源をオンにする必要がある PEP に通知します。 カメラ コントローラー ドライバーは、オフ SoC カメラ コンポーネントを制御するドライバーに、アクティブな状態に戻る必要があるという指示を出します。 さらに、これらのドライバーは StopIdle を呼び出して、ハードウェアがアイドルでなくなったとドライバー フレームワークに通知します。その結果、D0 IRP がカメラ デバイス ドライバー スタックを通過します。 (D0 IRP は、PowerDeviceD0 のDEVICE_POWER_STATE列挙値を指定するIRP_MJ_POWER IRP です)。Acpi.sysは、ACPI 名前空間のカメラ デバイスの下にある_PR0 オブジェクトによって識別される電源リソースの_ONメソッドを実行することによって、D0 IRP に応答します。
プラットフォームに複数のカメラ デバイスがある場合、各カメラ デバイスには、ACPI 名前空間で説明されている独自の切り替え可能な電源レールと電源リソースが必要です。 ACPI 名前空間内の各カメラ デバイスについて、システム インテグレーターは、カメラ デバイスがコンピューターの前面または背面にあるかどうかを示す _PLD オブジェクトを提供する必要があります。 カメラ デバイスが clamshell-form-factor コンピューターのカバーに組み込まれ、カバーが開いているときにユーザーに対面している場合、このデバイスの _PLD オブジェクトは、カメラがプラットフォームの前面にあると示す必要があります。 カメラ デバイスが clamshell-form-factor コンピューターのカバーに組み込まれ、カバーが開いているときにユーザーに対面している場合、このデバイスの _PLD オブジェクトは、カメラがプラットフォームの前面にあると示す必要があります。
スリープ解除に関する懸念事項
カメラ デバイス ハードウェアがスリープ解除をサポートすることは許可されていません。 Windows は、カメラ デバイスがモダン スタンバイ中に SoC を最低電力状態からスリープ解除できることを期待していません。 多くの携帯電話では、ユーザーがカメラ ボタンを押すと SoC がスリープ状態からスリープ解除できます。 カメラ ボタンは、Windows によってユーザー入力デバイスとして処理されます。このデバイスの操作は、カメラ デバイス、センサー、およびオプションのフラッシュのシステム統合または電源管理とは別であり、独立しています。