拓撲概觀
就 Windows 驅動程式支援而言,相機子系統包含晶片 (SoC) 元件上的非系統元件,例如相機感測器、選用的自動焦點單元,以及閃光,以及可能的其他相關硬體。 相機硬體也包含SoC上的影像處理單位。
On-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 連結連接到系統,而且可以選擇性地連接到 I2C 總線和一或多個 GPIO 針腳。 相機感測器裝置、可選的閃光燈,以及任何其他非SoC相機元件,必須放在可由ACPI韌體開啟和關閉的電源軌上。
如果除了 MIPI-CSI 連結之外,相機裝置還有 I2C 或 GPIO 針腳來控制相機感測器或快閃裝置,則必須將這些針腳路由傳送至 SoC 上 I2C 控制器或 GPIO 控制器的對應針腳。 系統整合者必須列舉相機感測器和 ACPI 命名空間中相機裝置下_CRS物件中的 I2C 和 GPIO 資源。
注意 系統整合者應該與相機子系統驅動程式開發人員合作,以判斷相機驅動程式預期 GPIO 和 I2C 資源如何排序。 例如,接收兩個I2C資源的驅動程式會根據它們出現在資源清單中的順序來區別它們。 同樣地,接收三個 GPIO 資源的驅動程式預期這些資源會以特定順序列出。 系統整合者必須在 _CRS 物件中以相同順序列舉 I2C 和 GPIO 資源。
相機感測器和閃光裝置必須放在可透過ACPI控制方法開啟和關閉的電源軌上。 我們建議使用來自 SoC 的 GPIO 引腳來控制電源開關硬體。 GPIO 應該列舉在 GPIO 作業區域中,讓 ACPI 控件方法可以變更其狀態。 系統整合者必須描述 ACPI 命名空間中相機裝置的電源資源(感測器、閃光或任何其他相機元件)。 此資源必須包含_ON方法和_OFF方法來變更路由傳送至電源交換器硬體的 GPIO 訊號狀態。 在 ACPI 命名空間中的相機裝置下,系統整合者必須提供_PR0對象和參考電源資源的_PR3物件。
當相機控制器驅動程式偵測到所有串流針腳都進入KSSTATE_STOP狀態時,它會使用私人介面告訴負責控制SoC外部相機元件的驅動程式,不再需要進行擷取。 接著,這些驅動程式會呼叫 IWDFDevice2::ResumeIdle 方法,告知驅動程式架構其硬體閑置。 回應中,驅動程式架構會起始轉換至 D3,這會導致 D3 IRP 流經相機裝置驅動程式堆疊。 (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 影像處理單元硬體應該開啟電源。 相機控制器驅動程式會告知負責控制非SoC相機元件的驅動程式,使它們恢復到作用中狀態。 接著,這些驅動程式會呼叫 StopIdle,通知驅動程式架構硬體不再閒置,這會導致 D0 IRP 流經相機設備驅動器堆疊。 (D0 IRP 是指定為 PowerDeviceD0 的 DEVICE_POWER_STATE 列舉值的 IRP_MJ_POWER IRP。Acpi.sys 通過執行 ACPI 命名空間中相機裝置下由 _PR0 對象識別的電源資源的 _ON 方法來回應 D0 IRP。
如果平臺有多個相機裝置,則每個相機裝置都應該有自己的獨立可切換電源軌和電源資源,如ACPI命名空間中所述。 針對 ACPI 命名空間中的每個相機裝置,系統整合者必須提供_PLD物件,指出相機裝置位於計算機的正面或背面。 如果相機裝置內建於貝殼式設計的計算機蓋子中,並在開啟蓋子時面對使用者,則此裝置的_PLD屬性應該表示相機位於平臺前方。 如果相機裝置內建於 clamshell-form-factor 計算機的蓋子中,並在開啟蓋子時與使用者面向,則此裝置的 _PLD 對象應該表示相機位於系統背面。
引發擔憂
相機裝置硬體不得支持喚醒。 Windows 預計相機裝置無法在新式待命期間從最低電源狀態喚醒 SoC。 當使用者按下相機按鈕時,許多行動電話可讓SoC從睡眠中喚醒。 Windows 會將相機按鈕視為使用者輸入裝置,其作業與相機裝置的 Sytem 整合或電源管理、感測器和選擇性閃光無關。