카메라 HAL

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

Android의 카메라 하드웨어 추상화 계층(HAL)은 android.hardware.camera2 의 상위 수준 카메라 프레임워크 API를 기본 카메라 드라이버 및 하드웨어에 연결합니다. Android 13부터 카메라 HAL 인터페이스 개발은 AIDL 을 사용합니다. Android 8.0에서는 카메라 HAL API를 HAL 인터페이스 설명 언어(HIDL)로 정의된 안정적인 인터페이스로 전환하는 Treble 을 도입했습니다. 이전에 Android 7.0 이하용 카메라 HAL 모듈 및 드라이버를 개발한 경우 카메라 파이프라인의 중요한 변경 사항에 유의하십시오.

AIDL 카메라 HAL

Android 13 이상을 실행하는 기기의 경우 카메라 프레임워크에는 AIDL 카메라 HAL에 대한 지원이 포함됩니다. 카메라 프레임워크는 HIDL 카메라 HAL도 지원하지만 Android 13 이상에 추가된 카메라 기능은 AIDL 카메라 HAL 인터페이스를 통해서만 사용할 수 있습니다. Android 13 이상으로 업그레이드하는 기기에서 이러한 기능을 구현하려면 기기 제조업체가 HIDL 카메라 인터페이스를 사용하는 HAL 프로세스를 AIDL 카메라 인터페이스로 마이그레이션해야 합니다.

AIDL의 장점에 대해 알아보려면 HAL용 AIDL을 참조하세요.

AIDL 카메라 HAL 구현

AIDL 카메라 HAL의 참조 구현은 hardware/google/camera/common/hal/aidl_service/ 를 참조하세요.

AIDL 카메라 HAL 사양은 다음 위치에 있습니다.

AIDL로 마이그레이션하는 기기의 경우 기기 제조업체는 코드 구조에 따라 Android SELinux 정책(sepolicy) 및 RC 파일을 수정해야 할 수 있습니다.

AIDL 카메라 HAL 확인

AIDL 카메라 HAL 구현을 테스트하려면 기기가 모든 CTS 및 VTS 테스트를 통과하는지 확인하세요. Android 13에는 AIDL VTS 테스트인 VtsAidlHalCameraProvider_TargetTest.cpp 가 도입되었습니다.

카메라 HAL3 기능

Android Camera API 재설계의 목표는 Android 기기에서 카메라 하위 시스템을 제어하는 ​​앱의 기능을 크게 향상시키는 동시에 API를 재구성하여 더 효율적이고 유지 관리할 수 있도록 하는 것입니다. 추가 제어를 통해 Android 기기에서 여러 제품에서 안정적으로 작동할 수 있는 고품질 카메라 앱을 쉽게 구축할 수 있으며 가능한 한 기기별 알고리즘을 사용하여 품질과 성능을 극대화할 수 있습니다.

카메라 하위 시스템의 버전 ​​3은 작동 모드를 단일 통합 보기로 구성하여 이전 모드와 버스트 모드와 같은 여러 다른 모드를 구현하는 데 사용할 수 있습니다. 그 결과 초점과 노출에 대한 사용자 제어가 향상되고 노이즈 감소, 대비 및 선명도와 같은 사후 처리가 향상됩니다. 또한 이러한 단순화된 보기를 통해 응용 프로그램 개발자는 카메라의 다양한 기능을 더 쉽게 사용할 수 있습니다.

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

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

  • 캡처에 대한 메타데이터가 있는 결과 개체입니다.
  • 이미지 데이터의 1~N 버퍼는 각각 고유한 대상 표면에 있습니다.

가능한 출력 표면 세트는 미리 구성되어 있습니다.

  • 각 표면은 고정 해상도의 이미지 버퍼 스트림의 대상입니다.
  • 한 번에 적은 수의 표면만 출력으로 구성할 수 있습니다(~3).

요청에는 이 요청에 대해 이미지 버퍼를 푸시할 출력 표면 목록과 원하는 모든 캡처 설정이 포함됩니다(구성된 전체 집합 중). 요청은 일회성( capture() 사용)이거나 무기한 반복( setRepeatingRequest() 사용)일 수 있습니다. 캡처는 반복 요청보다 우선합니다.

카메라 데이터 모델

그림 1. 카메라 코어 동작 모델

카메라 HAL1 개요

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

  • 시사
  • 비디오 녹화
  • 스틸 캡처

각 모드에는 약간씩 다르고 겹치는 기능이 있습니다. 이로 인해 두 가지 작동 모드 사이에 있는 버스트 모드와 같은 새로운 기능을 구현하기가 어려웠습니다.

카메라 블록 다이어그램

그림 2. 카메라 구성 요소

Android 7.0은 많은 기기가 여전히 카메라 HAL1에 의존하고 있기 때문에 카메라 HAL1을 계속 지원합니다. 또한 Android 카메라 서비스는 HAL(1 및 3) 구현을 모두 지원하므로 카메라 HAL1로 성능이 떨어지는 전면 카메라와 카메라 HAL3으로 고급 후면 카메라를 지원하려는 경우에 유용합니다.

단일 카메라 HAL 모듈 (자체 버전 번호 포함)이 있으며, 각각 고유한 버전 번호가 있는 여러 독립 카메라 장치를 나열합니다. 카메라 모듈 2 이상은 장치 2 이상을 지원하는 데 필요하며 이러한 카메라 모듈에는 카메라 장치 버전이 혼합되어 있을 수 있습니다(Android가 두 HAL 구현을 모두 지원한다고 말할 때 이것이 의미함).