3A 모드 및 상태 전환

실제 3A 알고리즘은 HAL 구현에 따라 달라지지만, HAL 인터페이스는 HAL 기기와 프레임워크가 3A의 현재 상태에 관해 통신하고 3A 이벤트를 트리거할 수 있도록 개략적인 수준의 상태 머신 설명을 정의합니다.

기기가 열리면 모든 개별 3A 상태는 STATE_INACTIVE여야 합니다. 스트림 구성은 3A를 재설정하지 않습니다. 예를 들어 고정된 초점은 configure() 호출 전반에서 유지되어야 합니다.

3A 작업을 트리거하려면 트리거의 시작을 가리키는 다음 요청에 관한 설정 내에서 관련 트리거 항목을 설정하기만 하면 됩니다. 예를 들어 요청 시 ANDROID_CONTROL_AF_TRIGGER 항목을 ANDROID_CONTROL_AF_TRIGGER_START로 설정하면 자동 초점 스캔 시작이 트리거되고, ANDROID_CONTROL_AF_TRIGGER를 ANDROID_CONTRL_AF_TRIGGER_CANCEL로 설정하면 자동 초점 스캔 취소가 트리거됩니다. 그러지 않으면 항목이 존재하지 않거나 ANDROID_CONTROL_AF_TRIGGER_IDLE로 설정됩니다. 트리거 항목이 IDLE이 아닌 값으로 설정된 각 요청은 독립된 트리거 이벤트로 처리됩니다.

최상위 수준에서 3A는 ANDROID_CONTROL_MODE 설정에 의해 제어됩니다. 3A 사용 안 함(ANDROID_CONTROL_MODE_OFF), 일반 자동 모드(ANDROID_CONTROL_MODE_AUTO), 장면 모드 설정 사용(ANDROID_CONTROL_USE_SCENE_MODE) 중에서 선택합니다.

  • 오프 모드에서는 개별 자동 초점(AF), 자동 노출(AE) 및 자동 화이트 밸런스(AWB) 모드가 사실상 꺼지며 캡처 컨트롤이 3A 루틴에 의해 재정의되지 않습니다.
  • 자동 모드에서는 AF, AE 및 AWB 모드가 모두 자체적으로 독립 알고리즘을 실행하며 다음 섹션에 나열된 것과 같이 자체 모드, 상태 및 트리거 메타데이터 항목을 갖습니다.
  • USE_SCENE_MODE에서 3A 루틴의 동작을 결정하려면 ANDROID_CONTROL_SCENE_MODE 항목의 값을 사용해야 합니다. FACE_PRIORITY가 아닌 SCENE_MODE에서 HAL은 ANDROID_CONTROL_AE/AWB/AF_MODE의 값을 선택된 SCENE_MODE에서 선호하는 모드로 재정의해야 합니다. 예를 들어 HAL은 CONTINUOUS_FOCUS AF 모드를 사용하는 데 SCENE_MODE_NIGHT를 선호할 수 있기 때문입니다. 이러한 장면 모드에서는 사용자의 AE/AWB/AF_MODE 선택이 무시되어야 합니다.
  • SCENE_MODE_FACE_PRIORITY의 경우 AE/AWB/AFMODE 컨트롤은 ANDROID_CONTROL_MODE_AUTO에서와 같이 작동하지만, 3A 루틴은 장면에서 감지된 얼굴을 측광하고 초점을 맞추는 방향으로 동작해야 합니다.

자동 초점 설정 및 결과 항목

