Оборудование камеры

Обзор топологии

С точки зрения поддержки драйверов Windows подсистема камеры содержит компоненты вне системы на микросхеме (SoC), такие как датчик камеры, необязательный блок автоматического фокуса и вспышка, и, возможно, другое связанное оборудование. Оборудование камеры также включает модули обработки изображений на SoC.

Оборудование обработки изображений, встроенное в SoC, должно управляться питанием через модуль управления питанием (PEP), предоставляемый поставщиком SoC. Оборудование обработки изображений должно быть перечислено как одно устройство в ACPI и управляется драйвером Windows Driver Framework (WDF). Включите системное управление временем ожидания бездействия устройства обработки изображений, чтобы PEP мог управлять любой топологией совместного использования тактовой частоты и линии питания, уникальной для SoC. Любое оборудование обработки изображений в SoC должно быть выключено при отключении устройства камеры.

Некоторые проекты SoC имеют общий блок функций, который выполняет как захват камеры, так и другую обработку изображений и графики. На платформе, которая использует такой SoC, PEP, предоставленный поставщиком SoC, должен учитывать использование этого совместно используемого блока и отключать его, когда все клиенты находятся в состоянии простоя.

На некоторых платформах оборудование для обработки изображений в SoC может использоваться между двумя или более устройствами камеры. В этом случае оборудование обработки изображений мультиплексируется между устройствами камеры. Компоненты каждого устройства камеры должны быть независимо описаны в пространстве имен ACPI и должны быть перечислены как отдельные объекты устройства в диспетчере Windows Plug and Play.

Платформы, имеющие две встроенные камеры (или более), требуются Windows, чтобы иметь возможность использовать (т. е. потоковое содержимое из) обоих (или всех) камер одновременно с любым сочетанием режимов и разрешений, поддерживаемых отдельными камерами. Поставщики SoC, которые не могут соответствовать этому требованию, должны работать с Корпорацией Майкрософт напрямую для реализации драйверов и системного встроенного ПО.

Поддерживаемая конфигурация питания

Windows поддерживает одну конфигурацию управления питанием оборудования для устройств камеры на современных резервных платформах. Короче говоря, каждый датчик камеры должен быть подключен к системе на микросхеме (SoC) через соединение MIPI-CSI и, при желании, может быть подключен к шине I2C и к одному или нескольким выводам GPIO. Устройство датчика камеры, его необязательная вспышка и любые другие компоненты камеры вне SoC должны быть помещены на энергетическую шину, которую можно включить и отключить при помощи встроенного ПО ACPI.

Если в дополнение к ссылке MIPI-CSI устройство камеры имеет выводы I2C или GPIO для управления датчиком камеры или вспышкой, эти выводы должны быть подключены к соответствующим выводам контроллера I2C или контроллера GPIO на SoC. Системный интегратор должен перечислить ресурсы I2C и GPIO для датчика камеры и устройства флэш-памяти в объекте _CRS под устройством камеры в пространстве имен ACPI.

Заметка Системный интегратор должен работать с разработчиком подсистемы камеры, чтобы определить, как драйверы камеры ожидают упорядочения ресурсов GPIO и I2C. Например, драйвер, получающий два ресурса I2C, различает их по порядку, в котором они отображаются в списке ресурсов. Аналогичным образом драйвер, получающий три ресурса GPIO, ожидает, что эти ресурсы будут перечислены в определенном порядке. Системный интегратор должен перечислить ресурсы I2C и GPIO в том же порядке в объекте _CRS.

Датчик камеры и устройство вспышки должны быть подключены к шине питания, которая может быть включена и отключена методами управления ACPI. Мы рекомендуем использовать пин-код GPIO из SoC для управления оборудованием power-switch. GPIO следует выделить в области операций GPIO, чтобы его состояние можно было изменить методами управления ACPI. Системный интегратор должен описать ресурс питания для устройства камеры (датчик, вспышка или любой другой компонент камеры) в пространстве имен ACPI. Этот ресурс должен включать метод _ON и метод _OFF для изменения состояния сигнала GPIO, перенаправленного на оборудование коммутатора питания. Под устройством камеры в пространстве имен ACPI системный интегратор должен предоставить объект _PR0 и объект _PR3, ссылающийся на ресурс питания.

