Android 10에서는 카메라 클라이언트가 특정 사용 사례에 맞는 최적의 카메라 스트림을 선택하고 카메라 기기에서 특정 스트림 조합을 지원할 수 있도록 하는 기능을 제공합니다. 스트림 구성은 카메라 기기에서 구성된 단일 스트림을 의미하며 스트림 조합은 카메라 기기에서 구성된 하나 이상의 스트림 세트를 의미합니다. 이러한 기능에 관한 자세한 내용은 권장 스트림 구성 및 스트림 조합을 쿼리하는 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 플랫폼은 스트림 조합을 쿼리하는 API를 지원합니다. 이 API를 구현하면 카메라 클라이언트는 유효한 CameraDevice 인스턴스를 수신한 후 어느 시점에나 스트림 조합을 안전하게 쿼리하여 카메라 캡처 세션을 초기화해야 하는 오버헤드와 카메라 중단 등 후속적인 카메라 예외 발생 가능성을 제거하여 쿼리를 더 빠르게 처리할 수 있습니다.
또한 이 기능을 통해 카메라 클라이언트가 CameraDevice의 가이드라인과 지원되는 하드웨어 수준에 따라 컴파일된 스트림 조합의 목록을 수신할 수 있습니다. CTS 테스트는 가장 일반적인 스트림 조합의 하위 집합을 지원하여 쿼리 결과의 정확성을 최대한 보장하는 데 사용할 수 있습니다.
카메라 HAL에서 하나의 추가 HIDL API 호출을 구현하여 이 기능을 지원하도록 선택할 수 있습니다.
구현
스트림 조합을 쿼리하는 API를 지원하려면 카메라 HAL에서 isStreamCombinationSupported
HIDL API 인터페이스의 구현을 제공해야 합니다. 이 인터페이스는 카메라 기기가 지정된 카메라 스트림 조합을 지원하는지 확인합니다.
호출될 때 API는 다음 상태 코드 중 하나를 반환해야 합니다.
OK
: 스트림 조합 쿼리에 성공했습니다.METHOD_NOT_SUPPORTED
: 카메라 기기가 스트림 조합 쿼리를 지원하지 않습니다.INTERNAL_ERROR
: 내부 오류로 인해 스트림 조합 쿼리를 완료할 수 없습니다.
API는 스트림 조합이 지원되는 경우 true를 반환합니다. 그렇지 않으면 false를 반환합니다.
프레임워크는 공개 API isSessionConfigurationSupported
를 사용하여 특정 세션 구성이 카메라 기기에서 지원되는지 확인합니다.
API 호출은 일반적인 카메라 작업에서 부작용을 일으켜서는 안 됩니다. API 호출은 내부 상태를 변경하거나 카메라 성능을 저하해서는 안 됩니다. 카메라 HAL이 스트림 조합의 유효성을 성공적으로 검사한 후에는 카메라 클라이언트가 스트림 조합을 성공적으로 구성할 수 있도록 합니다. 문제를 피하려면 구현이 스트림 조합 쿼리 중에 정보를 저장하거나 내부 상태를 변경하거나 시간이 많이 소요되는 작업을 처리하지 않아야 합니다.
유효성 검사
이 기능의 유효성을 검사하려면 다음 카메라 CTS 및 VTS 테스트 사례를 실행합니다.
카메라 CTS 모듈:
카메라 VTS:
VtsHalCameraProviderV2_4TargetTest.cpp