Android에는 카메라 클라이언트가 특정 사용 사례에 맞는 최적의 카메라 스트림을 선택하고 카메라 기기에서 특정 스트림 조합을 지원할 수 있도록 하는 기능이 포함되어 있습니다. 스트림 구성은 카메라 기기에서 구성된 단일 스트림을 의미하며 스트림 조합은 카메라 기기에서 구성된 하나 이상의 스트림 세트를 의미합니다. 이러한 기능에 관한 자세한 내용은 권장 스트림 구성 및 기능 조합을 쿼리하는 API를 참고하세요.
참조 구현
권장 구성 스트림 및 스트림 조합을 쿼리하는 API 기능에 관한 제공업체 측의 참조 구현이 있습니다. 이 구현은 QCamera3HWI.cpp에서 확인할 수 있습니다.
권장 스트림 구성
카메라 제공업체는 특정 사용 사례의 권장 스트림 구성을 카메라 클라이언트에 알릴 수 있습니다. StreamConfigurationMap의 하위 집합인 이러한 권장 스트림 구성을 사용하면 카메라 클라이언트가 최적의 구성을 선택할 수 있습니다.
StreamConfigurationMap은 카메라 클라이언트에 완전한 스트림 구성 정보를 제공하지만, 다른 스트림과 대비하여 한 스트림을 선택할 때의 효율성, 전원 또는 성능 영향에 관한 정보는 제공하지 않습니다. 카메라 클라이언트는 사용 가능한 모든 스트림 구성 중에서 자유롭게 선택할 수 있지만, 많은 경우 최적화되지 않은 카메라 구성 및 앱을 사용하게 되어 시간이 오래 걸리는 상세한 검색을 하게 됩니다.
예를 들어 일부 처리된 YUV 형식이 필요하고 지원되어야 하지만, 카메라 기기에서 이 형식을 기본적으로 지원하지 않을 수 있습니다. 이로 인해 형식 변환으로 인한 추가 처리 과정이 발생하고 효율성이 떨어집니다. 크기 및 해당 가로세로 비율 역시 전원 및 성능 면에서 특정 크기를 선호하도록 하는 데 비슷한 수준으로 영향을 미칩니다.
권장 스트림 구성 맵은 StreamConfigurationMap에 비해 자세할 필요는 없습니다. 추천 구성 맵은 구현 섹션의 요구사항을 준수해야 하며 StreamConfigurationMap에서 확인할 수 있는 사용 가능한 형식, 크기 또는 기타 값을 포함할 수 있습니다. StreamConfigurationMap에서 확인할 수 없는 숨겨진 형식, 크기 또는 기타 값은 권장 스트림 구성 맵에 포함될 수 없습니다.
모든 테스트는 변경되지 않으며 권장 스트림 구성에 따라 완화되지 않습니다.
카메라 구현에서 제공하는 권장 스트림 구성은 선택사항이며 카메라 클라이언트는 이를 무시할 수 있습니다.
구현
이 기능을 구현하려면 다음 단계를 따르세요.
메타데이터 항목
이 기능을 사용 설정하려면 카메라 HAL이 다음 정적 메타데이터 항목을 채워야 합니다.
android.scaler.availableRecommendedStreamConfigurations
: 특정 사용 사례에 권장되는 스트림 구성의 하위 집합입니다. 선언은 추천 사용 사례를[1 << PREVIEW | 1 << RECORD..]
형식으로 나타내는 비트맵을 사용합니다. 사용 사례는 추가 항목 1개로 일반(형식, 너비, 높이, 입력) 튜플을 확장합니다. 존재하지 않는 공개 사용 사례 또는[PUBLIC_END, VENDOR_START]
범위 내에 설정된 다른 비트는 금지됩니다.이 정보는
availableRecommendedStreamConfigurations
메타데이터 태그에 저장됩니다.다음 예시는 4K와 1080p만 지원하는 카메라 기기의 권장 스트림 구성에 관한 배열을 보여줍니다. 두 해상도 모두 동영상 녹화에 권장되지만 미리보기에는 1080p만 권장됩니다.
[3840, 2160, HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED, ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_OUTPUT, (1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_RECORD | 1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_SNAPSHOT | 1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_VIDEO_SNAPSHOT), 1920, 1080, HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED, ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_OUTPUT, (1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_PREVIEW | 1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_RECORD | 1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_SNAPSHOT | 1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_VIDEO_SNAPSHOT)]
android.depth.availableRecommendedDepthStreamConfigurations
(기기에서 지원하는 경우에만 사용 가능): 이 카메라 기기에 권장되는 심도 데이터 공간 스트림 구성입니다. 위의 메타데이터 항목과 마찬가지로 추가 사용 사례 비트맵은 추천 사용 사례를 나타냅니다.이 정보는
availableRecommendedInputOutputFormatsMap
메타데이터 태그에 저장됩니다.android.scaler.availableRecommendedInputOutputFormatsMap
(기기에서 지원하는 경우에만 사용 가능): 입력 스트림의 이 카메라 기기에 권장되는 이미지 형식을 해당 출력 형식에 매핑합니다.이 정보는
availableRecommendedDepthStreamConfigurations
메타데이터 태그에 저장됩니다.
이 정보는 RecommendedStreamConfigurationMap API를 통해 카메라 클라이언트에 제공됩니다.
필수 사용 사례
다음 사용 사례에 권장 스트림 구성을 제공하고 해당 요구사항을 충족해야 합니다.
사용 사례 | 요건 |
---|---|
PREVIEW |
미리보기에는 YUV_420_888 및 IMPLEMENTATION_DEFINED 와 같은 출력 형식으로 중단되지 않는 처리된 스트림 구성만 포함되어야 합니다. |
RECORD |
동영상 녹화에는 IMPLEMENTATION_DEFINED 형식과 함께 광고되는 지원 미디어 프로필과 일치하는 스트림 구성이 포함되어야 합니다. |
VIDEO_SNAPSHOT |
동영상 스냅샷에는 적어도 최대 녹화 해상도만큼 큰 스트림 구성이 포함되어야 하며, BLOB + DATASPACE_JFIF 형식/데이터 공간 조합(JPEG)만 사용해야 합니다. 구성으로 인해 미리보기 오류가 발생해서는 안 되며 30fps로 실행할 수 있어야 합니다. |
SNAPSHOT |
스냅샷 스트림 구성에는 적어도 BLOB + DATASPACE_JFIF 형식/데이터 공간 조합(JPEG)을 사용하는 android.sensor.info.activeArraySize 와 비슷한 크기의 스냅샷 스트림 구성이 하나 이상 포함되어야 합니다. 가로세로 비율, 정렬 및 기타 제공업체별 제한사항을 고려하면 최대 추천 크기 영역은 센서 배열 크기 영역의 97% 이상이어야 합니다. |
ZSL (지원되는 경우) |
카메라 기기에서 지원하는 경우 권장 입력 스트림 구성은 처리되었거나 중지된 다른 출력 형식과 함께 광고해야 합니다. |
RAW (지원되는 경우) |
카메라 기기에서 지원하는 경우 권장 RAW 스트림 구성에는 RAW 기반 출력 형식만 포함되어야 합니다. |
기타 사용 사례
구현과 관련된 사용 사례에 관한 추가 권장 구성 스트림을 제공할 수 있습니다.
유효성 검사
권장 구성 스트림의 구현을 테스트하려면 다음 CTS 및 VTS 테스트를 실행합니다.
기능 조합을 쿼리하는 API
Android 15부터 Android 플랫폼은 기능 조합을 쿼리하는 API를 제공합니다. 이 API를 사용하면 카메라 클라이언트가 기기에서 지정된 기능 조합을 지원할 수 있는지 쿼리할 수 있습니다. 이 API는 camera2 API가 4K, 60fps, HDR 동영상, UltraHDR, 초광각 줌, 손떨림 보정과 같은 다양한 기능을 직교 컨트롤로 모델링하기 때문에 필요합니다.
요구사항
기능 조합을 쿼리하는 API를 지원하려면 카메라 HAL에서 ICameraDevice
인터페이스의 버전 3을 구현해야 합니다. 자세한 내용은 구현 섹션을 참고하세요.
API가 지원되는 경우 미리보기 손떨림 보정은 다른 기능과 직교해야 합니다. 즉, 미리보기 손떨림 보정을 지원하는 카메라 기기의 경우 특정 조합의 isStreamCombinationWithSettingsSupported
반환 값은 미리보기 손떨림 보정이 켜져 있든 꺼져 있든 동일한 값이어야 합니다. 이렇게 하면 기능 조합 쿼리의 검색 공간이 줄어듭니다.
또한 미디어 성능 클래스 15의 경우 기본 후면 카메라는 1080p 및 720p 미리보기와 최대 크기 JPEG의 10비트 HLG10 미리보기로 미리보기 손떨림 보정을 지원해야 합니다(MUST). 이러한 요구사항에 관한 자세한 내용은 2.2.7.2. 카메라를 참고하세요.
구현
기능 조합을 쿼리하는 API를 지원하려면 ICameraDevice
버전 3에서 다음 기능 조합 쿼리 API를 구현하세요.
constructDefaultRequestSettings
: 지정된CaptureRequest
유형의 기본 설정을 만듭니다. HAL은ICameraDeviceSession::constructDefaultRequestSettings
구현을 사용할 수 있습니다.isStreamCombinationWithSettingsSupported
: 세션 매개변수 및 추가CaptureRequest
키를 사용하여 지정된 카메라 스트림 조합의 기기 지원을 확인합니다. 지원되는 조합의 경우true
를, 지원되지 않는 기능 조합의 경우false
를 반환해야 합니다. HAL은isStreamCombinationSupported
구현을 사용하고sessionParams
에 전달되는CaptureRequest
설정을 확인하는 지원을 추가할 수 있습니다.getSessionCharacteristics
: 세션 매개변수와 함께 지원되는 스트림 조합을 사용하고 세션별 특성을 반환합니다.INFO_SESSION_CONFIGURATION_QUERY_VERSION
: 일반적으로 사용되는 모든 세션 구성을 나열합니다. 이러한 구성은 규정 준수 테스트를 통해 확인됩니다.
ICameraDevice
인터페이스의 버전 3보다 낮은 버전의 경우 HAL은 isStreamCombinationSupported
메서드를 구현해야 합니다.
API에서 쿼리하는 지형지물 조합에 관한 자세한 내용은 system/media/camera/docs/metadata_definitions.xml
의 sessionConfigurationQueryVersion
에 관한 문서를 참고하세요.
이 기능의 참조 구현은 hardware/google/camera/devices/EmulatedCamera/hwl/
를 참고하세요.
공개 API
앱은 다음 공개 API를 사용하여 기기에서 지원되는 기능 조합을 쿼리할 수 있습니다.
CameraDevice.CameraDeviceSetup
:CameraDevice
인스턴스가 필요하지 않고 지형지물 조합을 쿼리하는 데 사용할 수 있는 제한된CameraDevice
표현입니다.getCameraDeviceSetup
:isCameraDeviceSetupSupported
가true
를 반환하는 경우 지정된 카메라 ID의CameraDeviceSetup
객체를 획득합니다.INFO_SESSION_CONFIGURATION_QUERY_VERSION
: 이 값이VANILLA_ICE_CREAM
이상인 경우 지형지물 조합 쿼리를 지원합니다.OutputConfiguration
: 카메라 출력을 설명하는 클래스입니다. 이 클래스에는 지연 시간 감소 기능 조합 쿼리의 목적으로 지연된 노출 영역이 포함될 수 있습니다.SessionConfiguration
: 스트림 조합 및 세션 매개변수를 포함하여 세션 구성을 설명하는 유틸리티 클래스로, 지형지물 조합 쿼리에 사용할 수 있습니다.
유효성 검사
이 기능의 구현을 확인하려면 다음 VTS, CTS, 카메라 ITS (CTS 인증 도구) 테스트를 사용하세요.
VTS
CTS
- cts/tests/camera/src/android/hardware/camera2/cts/FeatureCombinationTest.java
- cts/tests/camera/src/android/hardware/camera2/cts/CameraDeviceSetupTest.java
카메라 ITS