Когда драйвер контроллера камеры обнаруживает, что все штифты потоковой передачи вошли в состояние KSSTATE_STOP, он использует приватный интерфейс, чтобы сообщить драйверам, которые управляют компонентами камеры вне SoC, что захват больше не требуется. В свою очередь, эти драйверы вызывают метод IWDFDevice2::ResumeIdle, чтобы сообщить платформе драйверов, что их оборудование неактивно. В ответ платформа драйверов инициирует переход на D3, что приводит к тому, что D3 IRP будет передаваться через стек драйверов устройств камеры. (IRP D3 — это IRP_MJ_POWER IRP, указывающий значение перечисления DEVICE_POWER_STATE PowerDeviceD3.) Драйвер ACPI Windows, Acpi.sys, будет наблюдать за D3 IRP и выполнять метод _OFF ресурса питания, который определяется объектом _PR3 под устройством камеры в пространстве имен ACPI.

В последнем предложении предыдущего абзаца предполагается, что ресурс питания не обеспечивает питание для устройств, отличных от одного устройства камеры. Если другие устройства имеют ссылки на этот ресурс питания, Acpi.sys будет запускать метод _OFF только после того, как все остальные устройства, ссылающиеся на ресурс питания, перешли на D3. Дополнительные сведения см. в разделе «Включение переходов на D3cold».

Возврат оборудования камеры в активное состояние питания является аналогичным процессом. Когда драйвер контроллера камеры обнаруживает первый пин-код записи потока для ввода состояния KSSTATE_ACQUIRE, драйвер контроллера камеры взаимодействует с драйверами для других компонентов on-SoC и off-SoC, составляющих подсистему камеры. В ответ драйвер, который управляет модулем обработки изображений on-SoC, вызывает метод IWDFDevice2::StopIdle, который сообщает PEP, что оборудование модуля обработки изображений должно быть включено. Драйвер контроллера камеры сообщает драйверам, которые управляют компонентами камеры вне SoC, что они должны вернуться в активное состояние. В свою очередь, эти драйверы вызывают StopIdle, чтобы сообщить платформе драйверов, что оборудование больше неактивно, что приводит к тому, что D0 IRP будет передаваться через стек драйверов устройств камеры. (D0 IRP — это IRP_MJ_POWER IRP, указывающий значение перечисления DEVICE_POWER_STATE PowerDeviceD0.) Acpi.sys отвечает на D0 IRP, выполнив метод _ON ресурса питания, который определяется объектом _PR0 под устройством камеры в пространстве имен ACPI.

Если платформа имеет несколько устройств камеры, каждое устройство камеры должно иметь собственный собственный автономный переключатель питания и ресурс питания, описанный в пространстве имен ACPI. Для каждого устройства камеры в пространстве имен ACPI системный интегратор должен предоставить объект _PLD, указывающий, находится ли устройство камеры на передней или задней части компьютера. Если устройство камеры встроено в крышку компьютера раскладного типа и направлено на пользователя при открытии крышки, _PLD объект этого устройства должен указать, что камера находится на передней стороне платформы. Если устройство камеры встроено в крышку ноутбука форм-фактора раскладушки и отворачивается от пользователя, когда крышка открыта, объект _PLD этого устройства должен указать, что камера находится на задней части системы.

Проблемы пробуждения

Аппаратное обеспечение устройства камеры не должно поддерживать пробуждение. Windows не предполагает, что устройства камеры смогут вывести SoC из его наинизшего уровня энергопотребления во время современного ожидания. Многие мобильные телефоны позволяют SoC проснуться от сна, когда пользователь нажимает кнопку камеры. Кнопка камеры обрабатывается Windows как устройство ввода пользователя, работа которой отделена от системной интеграции или управления питанием устройства камеры, её датчика и необязательной вспышки.