camera3_capture_result 구조체 참조

camera3_capture_result 구조체 참조

#include < camera3.h >

데이터 필드

uint32_t  frame_number
 
const camera_metadata_t 결과
 
uint32_t  num_output_buffers
 
const camera3_stream_buffer_t output_buffers
 
const camera3_stream_buffer_t input_buffer
 
uint32_t  partial_result
 

상세 설명

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% 향상되고 자동 초점의 인식된 반응성이 향상됩니다.

camera3.h 파일의 2251 행에 정의되어 있습니다.

필드 문서

uint32_t frame_number

프레임 번호는 이 캡처를 고유하게 식별하기 위해 제출된 요청에서 프레임워크에 의해 설정된 증가 정수입니다. 또한 camera3_callback_ops_t.notify() 에 전송된 비동기 알림에서 요청을 식별하는 데도 사용됩니다.

camera3.h 파일의 2258 행에 정의되어 있습니다.

const camera3_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은 버퍼가 더 빨리 반환되도록 이 입력 버퍼를 복사할 수 있습니다.

camera3.h FILE의 2361 라인에 정의되어 있습니다.

uint32_t num_output_buffers

이 결과 구조에서 반환된 출력 버퍼의 수입니다. 일치하는 캡처 요청의 개수보다 작거나 같아야 합니다. 이 값이 캡처 요청의 버퍼 수보다 적으면 동일한 frame_number를 사용하여 process_capture_result를 한 번 이상 더 호출하여 나머지 출력 버퍼를 프레임워크로 반환해야 합니다. 구조에 유효한 결과 메타데이터가 포함되어 있거나 이 결과에서 입력 버퍼가 반환되는 경우에만 0이 될 수 있습니다.

camera3.h FILE의 2296 행에 정의되어 있습니다.

const camera3_stream_buffer_t * output_buffers

이 캡처의 출력 스트림 버퍼 핸들입니다. 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-notify 전에 프레임워크로 전송될 수 있습니다.

성능 고려사항:

프레임워크에 전송된 버퍼는 SHUTTER notify() 호출을 통해 노출 시작 타임스탬프가 수신될 때까지 애플리케이션 레이어로 전달되지 않습니다. 이 호출을 최대한 빨리 전달하는 것이 좋습니다.

camera3.h 파일의 2335 줄에 정의되어 있습니다.

uint32_t partial_result

>= CAMERA_DEVICE_API_VERSION_3_2:

부분 결과를 활용하려면 HAL이 정적 메타데이터 android.request.partialResultCount를 각 프레임에 전송할 부분 결과 수로 설정해야 합니다.

부분 결과가 있는 각 새 캡처 결과는 이 필드(partial_result)를 1과 android.request.partialResultCount 사이의 고유한 값(양 끝값 포함)으로 설정해야 합니다.

이 기능을 활용하지 않으려는 HAL은 android.request.partialResultCount 또는 partial_result를 1이 아닌 값으로 설정하면 안 됩니다.

캡처 결과에 메타데이터가 아닌 버퍼만 포함된 경우 이 값을 0으로 설정해야 합니다.

camera3.h FILE의 2381 라인에 정의되어 있습니다.

const camera_metadata_t * result

이 캡처의 결과 메타데이터입니다. 여기에는 최종 캡처 매개변수, 캡처 및 후처리 하드웨어의 상태, 사용 설정된 경우 3A 알고리즘의 상태, 사용 설정된 통계 단위의 출력에 관한 정보가 포함됩니다.

지정된 frame_number를 사용하여 process_capture_result()를 한 번만 호출하면 결과 메타데이터를 포함할 수 있습니다. 동일한 frame_number의 다른 모든 호출은 이를 NULL로 설정해야 합니다.

결과 메타데이터를 생성하는 중에 오류가 발생한 경우 결과는 빈 메타데이터 버퍼여야 하며 notify()는 ERROR_RESULT을 사용하여 호출해야 합니다.

>= CAMERA_DEVICE_API_VERSION_3_2:

지정된 frame_number를 사용하여 process_capture_result()를 여러 번 호출하면 결과 메타데이터가 포함될 수 있습니다.

제출된 부분 메타데이터에는 특정 프레임의 이전 부분 결과에서 반환된 메타데이터 키가 포함되어서는 안 됩니다. 해당 프레임의 각 새 부분 결과도 고유한 partial_result 값을 설정해야 합니다.

notify가 ERROR_RESULT로 호출된 경우 프레임의 추가 부분 결과는 모두 프레임워크에서 무시됩니다.

camera3.h FILE의 2285 라인에 정의가 있습니다.


이 구조체에 관한 문서는 다음 파일에서 생성되었습니다.