기본 메타데이터 항목
ANDROID_CONTROL_AF_MODE 현재 자동 초점 모드 선택을 제어합니다. 요청 설정의 프레임워크에 의해 설정됩니다.
AF_MODE_OFF AF가 사용 중지됩니다. 프레임워크/앱이 렌즈 위치를 직접 제어합니다.
AF_MODE_AUTO 한 번의 스위프로 초점을 자동으로 맞춥니다. AF가 트리거되지 않으면 렌즈가 움직이지 않습니다.
AF_MODE_MACRO 한 번의 스위프로 근거리 초점을 자동으로 맞춥니다. AF가 트리거되지 않으면 렌즈가 움직이지 않습니다.
AF_MODE_CONTINUOUS_VIDEO 중단 없이 연속으로 초점을 맞춰 동영상을 녹화합니다. 트리거하면 초점이 즉시 현재 위치로 고정됩니다. 취소하면 연속 초점 촬영이 재개됩니다.
AF_MODE_CONTINUOUS_PICTURE 셔터 랙 없는 스틸 캡처를 위한 빠른 연속 초점 촬영입니다. 트리거하면 현재 진행 중인 스위프가 끝날 때 초점이 고정됩니다. 취소하면 연속 초점 촬영이 재개됩니다.
AF_MODE_EDOF 고급 확장 심도 초점 촬영입니다. 자동 초점 스캔이 없으므로 트리거하거나 취소해도 효과가 없습니다. 이미지는 HAL에 의해 자동으로 초점이 맞춰집니다.
ANDROID_CONTROL_AF_STATE 결과 메타데이터에서 HAL에 의해 보고된 현재 AF 알고리즘 상태를 설명하는 동적 메타데이터입니다.
AF_STATE_INACTIVE 초점이 맞춰지지 않았거나 알고리즘이 재설정되었습니다. 렌즈가 움직이지 않습니다. 항상 MODE_OFF 또는 MODE_EDOF 상태입니다. 기기가 열리면 이 상태로 시작되어야 합니다.
AF_STATE_PASSIVE_SCAN 연속 초점 알고리즘이 적절한 초점을 맞추기 위해 현재 스캔 중입니다. 렌즈가 움직입니다.
AF_STATE_PASSIVE_FOCUSED 연속 초점 알고리즘이 초점이 잘 맞았다고 판단합니다. 렌즈가 움직이지 않습니다. HAL은 자발적으로 이 상태를 벗어날 수 있습니다.
AF_STATE_PASSIVE_UNFOCUSED 연속 초점 알고리즘이 초점이 잘 맞지 않았다고 판단합니다. 렌즈가 움직이지 않습니다. HAL은 자발적으로 이 상태를 벗어날 수 있습니다.
AF_STATE_ACTIVE_SCAN 사용자가 트리거한 스캔이 진행 중입니다.
AF_STATE_FOCUSED_LOCKED AF 알고리즘이 초점이 맞았다고 판단합니다. 렌즈가 움직이지 않습니다.
AF_STATE_NOT_FOCUSED_LOCKED AF 알고리즘이 초점을 맞출 수 없습니다. 렌즈가 움직이지 않습니다.
ANDROID_CONTROL_AF_TRIGGER 자동 초점 스캔을 시작하는 작업을 제어하며, 그 의미는 모드와 상태에 따라 달라집니다. 요청 설정의 프레임워크에 의해 설정됩니다.
AF_TRIGGER_IDLE 현재 트리거가 없습니다.
AF_TRIGGER_START AF 스캔 시작을 트리거합니다. 효과는 모드와 상태에 따라 다릅니다.
AF_TRIGGER_CANCEL 현재 AF 스캔이 있으면 취소하고 알고리즘을 기본값으로 재설정합니다.
추가 메타데이터 항목
ANDROID_CONTROL_AF_REGIONS 초점이 제대로 맞았는지 확인하기 위해 사용할 시야(FOV) 영역을 선택하는 작업을 제어합니다. 이는 초점을 스캔하는 모든 AF 모드에 적용됩니다. 요청 설정의 프레임워크에 의해 설정됩니다.

자동 노출 설정 및 결과 항목

