카메라 전원 관리
전원 관리 모드
카메라 하위 시스템의 off-SoC(off-System on a Chip) 구성 요소는 두 가지 전원 관리 모드를 지원해야 합니다. 카메라 구성 요소는 카메라 디바이스에서 콘텐츠를 애플리케이션에 적극적으로 스트림하는 활성 모드를 지원해야 합니다. 또한 카메라 구성 요소는 카메라 디바이스가 꺼지고 전원이 제거되고 카메라 디바이스에서 0와트를 소비하는 전원 제거 모드를 지원해야 합니다. 다음 표에서는 카메라 디바이스에 대한 활성 및 전원 제거 전원 관리 모드에 대해 설명합니다.
Mode | Description | 디바이스 전원 상태(Dx) | 평균 전력 소모량 | 활성으로 대기 시간 종료 | 전환 메커니즘 |
---|---|---|---|---|---|
활성(스트리밍) |
카메라 디바이스에서 콘텐츠를 애플리케이션에 적극적으로 스트림하고 있습니다. 콘텐츠는 완전 작동, 미리 보기 또는 스틸 사진 캡처일 수 있습니다. |
Yes |
센서, AF 및 플래시 특정 |
해당 없음 |
소프트웨어 시작 D0 전환 (애플리케이션에서 캡처 핀의 상태를 KSSTATE_ACQUIRE로 설정하여 스트리밍을 시작했습니다.) |
전원 - 제거 |
카메라 디바이스에서 콘텐츠를 애플리케이션에 스트림하지 않습니다. 카메라 센서, 플래시 디바이스 또는 자동 초점 엔진에는 컨텍스트가 보존되지 않습니다. |
Yes |
0와트 |
첫 번째 프레임까지 200밀리초 미만(표 뒤에 나오는 참고 참조) |
소프트웨어 시작 D3 전환 (모든 스트리밍 핀의 상태는 KSSTATE_RUN 이외의 값으로 설정되었습니다.) |
참고 Windows에서는 활성 모드에서 전원 제거 모드로의 전환 시간(끄기 대기 시간)이 100밀리초 미만이어야 합니다. 대부분의 전원 관리 작업은 전원 제거 모드에서 활성 모드(대기 시간)로의 전환 시간을 줄이는 데 중점을 둡니다.
활성 및 전원 제거의 동일한 두 가지 전원 관리 모드는 on-SoC 이미지 처리 장치에서 지원해야 합니다. SoC 공급업체는 이미지 처리 장치와 해당 전원 관리 상태를 구성하는 개별 구성 요소를 정의합니다. 단일 드라이버에서 on-SoC 이미지 처리 장치를 제어하고, 카메라 캡처용 모든 이미지 처리 장치를 단일 전원 관리 구성 요소로 PEP(전원 엔진 플러그 인)에 제공하는 것이 좋습니다.
소프트웨어 전원 관리 메커니즘
시스템이 연결된 대기 상태이고 디스플레이가 꺼져 있을 때 on-SoC(on-System on a Chip) 이미지 처리 장치와 off-SoC 카메라 구성 요소는 모두 전원을 소비하지 않아야 합니다(0와트). 전원 관리를 위한 기본 소프트웨어 메커니즘은 카메라 캡처 핀의 참조 계산입니다. 이 참조 수는 AVStream 미니 드라이버인 카메라 컨트롤러 드라이버에서 유지합니다. 이 기본 전원 관리 메커니즘은 시스템 디스플레이가 켜져 있는 시간을 포함하여 시스템이 켜져 있을 때마다 사용할 수 있습니다.
카메라 컨트롤러 드라이버는 전원 관리 상태 전환을 카메라 센서, 자동 초점기 및 플래시와 같은 off-SoC 구성 요소를 제어하는 드라이버에 전달해야 합니다. 이에 대응하여 이러한 디바이스를 제어하는 드라이버는 전원 상태를 변경하고 전원을 제거하거나 적용하기 위한 특정 작업을 수행해야 합니다.
권장되는 드라이버 아키텍처
카메라 하위 시스템은 카메라 컨트롤러 드라이버라는 단일 AVStream 미니 드라이버를 통해 Windows에 공개되어야 합니다. 카메라 컨트롤러 드라이버에서 하드웨어에 직접 액세스하지 않고 하드웨어 구성 요소의 전원을 직접 관리하지 않는 것이 좋습니다. 대신 카메라 컨트롤러 드라이버는 전원 관리 및 하드웨어 요청을 카메라 하위 시스템을 구성하는 다른 드라이버에 전달해야 합니다.
on-SoC 이미지 처리 하드웨어는 SoC PEP(전원 엔진 플러그 인)를 통해 전원을 관리해야 합니다. 이미지 처리 하드웨어는 WDF(Windows 드라이버 프레임워크) 드라이버에서 관리해야 하며, 이 드라이버는 WDF_DEVICE_POWER_POLICY_IDLE_SETTINGS 구조체의 IdleTimeout 멤버를 SystemManagedIdleTimeout으로 설정하여 PEP와 협력할 수 있도록 설정해야 합니다. 이 설정을 통해 PEP는 SoC 하드웨어에 고유한 모든 클록 및 전원 레일 공유 토폴로지를 제어할 수 있습니다. SoC에서 이미지 처리 장치를 제어하는 드라이버는 전원 관리를 위한 기본 WDF 기능을 사용할 수 있도록 전체 이미지 처리 장치를 단일 전원 관리 구성 요소로 나타내야 합니다.
off-SoC 카메라 하위 시스템 구성 요소는 하나 이상의 KMDF(커널 모드 드라이버 프레임워크) 드라이버에서 관리해야 합니다. 구성 요소가 카메라 캡처에 더 이상 필요하지 않은 경우 off-SoC 구성 요소용 드라이버에서 전원 제거(D3) 상태로 전환해야 합니다. 또한 off-SoC 구성 요소용 드라이버는 D3cold를 사용하도록 설정해야 합니다. 그러면 기본 ACPI 하위 시스템에서 GPIO 선의 상태를 변경하여 전원을 적용하고 제거할 수 있습니다. 자세한 내용은 드라이버에서 D3cold 지원을 참조하세요.
다음 블록 다이어그램에서는 권장되는 드라이버 아키텍처를 보여 줍니다.
카메라 컨트롤러 드라이버, 이미지 처리 장치 드라이버 및 off-SoC 카메라 구성 요소용 드라이버를 포함하여 카메라 하위 시스템을 구성하는 모든 드라이버는 동일한 드라이버 설치(.inf) 파일에 열거되어야 합니다. 모든 카메라 하위 시스템 드라이버는 이미징 PnP 디바이스 설정 클래스의 멤버여야 합니다. 이미징 디바이스에 대한 ClassGuid는 {6bdd1fc6-810f-11d0-bec7-08002be2092f}입니다.
단일 카메라 구성 요소를 나타내는 각 드라이버는 ACPI 네임스페이스에서 단일 디바이스로 열거되어야 합니다.
활성 및 전원 제거 상태
카메라 디바이스에서 콘텐츠를 스트림하는 애플리케이션이 없는 경우 카메라 컨트롤러 드라이버는 카메라 디바이스를 전원 제거 상태로 전환해야 합니다. 사용자가 애플리케이션을 닫았거나 백그라운드로 전환하여 일시 중단했으므로 해당 애플리케이션에서 스트리밍을 중지할 수 있습니다.
애플리케이션이 디바이스가 전원 제거 상태인 카메라에서 스트리밍을 시작하는 경우 카메라 컨트롤러 드라이버는 카메라 디바이스를 100밀리초 이내에 활성 상태로 다시 전환해야 합니다.
다양한 카메라 하위 시스템 구성 요소의 전원 상태를 변경하기 위해 카메라 컨트롤러 드라이버는 독점 인터페이스를 사용하여 카메라 하위 시스템을 구성하는 다른 드라이버와 통신합니다. 적절한 인터페이스를 쿼리하려면 카메라 하위 시스템 드라이버에서 함수 포인터 세트를 검색하는 IRP_MN_QUERY_INTERFACE I/O 요청을 보내는 표준 방법을 사용해야 합니다.
모든 스트리밍 핀이 KSSTATE_STOP 상태가 되면 카메라 컨트롤러 드라이버에서 카메라 디바이스를 전원 제거 상태로 유지 합니다. 사용자가 전원 단추를 누르고 시스템이 연결된 대기 상태가 되면 Windows에서 포그라운드 애플리케이션을 일시 중단합니다. 캡처 애플리케이션이 일시 중단되면 Windows 런타임에서 제공하는 카메라 캡처 API에서 알림을 받고 카메라 캡처 핀의 상태를 변경하여 KSSTATE_STOP 상태가 됩니다.
첫 번째 스트리밍 핀이 KSSTATE_ACQUIRE 상태가 되면 카메라 컨트롤러 드라이버는 on-SoC 이미지 처리 장치를 포함한 카메라 디바이스를 활성 상태로 유지해야 합니다.
관련 카메라 기능
카메라 센서 및 플래시 디바이스에는 드라이버에서 관리해야 하는 추가 플랫폼 수준 기능이 있을 수 있습니다. 다음과 같은 기능이 포함될 수 있습니다.
- I2C 버스를 통해 카메라 센서 사용, 사용 안 함 및 구성
- I2C 버스를 통해 플래시 버스트 속도 및 밝기 수준 구성
- 플래시 모듈에서 SoC까지의 GPIO 선을 통해 플래시 모듈에서 열 조건 감지
이러한 기능을 구현하기 위해 카메라 장치 드라이버 개발자는 다음 표에 요약된 방법과 지침을 사용해야 합니다.
함수 | 설명 | 하드웨어/펌웨어 연결 | 소프트웨어 메커니즘 |
---|---|---|---|
센서 구성 | 카메라 센서 하드웨어의 기능을 열거하거나 현재 작동 모드를 구성합니다. | I2C 버스를 통한 통신. I2C 리소스는 ACPI 네임스페이스의 카메라 디바이스 아래에 있는 _CRS 메서드에 설명되어 있습니다. | SPB(Simple Peripheral Bus) I/O(입/출력) 요청 인터페이스는 I2C 호스트 컨트롤러 및 카메라 센서 디바이스와 통신하는 데 사용됩니다. |
센서 이벤트 감지 | 카메라 센서에서 SoC까지의 GPIO 선을 사용하여 이벤트를 발생시키거나 상태를 표시합니다. | 카메라 디바이스에 제공되는 GPIO 리소스. 이러한 리소스는 ACPI 네임스페이스의 카메라 디바이스 아래에 있는 _CRS 메서드에 설명되어 있습니다. 이벤트 신호를 보내는 GPIO 핀은 GPIO 인터럽트 리소스로 설명되어야 합니다. | 인터럽트는 GPIO 이벤트에 대한 응답으로 드라이버에서 처리됩니다. SPB I/O 요청 인터페이스는 인터럽트의 원인을 확인하기 위해 센서 디바이스와 통신하는 데 사용됩니다. |
플래시 구성 | 버스트 속도, 연결된 LED 수 또는 기타 속성에 대해 플래시 디바이스를 구성합니다. | I2C 버스를 통한 통신. I2C 리소스는 ACPI 네임스페이스의 카메라 디바이스 아래에 있는 _CRS 메서드에 설명되어 있습니다. | SPB I/O 요청 인터페이스는 I2C 호스트 컨트롤러 및 카메라 센서 디바이스와 통신하는 데 사용됩니다. |
이미지 처리 장치 드라이버와의 조정 | SoC의 이미지 처리 회로를 사용하여 캡처를 시작하고 조정합니다. | 해당 없음 | 프라이빗 인터페이스는 이미지 처리 장치를 관리하는 드라이버에서 표시합니다. |
카메라 디바이스 열거
플랫폼에서 카메라 디바이스를 식별하기 위해 애플리케이션은 일반적으로 PnP(플러그 앤 플레이) 관리자에서 카메라 디바이스 인스턴스를 쿼리합니다. 각 PnP 인스턴스는 단일 카메라 디바이스에 해당합니다. 이러한 인스턴스를 식별하기 위해 시스템 통합자는 ACPI 네임스페이스에서 카메라 디바이스를 정의합니다. 카메라 디바이스는 콘텐츠를 한 번에 하나의 애플리케이션으로만 스트림할 수 있습니다. 그러나 애플리케이션은 여러 카메라 디바이스에서 동시에 스트림할 수 있습니다.
카메라 컨트롤러 드라이버(AVStream 미니 드라이버)에서 나타내는 각 카메라 디바이스는 ACPI 네임스페이스에서 그래픽 드라이버의 자식인 별도의 디바이스로 열거되어야 합니다.
특별한 경우로서, SoC 플랫폼에서 플랫폼의 모든 카메라 디바이스로부터 콘텐츠를 보고된 해상도 또는 모드의 조합으로 동시에 스트림할 수 없는 경우 단일 카메라 디바이스를 대신 열거할 수 있습니다. 그러나 이 구현은 신중하게 고려해야 하며 Microsoft와만 직접 협력하여 수행해야 합니다.
on-SoC 이미지 처리 장치와 off-SoC 카메라 센서, 자동 초점기 및 플래시를 포함하여 카메라 하위 시스템의 나머지 부분을 나타내는 디바이스는 ACPI 네임스페이스에서 하나 이상의 디바이스로 열거되어야 합니다. on-SoC 이미지 처리 장치는 카메라의 off-SoC 구성 요소를 나타내는 디바이스와 별도의 디바이스로 열거되어야 합니다.
카메라 전원 관리 검사 목록
시스템 통합자, 카메라 센서 공급업체 및 SoC(System on a Chip) 공급업체에서 이 문서의 검사 목록을 사용하여 시스템 전원 관리 설계가 Windows 10과 호환되는지 확인해야 합니다.
- 시스템 통합자는 카메라 센서 구성 요소를 선택하고 카메라 디바이스를 통합할 때 SoC 공급업체와 통신하고 협력해야 합니다.
- 카메라 컨트롤러 드라이버 개발자는 다음 작업을 수행해야 합니다.
- 애플리케이션이 더 이상 카메라 디바이스에서 콘텐츠를 스트림하지 않는 경우 카메라 하드웨어의 전원을 끕니다. (이 작업은 모든 캡처 핀이 KSSTATE_STOP 상태일 때 수행합니다.)
- 애플리케이션이 카메라 디바이스의 캡처 핀에서 스트리밍을 시작하는 경우 카메라 하드웨어의 전원을 켭니다.
- on-SoC 이미지 처리 장치를 관리하는 하나의 KMDF 드라이버를 개발합니다. 카메라 컨트롤러 드라이버는 사용자 지정 드라이버 인터페이스를 사용하여 카메라 캡처를 이미지 처리 장치 드라이버에서 시작하거나 종료하도록 지시해야 합니다.
- SoC 공급업체에서 제공한 PEP에서 이미지 처리 장치 하드웨어의 전원 관리를 제어할 수 있도록 이미지 처리 장치 드라이버가 Windows PoFx(전원 관리 프레임워크)에 등록되어 있는지 확인합니다.
- 카메라 센서, 자동 초점기 및 플래시(선택 사항)를 포함하여 off-SoC 카메라 하드웨어를 관리하는 각 하드웨어 구성 요소를 관리하는 하나의 WDF(Windows 드라이버 프레임워크) 드라이버를 개발합니다. 카메라 컨트롤러 드라이버는 사용자 지정 드라이버 인터페이스를 사용하여 off-SoC 카메라 하드웨어에서 카메라 캡처를 시작하거나 종료하도록 드라이버에 지시해야 합니다.
- ACPI에 D3 전환을 알리고 구성 요소에서 전원을 제거할 수 있도록 카메라 구성 요소의 전원을 끄면 off-SoC 카메라 하드웨어를 관리하는 드라이버에서 D3 전환을 시작하도록 합니다. • ACPI에 D0 전환을 알리고 전원을 구성 요소에 적용할 수 있도록 카메라 구성 요소의 전원을 켜면 off-SoC 카메라 하드웨어를 관리하는 드라이버에서 D0 전환을 시작하도록 합니다.
- 카메라 센서 하드웨어 또는 플래시 디바이스의 구성을 관리하기 위한 드라이버 코드를 개발합니다.
- 카메라 센서 하드웨어 또는 플래시 디바이스를 관리하는 데 필요한 GPIO 및 I2C 리소스의 예상 순서에 대해 시스템 통합자에게 알립니다.
- 카메라 하위 시스템을 구성하는 모든 드라이버가 동일한 드라이버 설치(.inf) 파일에 열거되어 있는지 확인합니다.
- 카메라 하위 시스템을 구성하는 모든 드라이버가 이미징 PnP 디바이스 설정 클래스의 멤버인지 확인합니다. 이미징 디바이스에 대한 ClassGuid는 {6bdd1fc6-810f-11d0-bec7-08002be2092f}입니다.
- 시스템 통합자는 다음 작업을 수행하도록 플랫폼 ACPI 펌웨어를 설계해야 합니다.
- ACPI 네임스페이스에서 각 카메라 디바이스를 별도의 디바이스로 열거합니다.
- 카메라가 컴퓨터의 전면 또는 후면에 있는지 여부를 나타낼 수 있도록 _PLD 개체를 ACPI 네임스페이스의 각 카메라 디바이스 아래에 포함합니다.
- 전원 리소스를 각 카메라 디바이스의 ACPI 네임스페이스 루트에 포함합니다. 지정된 카메라 디바이스(센서, AF, 플래시 등)에 대한 모든 off-SoC 하드웨어 구성 요소는 하나의 전원 리소스에 있어야 합니다.
- 전원 레일 전환 하드웨어를 구동하는 SoC에서 GPIO 핀의 상태를 변경할 수 있도록 각 전원 리소스에 대한 _ON 및 _OFF 제어 메서드를 구현합니다.
- 각 카메라 디바이스 및 관련 하드웨어의 전원 리소스를 참조할 수 있도록 _PR0 및 _PR3 메서드를 네임스페이스의 각 카메라 디바이스 아래에 제공합니다.
- 카메라 센서 및 플래시 하드웨어에 대한 GPIO 및 I2C 리소스를 열거할 수 있도록 _CRS 개체를 ACPI 네임스페이스의 각 카메라 디바이스 아래에 있는 제공합니다. GPIO 및 I2C 리소스는 카메라 센서 드라이버 개발자가 지정한 순서대로 있어야 합니다.
- 시스템 통합자는 플랫폼 하드웨어 및 전원 라우팅을 다음과 같이 설계해야 합니다.
- 각 카메라 디바이스에는 다른 카메라 디바이스에 대한 전원 레일과 별도로 제어할 수 있는 자체 전원 레일이 있으며, 이 전원 레일은 SoC에서 GPIO 핀으로 켜고 끌 수 있습니다.
- 시스템 통합자는 다음 사항을 테스트하고 확인해야 합니다.
- 애플리케이션에서 카메라 디바이스를 사용하지 않는 경우 카메라 디바이스 하드웨어에서 전력을 소비하지 않습니다(0와트). 시스템 통합자는 계측 하드웨어를 사용하여 이 전력 소모량을 측정해야 합니다.