세션 매개변수

세션 매개변수 기능은 카메라 클라이언트가 고비용인 요청 매개변수(세션 매개변수)의 하위 집합을 캡처 세션 초기화 단계의 일환으로 적극 구성하도록 하여 지연을 줄입니다. 이 기능을 사용하면 HAL 구현은 첫 번째 캡처 요청 대신 스트림 구성 단계에서 클라이언트 매개변수를 수신하며, 값에 따라 내부 파이프라인을 더 효율적으로 준비하고 빌드할 수 있습니다.

Android 10에서는 내부 세션 매개변수 재구성 로직에 관한 제어성을 향상하는 세션 재구성 쿼리 기능을 사용하여 성능을 개선할 수 있습니다. 자세한 내용은 세션 재구성 쿼리를 참고하세요.

예시 및 소스

참조 세션 매개변수 구현은 이미 CameraHal에 포함되어 있습니다. 이 HAL은 기존 Hal API를 사용합니다. 카메라 HIDL API를 구현하는 바인더화된 CameraHal은 각각의 HIDL sessionParams 항목을 사용하여 스트림 구성 중에 새로 수신되는 세션 매개변수에 액세스해야 합니다.

카메라 클라이언트는 getAvailableSessionKeys()를 호출하여 지원되는 모든 세션 매개변수의 키를 쿼리하고 최종적으로 setSessionParameters()를 통해 초깃값을 설정할 수 있습니다.

구현

CameraHal 구현은 각각의 정적 카메라 메타데이터 내에서 ANDROID_REQUEST_AVAILABLE_SESSION_KEYS를 채워야 하며 프레임당 적용이 어려워 캡처 세션 전체 기간 중에 수정되는 경우 예상치 못한 지연이 발생할 수 있는 키의 목록을 포함하는 ANDROID_REQUEST_AVAILABLE_REQUEST_KEYS의 하위 집합을 제공해야 합니다.

일반적인 예로는 시간이 많이 소요되는 하드웨어 재구성 또는 내부 카메라 파이프라인 변경이 필요한 매개변수가 있습니다. 세션 매개변수 제어는 캡처 요청에서 여전히 사용될 수 있지만, 클라이언트는 애플리케이션에서 지연을 인식하고 예상해야 합니다.

프레임워크는 모든 수신 요청을 모니터링하고, 세션 매개변수 값이 변경되었음을 감지한 경우에는 카메라를 내부적으로 재구성합니다. 그러면 CameraHal에 전달되는 새 스트림 구성에는 카메라 파이프라인을 더 효율적으로 구성하는 데 사용되는 업데이트된 세션 매개변수 값이 포함됩니다.

맞춤설정

CameraHal 측에 채워진 사용 가능한 세션 매개변수 목록에서 태그를 정의할 수 있습니다. CameraHal이 사용 가능한 세션 매개변수 목록을 비워 두면 이 기능이 활성화되지 않습니다.

유효성 검사

CTS에는 세션 매개변수 테스트에 관한 다음 새로운 사례가 포함됩니다.

일반적으로 특정 매개변수가 세션 키 목록의 일부가 되면 현재 값은 HAL 레이어에서 스트림 구성 중에 전달된 세션 매개변수의 일환으로 포함됩니다.

세션 매개변수는 신중하게 선택되어야 합니다. 스트림 구성 사이에 값이 자주 변경되지 않아야 합니다. 캡처 인텐트와 같이 자주 변경되는 매개변수는 적합하지 않으며 이러한 매개변수를 세션 매개변수 목록에 추가하면 과도한 내부 재구성으로 인해 CTS 오류가 발생할 수 있습니다.

세션 재구성 쿼리