기본 메타데이터 항목
ANDROID_CONTROL_AE_MODE 현재 자동 노출 모드를 선택하는 작업을 제어합니다. 요청 설정의 프레임워크에 의해 설정됩니다.
AE_MODE_OFF 자동 노출이 사용 중지됩니다. 사용자는 노출, 게인, 프레임 지속 시간, 플래시를 제어합니다.
AE_MODE_ON 표준 자동 노출로, 플래시 제어는 사용 중지됩니다. 사용자가 플래시 또는 토치 모드 중 선택하여 설정할 수 있습니다.
AE_MODE_ON_AUTO_FLASH 플래시를 켠 상태의 표준 자동 노출로, 필요한 경우 HAL이 사전 및 스틸 캡처를 결정합니다. 플래시의 사용자 제어는 사용 중지됩니다.
AE_MODE_ON_ALWAYS_FLASH 표준 자동 노출로, 캡처 시 항상 플래시를 사용하며 필요한 경우 HAL이 사전 캡처 시 항상 플래시를 사용할지를 결정합니다. 플래시의 사용자 제어는 사용 중지됩니다.
AE_MODE_ON_AUTO_FLASH_REDEYE 플래시를 켠 상태의 표준 자동 노출로, 필요한 경우 HAL이 사전 및 스틸 캡처를 결정합니다. 사전 캡처 시퀀스 마지막에 플래시 버스트를 사용하여 최종 사진의 적목 현상을 줄입니다. 플래시의 사용자 제어는 사용 중지됩니다.
ANDROID_CONTROL_AE_STATE 결과 메타데이터에서 HAL에 의해 보고된 현재 AE 알고리즘 상태를 설명하는 동적 메타데이터입니다.
AE_STATE_INACTIVE 모드 전환 이후의 초기 AE 상태입니다. 기기가 열리면 이 상태로 시작되어야 합니다.
AE_STATE_SEARCHING AE가 적절한 값으로 수렴되지 않으며 노출 매개변수를 조정합니다.
AE_STATE_CONVERGED AE가 현재 장면의 적절한 노출 값을 찾았고 노출 매개변수는 변경되지 않습니다. HAL은 더 나은 해결책을 찾기 위해 자발적으로 이 상태를 벗어날 수 있습니다.
AE_STATE_LOCKED AE가 AE_LOCK 컨트롤로 고정되었습니다. 노출 값은 변경되지 않습니다.
AE_STATE_FLASH_REQUIRED HAL이 노출을 수렴했지만, 충분히 밝은 사진을 찍으려면 플래시가 필요하다고 판단합니다. 셔터 랙이 없는 프레임을 사용할 수 있는지 판단하는 데 사용됩니다.
AE_STATE_PRECAPTURE HAL이 사전 캡처 시퀀스 중에 있습니다. AE 모드에 따라, 이 모드에서는 측광을 위해 플래시를 발광하거나 적목 현상 감소를 위해 플래시 펄스를 연속하여 발광할 수 있습니다.
ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER 고화질 이미지를 캡처하기 전에 측광 시퀀스의 시작을 제어합니다. 요청 설정의 프레임워크에 의해 설정됩니다.
PRECAPTURE_TRIGGER_IDLE 현재 트리거가 없습니다.
PRECAPTURE_TRIGGER_START 사전 캡처 시퀀스를 시작합니다. HAL은 향후 고해상도 캡처에 적합한 노출 및 화이트 밸런스를 측정하기 위한 후속 요청을 사용해야 합니다.
추가 메타데이터 항목
ANDROID_CONTROL_AE_LOCK AE 컨트롤을 현재 값으로 고정하는 작업을 제어합니다.
ANDROID_CONTROL_AE_EXPOSURE_COMPENSATION AE 알고리즘 타겟 밝기 지점을 조정하는 작업을 제어합니다.
ANDROID_CONTROL_AE_TARGET_FPS_RANGE AE 알고리즘의 타겟 프레임 속도 범위를 선택하는 작업을 제어합니다. AE 루틴은 이 범위를 벗어나는 프레임 속도로 변경할 수 없습니다.
ANDROID_CONTROL_AE_REGIONS 적절한 노출 수준을 결정하는 데 사용해야 하는 FOV의 영역을 선택하는 작업을 제어합니다. 이는 오프 이외의 모든 AE 모드에 적용됩니다.

자동 화이트 밸런스 설정 및 결과 항목

