Google은 흑인 공동체를 위한 인종 간 평등을 진전시키기 위해 노력하고 있습니다. Google에서 어떤 노력을 하고 있는지 확인하세요.

카메라 HAL3

Android의 카메라 하드웨어 추상화 계층(HAL)은 android.hardware.camera2의 상위 레벨의 카메라 프레임워크 API를 기본 카메라 드라이버 및 하드웨어에 연결합니다. Android 8.0은 트레블을 도입하여 CameraHal API를 HAL 인터페이스 설명 언어(HIDL)로 정의된 안정적인 인터페이스로 전환합니다. 이전에 Android 7.0 이하에 맞는 카메라 HAL 모듈과 드라이버를 개발한 경우 카메라 파이프라인의 중요한 변경사항을 확인하세요.

카메라 HAL3 기능

Android Camera API 재설계의 목표는 Android 기기에서 카메라 하위 시스템을 제어하는 애플리케이션 기능을 대폭 향상하면서 API를 재구성하여 API의 효율성을 높이고 유지관리를 더 용이하게 하는 것입니다. 추가 컨트롤을 사용하면 여러 제품에서 안정적으로 작동할 수 있는 Android 기기의 고품질 카메라 애플리케이션을 더 쉽게 빌드할 수 있습니다. 기기별 알고리즘은 계속해서 사용할 수 있기 때문에 가능할 때마다 품질과 성능을 극대화할 수 있습니다.

카메라 하위 시스템의 버전 3은 작동 모드를 이전 모드 및 기타 모드(예: 버스트 모드) 구현에 사용할 수 있는 단일 통합 뷰로 구성합니다. 이를 통해 사용자는 초점, 노출뿐 아니라 노이즈 감소, 대비, 선명도 향상 등의 더 많은 후처리를 더 잘 제어할 수 있습니다. 이처럼 뷰를 단순화하면 애플리케이션 개발자가 카메라의 다양한 기능을 사용하기가 더 쉬워집니다.

API는 카메라 하위 시스템을 파이프라인으로 모델링합니다. 파이프라인은 1:1 비율로 프레임 캡처 수신 요청을 프레임으로 변환합니다. 요청은 프레임 캡처 및 처리에 관한 모든 구성 정보를 캡슐화합니다. 여기에는 해상도 및 픽셀 형식, 수동 센서/렌즈/플래시 제어, 3A 작동 모드, RAW를 YUV로 변환하는 처리 제어, 통계 생성 등이 포함됩니다.

간단히 말해 애플리케이션 프레임워크는 카메라 하위 시스템으로부터 프레임을 요청하고 카메라 하위 시스템은 결과를 출력 스트림에 반환합니다. 또한 색상 공간 및 렌즈 음영과 같은 정보가 포함된 메타데이터가 각 결과 세트마다 생성됩니다. 카메라 버전 3은 카메라 버전 1의 단방향 스트림에 관한 파이프라인이라고 볼 수 있습니다. 각 캡처 요청은 센서에서 캡처된 하나의 이미지로 변환되며 다음과 같이 처리됩니다.

  • 캡처에 관한 메타데이터가 포함된 Result 객체입니다.
  • 이미지 데이터의 1~N개의 버퍼이며 버퍼 각각은 고유의 대상인 Surface가 있습니다.

가능한 출력 Surface 세트는 다음과 같이 사전 구성됩니다.

  • 각 Surface는 고정 해상도 이미지 버퍼 스트림의 대상입니다.
  • Surface는 소수일 때만 한 번에 출력으로 구성될 수 있습니다(최대 3개).

요청에는 원하는 모든 캡처 설정과 이 요청으로 이미지 버퍼를 푸시할 출력 Surface의 목록(구성된 세트 전체 중 일부)이 포함됩니다. 요청은 1회(capture()로) 발생하거나 무한 반복(setRepeatingRequest()로)될 수 있습니다. 캡처는 반복 요청보다 우선순위가 높습니다.

카메라 데이터 모델

그림 1. 카메라 핵심 작동 모델

카메라 HAL1 개요

카메라 하위 시스템의 버전 1은 높은 수준의 컨트롤과 다음 세 가지 작동 모드가 있는 블랙박스로 설계되었습니다.

  • 미리보기
  • 동영상 녹화
  • 스틸 캡처

각 모드에는 조금씩 다르지만, 중복되는 기능이 있습니다. 그렇기 때문에 두 작동 모드 어디에도 해당하지 않는 버스트와 같은 새로운 기능을 구현하기가 어려웠습니다.

카메라 블록 다이어그램

그림 2. 카메라 구성요소

많은 기기가 여전히 카메라 HAL1에 의존하기 때문에 Android 7.0은 카메라 HAL1을 계속 지원합니다. 또한 Android 카메라 서비스는 HAL1과 HAL3 구현을 모두 지원하므로, 카메라 HAL1을 사용하는 저성능 전면 카메라와 카메라 HAL3을 사용하는 고급 후면 카메라를 지원하고자 할 때 유용합니다.

단일 카메라 HAL 모듈(자체 버전 번호가 있음)은 각각 자체 버전 번호가 있는 다수의 개별 카메라 기기를 나열합니다. 카메라 모듈 2 이상은 기기 2 이상을 지원해야 하며 이러한 카메라 모듈에는 혼합된 카메라 기기 버전이 있을 수 있습니다. 따라서 Android에서 HAL1 및 HAL3 구현을 모두 지원한다고 할 수 있습니다.