Camera3_capture_result 구조체 참조
#include < camera3.h >
데이터 필드 | |
uint32_t | 프레임_번호 |
const 카메라_메타데이터_t * | 결과 |
uint32_t | num_output_buffers |
const 카메라3_stream_buffer_t * | 출력_버퍼 |
const 카메라3_stream_buffer_t * | 입력_버퍼 |
uint32_t | 부분 결과 |
상세 설명
Camera3_capture_result_t:
카메라 HAL 장치에 의한 단일 캡처/재처리의 결과입니다. 이는 process_capture_request()를 통해 HAL에 전송된 단일 캡처 요청에 대한 응답으로 process_capture_result()를 통해 비동기식으로 프레임워크에 전송됩니다. 각 요청에 대해 HAL이 여러 process_capture_result() 호출을 수행할 수 있습니다.
모두 동일한 프레임 번호를 사용하는 각 호출에는 출력 버퍼의 일부 하위 집합 및/또는 결과 메타데이터가 포함될 수 있습니다. 메타데이터는 주어진 프레임 번호에 대해 한 번만 제공될 수 있습니다. 다른 모든 호출은 결과 메타데이터를 NULL로 설정해야 합니다.
결과 구조에는 이 캡처의 출력 메타데이터와 이 캡처에 대해 채워졌거나 채워질 출력 버퍼 세트가 포함됩니다. 각 출력 버퍼에는 버퍼가 HAL에 의해 아직 채워지지 않은 경우 프레임워크가 읽기 전에 기다리는 릴리스 동기화 펜스가 함께 제공될 수 있습니다.
>= CAMERA_DEVICE_API_VERSION_3_2:
메타데이터는 단일 프레임 번호에 대해 여러 번 제공될 수 있습니다. 프레임워크는 각 부분 결과를 전체 결과 세트로 결합하여 최종 결과 세트를 함께 누적합니다.
입력 버퍼가 요청에 제공된 경우 HAL은 process_capture_result 호출 중 하나에서 이를 반환해야 하며, 호출은 메타데이터 및 출력 버퍼 없이 입력 버퍼만 반환하는 것일 수 있습니다. 동기화 펜스는 출력 버퍼와 동일한 방식으로 처리되어야 합니다.
성능 고려 사항:
또한 애플리케이션은 이러한 부분 결과를 즉시 수신하므로 파이프라인 초기에 알려진 결과를 보내기 전에 전체 파이프라인 대기 시간을 피하기 위해 부분 결과를 보내는 것이 성능 최적화에 적극 권장됩니다.
일반적인 사용 사례는 파이프라인 중간에서 AF 상태를 계산하는 것일 수 있습니다. 상태를 즉시 프레임워크로 다시 보내면 성능이 50% 향상되고 자동 초점의 반응성이 인지됩니다.
현장 문서
uint32_t 프레임_번호 |
프레임 번호는 이 캡처를 고유하게 식별하기 위해 제출된 요청의 프레임워크에서 설정한 증분 정수입니다. 또한 Camera3_callback_ops_t.notify() 로 전송된 비동기 알림에서 요청을 식별하는 데에도 사용됩니다.
const 카메라3_stream_buffer_t * input_buffer |
>= CAMERA_DEVICE_API_VERSION_3_2:
이 캡처에 대한 입력 스트림 버퍼의 핸들입니다. HAL이 process_capture_result()를 호출할 때 아직 소비되지 않을 수 있습니다. 프레임워크는 버퍼를 재사용하기 전에 HAL에서 제공하는 릴리스 동기화 펜스를 기다립니다.
HAL은 output_buffers에 대해 수행되는 것과 동일한 방식으로 동기화 펜스를 처리해야 합니다.
요청당 하나의 입력 버퍼만 보낼 수 있습니다. 출력 버퍼와 마찬가지로 반환된 입력 버퍼의 순서는 HAL에 의해 유지되어야 합니다.
성능 고려 사항:
입력 버퍼는 가능한 한 빨리 반환되어야 합니다. HAL이 동기화 펜스를 지원하는 경우 process_capture_result를 호출하여 적절하게 설정된 동기화 펜스를 반환할 수 있습니다. 동기화 펜스가 지원되지 않는 경우 버퍼는 소비된 경우에만 반환될 수 있으므로 시간이 오래 걸릴 수 있습니다. HAL은 버퍼가 더 빨리 반환되도록 하기 위해 이 입력 버퍼를 복사하도록 선택할 수 있습니다.
uint32_t num_output_buffers |
const 카메라3_stream_buffer_t * 출력_버퍼 |
이 캡처에 대한 출력 스트림 버퍼의 핸들입니다. HAL이 process_capture_result()를 호출할 때 아직 채워지지 않았을 수 있습니다. 프레임워크는 버퍼를 읽기 전에 HAL에서 제공하는 릴리스 동기화 펜스를 기다립니다.
HAL은 스트림 버퍼의 릴리스 동기화 펜스를 유효한 동기화 fd로 설정해야 하며, 버퍼가 이미 채워진 경우에는 -1로 설정해야 합니다.
버퍼를 처리하는 동안 HAL에 오류가 발생하고 버퍼가 채워지지 않은 경우 버퍼의 상태 필드를 CAMERA3_BUFFER_STATUS_ERROR로 설정해야 합니다. HAL이 오류가 발생하기 전에 획득 펜스를 기다리지 않은 경우 프레임워크가 버퍼를 재사용하기 전에 펜스에서 기다릴 수 있도록 획득 펜스를 릴리스 펜스에 복사해야 합니다.
모든 출력 버퍼에 대해 획득 펜스를 -1로 설정해야 합니다. num_output_buffers가 0이면 NULL일 수 있습니다. 이 경우 출력 버퍼를 제공하려면 HAL에서 process_capture_result 호출을 하나 이상 더 실행해야 합니다.
process_capture_result가 프레임에 대한 새 버퍼와 함께 호출되면 해당 스트림에 대한 모든 이전 프레임의 버퍼가 이미 전달되어야 합니다(펜스는 아직 신호를 받을 필요가 없습니다).
>= CAMERA_DEVICE_API_VERSION_3_2:
프레임에 대한 Gralloc 버퍼는 해당 SHUTTER 알림 전에 프레임워크로 전송될 수 있습니다.
성능 고려사항:
프레임워크에 전달된 버퍼는 노출 시작 타임스탬프가 SHUTTER inform() 호출을 통해 수신될 때까지 애플리케이션 계층으로 전달되지 않습니다. 가능한 한 빨리 해당 통화를 전달하는 것이 좋습니다.
uint32_t 부분 결과 |
>= CAMERA_DEVICE_API_VERSION_3_2:
부분 결과를 활용하려면 HAL은 정적 메타데이터 android.request.partialResultCount를 각 프레임에 대해 전송할 부분 결과 수로 설정해야 합니다.
부분 결과가 포함된 각각의 새 캡처 결과는 이 필드(partial_result)를 1과 android.request.partialResultCount 사이의 고유한 포함 값으로 설정해야 합니다.
이 기능을 활용하지 않으려는 HAL은 android.request.partialResultCount 또는 부분 결과를 1이 아닌 값으로 설정하면 안 됩니다.
캡처 결과에 버퍼만 포함되고 메타데이터가 없는 경우 이 값을 0으로 설정해야 합니다.
const Camera_metadata_t * 결과 |
이 캡처의 결과 메타데이터입니다. 여기에는 최종 캡처 매개변수, 캡처 및 사후 처리 하드웨어 상태, 3A 알고리즘 상태(활성화된 경우) 및 활성화된 통계 장치의 출력에 대한 정보가 포함됩니다.
주어진 프레임 번호를 사용하여 process_capture_result()를 한 번만 호출하면 결과 메타데이터가 포함될 수 있습니다. 동일한 프레임 번호에 대한 다른 모든 호출은 이를 NULL로 설정해야 합니다.
결과 메타데이터를 생성하는 중 오류가 발생한 경우 결과는 빈 메타데이터 버퍼여야 하며 ERROR_RESULT와 함께 inform()을 호출해야 합니다.
>= CAMERA_DEVICE_API_VERSION_3_2:
주어진 프레임 번호를 사용하여 process_capture_result()를 여러 번 호출하면 결과 메타데이터가 포함될 수 있습니다.
제출된 부분 메타데이터에는 특정 프레임에 대한 이전 부분 결과에서 반환된 메타데이터 키가 포함되어서는 안 됩니다. 해당 프레임에 대한 각각의 새로운 부분 결과도 고유한 부분 결과 값을 설정해야 합니다.
ERROR_RESULT를 사용하여 알림이 호출된 경우 해당 프레임에 대한 모든 추가 부분 결과는 프레임워크에서 무시됩니다.
이 구조체에 대한 문서는 다음 파일에서 생성되었습니다.
- 하드웨어 /libhardware/include/hardware/camera3.h