기본 메타데이터 항목
ANDROID_CONTROL_AWB_MODE 현재 화이트 밸런스 모드를 선택하는 작업을 제어합니다.
AWB_MODE_OFF 자동 화이트 밸런스가 사용 중지됩니다. 사용자가 색상 매트릭스를 제어합니다.
AWB_MODE_AUTO 자동 화이트 밸런스가 사용 설정됩니다. 3A는 단순한 매트릭스보다 더 복잡한 변환을 사용하여 색상 변환을 제어합니다.
AWB_MODE_INCANDESCENT 실내 백열(텅스텐) 조명에 적합한 고정 화이트 밸런스 설정입니다(약 2700K).
AWB_MODE_FLUORESCENT 형광등 조명에 적합한 고정 화이트 밸런스 설정입니다(약 5000K).
AWB_MODE_WARM_FLUORESCENT 형광등 조명에 적합한 고정 화이트 밸런스 설정입니다(약 3000K).
AWB_MODE_DAYLIGHT 일광에 적합한 고정 화이트 밸런스 설정입니다(약 5500K).
AWB_MODE_CLOUDY_DAYLIGHT 흐린 일광에 적합한 고정 화이트 밸런스 설정입니다(약 6500K).
AWB_MODE_TWILIGHT 일몰 및 일출에 적합한 고정 화이트 밸런스 설정입니다(약 15000K).
AWB_MODE_SHADE 태양의 간접 조명을 받는 지역에 적합한 고정 화이트 밸런스 설정입니다(약 7500K).
ANDROID_CONTROL_AWB_STATE 결과 메타데이터에서 HAL에 의해 보고된 현재 AWB 알고리즘 상태를 설명하는 동적 메타데이터입니다.
AWB_STATE_INACTIVE 모드 전환 이후의 초기 AWB 상태입니다. 기기가 열리면 이 상태로 시작되어야 합니다.
AWB_STATE_SEARCHING AWB가 적절한 값으로 수렴되지 않고 색상 조정 매개변수가 변경됩니다.
AWB_STATE_CONVERGED AWB가 현재 장면에 적합한 색상 조정 값을 찾았으며 매개변수가 변경되지 않습니다. HAL은 더 나은 해결책을 찾기 위해 자발적으로 이 상태를 벗어날 수 있습니다.
AWB_STATE_LOCKED AWB가 AWB_LOCK 컨트롤로 고정되었습니다. 색상 조정 값은 변경되지 않습니다.
추가 메타데이터 항목
ANDROID_CONTROL_AWB_LOCK AWB 색상 조정을 현재 값에 고정하는 작업을 제어합니다.
ANDROID_CONTROL_AWB_REGIONS 적절한 색상 균형을 결정하는 데 사용해야 하는 FOV의 영역을 선택하는 작업을 제어합니다. 이는 자동 화이트 밸런스 모드에만 적용됩니다.

일반 상태 머신 전환 관련 참고사항

AF, AE 또는 AWB 모드 간에 전환하면 항상 알고리즘의 상태가 INACTIVE로 재설정됩니다. 마찬가지로 CONTROL_MODE == USE_SCENE_MODE인 경우 CONTROL_MODE 또는 CONTROL_SCENE_MODE 간에 전환하면 모든 알고리즘 상태가 INACTIVE로 재설정됩니다.

아래의 표에 각 모드에 관한 설명이 나와 있습니다.

AF 상태 머신

mode = AF_MODE_OFF 또는 AF_MODE_EDOF
상태 변환 원인 새 상태 참고
INACTIVE AF가 사용 중지됨
mode = AF_MODE_AUTO 또는 AF_MODE_MACRO
상태 변환 원인 새 상태 참고
INACTIVE AF_TRIGGER ACTIVE_SCAN

AF 스위프 시작

렌즈가 이제 움직임

ACTIVE_SCAN AF 스위프 완료 FOCUSED_LOCKED

AF에 성공하는 경우

렌즈가 이제 고정됨

ACTIVE_SCAN AF 스위프 완료 NOT_FOCUSED_LOCKED

AF에 성공하는 경우

렌즈가 이제 고정됨

ACTIVE_SCAN AF_CANCEL INACTIVE

AF 취소/재설정

렌즈가 이제 고정됨

FOCUSED_LOCKED AF_CANCEL INACTIVE AF 취소/재설정
FOCUSED_LOCKED AF_TRIGGER ACTIVE_SCAN

새로운 스위프 시작

렌즈가 이제 움직임

NOT_FOCUSED_LOCKED AF_CANCEL INACTIVE AF 취소/재설정
NOT_FOCUSED_LOCKED AF_TRIGGER ACTIVE_SCAN

