相機硬體
拓撲概觀
就 Windows 驅動程式支援而言,相機子系統在 Chip (SoC) 元件上包含非系統,例如相機感應器、選擇性的自動焦點單位,以及快閃,以及其他相關聯的硬體。 相機硬體也包含 SoC 影像處理單位。
SoC 映射處理硬體必須由 SoC 廠商提供的電源引擎外掛程式 (PEP) 進行電源管理。 映射處理硬體應該列舉為 ACPI 中的單一裝置,並由 Windows Driver Framework (WDF) 驅動程式管理。 啟用映射處理裝置閒置逾時的系統管理,讓 PEP 可以控制 SoC 唯一的任何時鐘和電源軌共用拓撲。 每當相機裝置關閉時,任何 On-SoC 影像處理硬體都必須關閉電源。
某些 SoC 設計具有共用函式區塊,可同時執行相機擷取和其他影像和圖形處理。 在使用這類 SoC 的平臺中,SoC 廠商提供的 PEP 必須參考計數此共用區塊的使用,並在所有用戶端閒置時將其關閉。
在某些平臺上,SoC 影像處理硬體可能會在兩部以上的相機裝置之間共用。 在此情況下,影像處理硬體會在相機裝置之間多工處理。 每個相機裝置的元件都應該在 ACPI 命名空間中獨立描述,而且應該列舉為 Windows 隨插即用管理員的個別裝置物件。
Windows 需要有兩個 (或更多) 內嵌相機的平臺,才能使用 (,也就是同時串流來自) (或所有) 相機的內容,以及個別相機支援的任何模式和解析度組合。 不符合此需求的 SoC 廠商必須直接與 Microsoft 合作,以取得實作其驅動程式和系統韌體的指導。
支援的電源設定
Windows 支援新式待命平臺中相機裝置的單一硬體電源管理設定。 簡單來說,每個相機感應器都必須透過 MIPI-CSI 連結連接到晶片上的系統 (SoC) ,而且可以選擇性地連接到 I2C 匯流排和一或多個 GPIO 針腳。 相機感應器裝置、其選擇性快閃,以及任何其他關閉 SoC 相機元件,都必須放在可由 ACPI 韌體開啟和關閉的電源軌上。
如果除了 MIPI-CSI 連結之外,相機裝置還有 I2C 或 GPIO 針腳來控制相機感應器或快閃裝置,這些針腳必須路由傳送至 SoC 上 I2C 控制器或 GPIO 控制器的對應針腳。 系統整合者必須同時列舉相機感應器的 I2C 和 GPIO 資源,以及 ACPI 命名空間中相機裝置底下_CRS物件的快閃裝置。
注意 系統整合者應該與相機子系統驅動程式開發人員合作,以判斷相機驅動程式預期 GPIO 和 I2C 資源如何排序。 例如,接收兩個 I2C 資源的驅動程式會根據它們出現在資源清單中的順序來區別它們。 同樣地,接收三個 GPIO 資源的驅動程式預期會以特定順序列出這些資源。 系統整合者必須在_CRS 物件中以相同順序列舉 I2C 和 GPIO 資源。
相機感應器和快閃裝置必須放在可透過 ACPI 控制方法開啟和關閉的電源軌上。 我們建議從 SoC 使用 GPIO 針腳來控制電源交換器硬體。 GPIO 應在 GPIO 作業區域中列舉,以便 ACPI 控制方法可以變更其狀態。 系統整合者必須描述 ACPI 命名空間中相機裝置 (感應器、快閃或任何其他相機元件) 的電源資源。 此資源必須包含_ON方法和_OFF方法來變更路由傳送至電源交換器硬體的 GPIO 訊號狀態。 在 ACPI 命名空間的相機裝置底下,系統整合者必須提供_PR0物件和參考電源資源的_PR3物件。
當相機控制器驅動程式偵測到所有串流針腳都進入KSSTATE_STOP狀態時,它會使用私人介面來告訴驅動程式控制不再需要擷取的 off-SoC 相機元件。 接著,這些驅動程式會呼叫 IWDFDevice2::ResumeIdle 方法,告知驅動程式架構其硬體閒置。 為了回應,驅動程式架構會起始轉換至 D3,這會導致 D3 IRP 流經相機設備磁碟機堆疊。 (A D3 IRP 是一種IRP_MJ_POWER IRP,DEVICE_POWER_STATE 指定 PowerDeviceD3.) Windows ACPI 驅動程式Acpi.sys會觀察 D3 IRP,並執行 ACPI 命名空間中相機裝置底下_PR3物件所識別之電源資源的_OFF方法。
上一段的最後一個句子假設電源資源不會為一部相機裝置以外的任何裝置提供電源。 如果其他裝置有此電源資源的參考,Acpi.sys只有在參考電源資源的其他所有裝置都已轉換為 D3 之後,才會執行 _OFF 方法。 如需詳細資訊,請參閱啟用轉換至 D3cold。
將相機硬體傳回主動電源狀態是類似的程式。 當相機控制器驅動程式偵測到第一個串流擷取針腳進入KSSTATE_ACQUIRE狀態時,相機控制器驅動程式會與組成相機子系統之其他 On-SoC 和 off-SoC 元件的驅動程式通訊。 回應中,控制 SoC 影像處理單位的驅動程式會呼叫 IWDFDevice2::StopIdle 方法,通知 PEP 影像處理單位硬體應該開啟電源。 數位相機控制器驅動程式會告訴驅動程式控制其應返回作用中狀態的 Off-SoC 相機元件。 接著,這些驅動程式會呼叫 StopIdle,通知驅動程式架構硬體不再閒置,這會導致 D0 IRP 流經相機設備磁碟機堆疊。 (A D0 IRP 是IRP_MJ_POWER IRP,指定 PowerDeviceD0.) Acpi.sys的DEVICE_POWER_STATE列舉值,藉由執行 ACPI 命名空間中相機裝置底下_PR0物件所識別的_ON方法來回應 D0 IRP。
如果平臺有多個相機裝置,則每個相機裝置都應該有自己的獨立可切換電源軌和電源資源,如 ACPI 命名空間中所述。 針對 ACPI 命名空間中的每個相機裝置,系統整合者必須提供_PLD物件,指出相機裝置位於電腦的前端或背面。 如果相機裝置內建于 clamshell-form-factor 電腦的 lid 中,並在開啟 lid 時面對使用者,則此裝置的_PLD物件應該表示相機位於平臺前面。 如果相機裝置內建于 clamshell-form-factor 電腦的 lid 中,並在開啟 lid 時與使用者相隔,則此裝置的_PLD物件應該表示相機位於系統背面。
喚醒考慮
相機裝置硬體不得支援喚醒。 Windows 不預期相機裝置能夠在新式待命期間從其最低電源狀態喚醒 SoC。 許多行動電話可讓使用者按下相機按鈕時,讓 SoC 從睡眠中喚醒。 Windows 會將相機按鈕視為使用者輸入裝置,其作業與相機裝置、其感應器和選擇性快閃的 Sytem 整合或電源管理無關。