스트림 구성

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_888IMPLEMENTATION_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