새로운 스위프 시작

렌즈가 이제 움직임

모든 상태 모드 변경 INACTIVE
mode = AF_MODE_CONTINUOUS_VIDEO
상태 변환 원인 새 상태 참고
INACTIVE HAL이 새 스캔 시작 PASSIVE_SCAN

AF 스위프 시작

렌즈가 이제 움직임

INACTIVE AF_TRIGGER NOT_FOCUSED_LOCKED

AF 상태 쿼리

렌즈가 이제 고정됨

PASSIVE_SCAN HAL이 현재 스캔 완료 PASSIVE_FOCUSED

AF 스캔 종료

렌즈가 이제 고정됨

PASSIVE_SCAN AF_TRIGGER FOCUSED_LOCKED

초점이 맞는 경우 즉시 변환

렌즈가 이제 고정됨

PASSIVE_SCAN AF_TRIGGER NOT_FOCUSED_LOCKED

초점이 맞지 않는 경우 즉시 변환

렌즈가 이제 고정됨

PASSIVE_SCAN AF_CANCEL INACTIVE

렌즈 위치 재설정

렌즈가 이제 고정됨

PASSIVE_FOCUSED HAL이 새 스캔 시작 PASSIVE_SCAN

AF 스캔 시작

렌즈가 이제 움직임

PASSIVE_FOCUSED AF_TRIGGER FOCUSED_LOCKED

초점이 맞는 경우 즉시 변환

렌즈가 이제 고정됨

PASSIVE_FOCUSED AF_TRIGGER NOT_FOCUSED_LOCKED 초점이 맞지 않는 경우 즉시 변환

렌즈가 이제 고정됨

FOCUSED_LOCKED AF_TRIGGER FOCUSED_LOCKED 효과 없음
FOCUSED_LOCKED AF_CANCEL INACTIVE AF 스캔 재시작
NOT_FOCUSED_LOCKED AF_TRIGGER NOT_FOCUSED_LOCKED 효과 없음
NOT_FOCUSED_LOCKED AF_CANCEL INACTIVE AF 스캔 재시작
mode = AF_MODE_CONTINUOUS_PICTURE
상태 변환 원인 새 상태 참고
INACTIVE HAL이 새 스캔 시작 PASSIVE_SCAN

AF 스캔 시작

렌즈가 이제 움직임

INACTIVE AF_TRIGGER NOT_FOCUSED_LOCKED

AF 상태 쿼리

렌즈가 이제 고정됨

PASSIVE_SCAN HAL이 현재 스캔 완료 PASSIVE_FOCUSED AF 스캔 종료

렌즈가 이제 고정됨

PASSIVE_SCAN AF_TRIGGER FOCUSED_LOCKED

초점이 맞으면 최종적으로 변환

렌즈가 이제 고정됨

PASSIVE_SCAN AF_TRIGGER NOT_FOCUSED_LOCKED

초점을 맞출 수 없는 경우 최종적으로 변환

렌즈가 이제 고정됨

PASSIVE_SCAN AF_CANCEL INACTIVE

렌즈 위치 재설정

렌즈가 이제 고정됨

PASSIVE_FOCUSED HAL이 새 스캔 시작 PASSIVE_SCAN

AF 스캔 시작

렌즈가 이제 움직임

PASSIVE_FOCUSED AF_TRIGGER FOCUSED_LOCKED

초점이 맞는 경우 즉시 변환

렌즈가 이제 고정됨

PASSIVE_FOCUSED AF_TRIGGER NOT_FOCUSED_LOCKED

초점이 맞지 않는 경우 즉시 변환

렌즈가 이제 고정됨

FOCUSED_LOCKED AF_TRIGGER FOCUSED_LOCKED 효과 없음
FOCUSED_LOCKED AF_CANCEL INACTIVE AF 스캔 재시작
NOT_FOCUSED_LOCKED AF_TRIGGER NOT_FOCUSED_LOCKED 효과 없음
NOT_FOCUSED_LOCKED AF_CANCEL INACTIVE AF 스캔 재시작

AE 및 AWB 상태 머신