세션 매개변수 값을 수정하면 내부 스트림 재구성이 발생하면서 성능이 저하될 수 있기 때문에 Android 10에서는 성능 향상을 위해 세션 재구성 쿼리 기능을 선택사항으로 도입했습니다. 이 문제를 해결하기 위해 HIDL ICameraDeviceSession 버전 3.5 이상에서는 내부 세션 매개변수 재구성 로직에 관한 세밀한 제어를 제공하는 isReconfigurationRequired 메서드를 지원합니다. 이 메서드를 사용하면 정확히 필요한 시점에 스트림 재구성이 실행됩니다.

isReconfigurationRequired의 인수는 보류 중인 세션 매개변수 수정 전부에 관한 필수 정보를 제공하기 때문에 다양한 종류의 기기별 맞춤설정이 가능합니다.

이 기능은 카메라 서비스 및 카메라 HAL에서만 구현됩니다. 공개 API는 없습니다. 이 기능이 구현되면 세션 매개변수로 작업할 때 카메라 클라이언트의 성능이 향상됩니다.

구현

세션 재구성 쿼리를 지원하려면 isReconfigurationRequired 메서드를 구현하여 새로운 세션 매개변수 값에 전체 스트림 재구성이 필요한지 확인해야 합니다.

클라이언트가 공지된 세션 매개변수 값을 변경하는 경우 카메라 프레임워크는 isReconfigurationRequired 메서드를 호출합니다. 특정 값에 따라 HAL은 전체 스트림 재구성이 필요한지 여부를 결정합니다. HAL이 false를 반환하는 경우 카메라 프레임워크는 내부 재구성을 건너뜁니다. HAL이 true를 반환하는 경우 프레임워크는 스트림을 재구성하고 이에 따라 새로운 세션 매개변수 값을 전달합니다.

프레임워크는 새로운 매개변수를 통한 요청이 HAL에 제출되기 전에 isReconfigurationRequired 메서드를 호출할 수 있으며, 이 요청은 제출되기 전 취소될 수 있습니다. 따라서 HAL은 이 메서드 호출을 사용하여 동작을 변경해서는 안 됩니다.

HAL 구현은 다음 요구사항을 충족해야 합니다.

  • 프레임워크는 활성 세션 구성 이후에 언제든지 isReconfigurationRequired 메서드를 호출할 수 있어야 합니다.
  • 보류 중인 카메라 요청의 성능에 영향을 미치면 안 됩니다. 특히 일반적인 카메라 스트리밍 중에는 결함이나 지연이 없어야 합니다.

기기 및 HAL 구현은 다음 성능 요구사항을 충족해야 합니다.

  • 하드웨어 및 소프트웨어 카메라 설정은 변경하면 안 됩니다.
  • 사용자가 인식할 수 있을 정도로 카메라 성능에 영향을 미치면 안 됩니다.

isReconfigurationRequired 메서드는 다음 인수를 가져옵니다.

  • oldSessionParams: 이전 세션의 세션 매개변수로, 일반적으로 기존 세션 매개변수입니다.
  • newSessionParams: 클라이언트가 설정한 새로운 세션 매개변수입니다.

예상 반환 상태 코드는 다음과 같습니다.

  • OK: 완료된 재구성 필수 쿼리입니다.
  • METHOD_NOT_SUPPORTED: 카메라 기기에서 재구성 쿼리를 지원하지 않습니다.
  • INTERNAL_ERROR: 내부 오류로 인해 재구성 쿼리를 완료할 수 없습니다.

반환 값은 다음과 같습니다.

  • true: 스트림 재구성이 필요합니다.
  • false: 스트림 재구성이 필요하지 않습니다.

HAL은 세션 재구성 쿼리를 무시하기 위해 METHOD_NOT_SUPPORTED 또는 false를 반환합니다. 이에 따라 각 세션 매개변수가 변경될 때 스트림 재구성이 트리거되는 기본 카메라 서비스 동작이 발생합니다.

확인

세션 재구성 쿼리 기능은 CameraHidlTest#configureStreamsWithSessionParameters에서 VTS 테스트 사례를 사용하여 확인할 수 있습니다.