AE 및 AWB 상태 머신은 대부분 동일합니다. AE에는 FLASH_REQUIRED 및 PRECAPTURE 상태가 추가로 있습니다. 따라서 AWB 상태 머신에서 이 두 상태를 참조하는 아래 행은 무시되어야 합니다.

mode = AE_MODE_OFF/AWB 모드가 AUTO가 아님
상태 변환 원인 새 상태 참고
INACTIVE AE/AWB 사용 중지됨
mode = AE_MODE_ON_*/AWB_MODE_AUTO
상태 변환 원인 새 상태 참고
INACTIVE HAL이 AE/AWB 스캔 시작 SEARCHING
INACTIVE AE/AWB_LOCK 켜짐 LOCKED 값이 고정됨
SEARCHING HAL이 AE/AWB 스캔 완료 CONVERGED 적절한 값, 변경되지 않음
SEARCHING HAL이 AE 스캔 완료 FLASH_REQUIRED 수렴하지만 플래시 없이는 너무 어두움
SEARCHING AE/AWB_LOCK 켜짐 LOCKED 값이 고정됨
CONVERGED HAL이 AE/AWB 스캔 시작 SEARCHING 값이 고정됨
CONVERGED AE/AWB_LOCK 켜짐 LOCKED 값이 고정됨
FLASH_REQUIRED HAL이 AE/AWB 스캔 시작 SEARCHING 값이 고정됨
FLASH_REQUIRED AE/AWB_LOCK 켜짐 LOCKED 값이 고정됨
LOCKED AE/AWB_LOCK 꺼짐 SEARCHING 잠금 해제 후 값이 적절하지 않음
LOCKED AE/AWB_LOCK 꺼짐 CONVERGED 잠금 해제 후 값이 적절함
LOCKED AE_LOCK 꺼짐 FLASH_REQUIRED 노출이 적절하지만 너무 어두움
모든 AE 상태 PRECAPTURE_START PRECAPTURE 사전 캡처 시퀀스 시작
PRECAPTURE 시퀀스 완료, AE_LOCK 꺼짐 CONVERGED 고화질 캡처 준비 완료
PRECAPTURE 시퀀스 완료, AE_LOCK 켜짐 LOCKED 고화질 캡처 준비 완료

수동 제어 사용 설정

직접적인 애플리케이션 제어를 위해 기기 3A 블록을 구성하는 데에도 몇 가지 컨트롤이 사용됩니다.

3A 컨트롤의 HAL 모델은 각 요청 시 HAL이 3A 컨트롤 필드의 상태를 검사하는 것입니다. 3A 루틴을 사용하면 이 루틴은 루틴과 관련된 제어 변수를 재정의하며 재정의 값은 캡처의 결과 메타데이터에서 사용할 수 있습니다. 예를 들어 요청에서 자동 노출을 사용하는 경우 HAL은 요청의 노출, 게인, 프레임 지속 시간 필드(AE 모드에 따라 플래시 필드일 수 있음)를 덮어써야 합니다. 관련 제어 목록은 다음과 같습니다.

컨트롤 이름 단위 참고
android.control.mode enum: OFF, AUTO, USE_SCENE_MODE 상위 수준의 3A 컨트롤입니다. OFF로 설정하면 HAL에 의한 모든 3A 컨트롤이 사용 중지됩니다. 애플리케이션은 캡처 매개변수 자체의 필드를 설정해야 합니다. AUTO로 설정하면 android.control.afMode와 같이 android.control.* 의 개별 알고리즘 컨트롤이 적용됩니다. USE_SCENE_MODE로 설정하면 android.control.*의 개별 컨트롤은 대부분 사용 중지되며, HAL은 원하는 대로 장면 모드 설정 중 하나(예: ACTION, SUNSET, PARTY)를 구현합니다.
android.control.afMode enum OFF는 android.lens.focusDistance를 통해 렌즈 초점을 수동으로 제어하는 것을 의미합니다.
android.control.aeMode enum OFF는 android.sensor.exposureTime/.sensitivity/.frameDuration을 통해 노출/게인/프레임 지속 시간을 수동으로 제어하는 것을 의미합니다.
android.control.awbMode enum OFF는 화이트 밸런스를 수동으로 제어하는 것을 의미합니다.