tham chiếu cấu trúc camera3_capture_result
#include < camera3.h >
Trường dữ liệu | |
uint32_t | số_khung |
const camera_metadata_t * | kết quả |
uint32_t | num_output_buffers |
const camera3_stream_buffer_t * | đầu ra_buffers |
const camera3_stream_buffer_t * | đầu vào_buffer |
uint32_t | một phần_kết quả |
miêu tả cụ thể
camera3_capture_result_t:
Kết quả của một lần chụp/xử lý lại bằng thiết bị HAL của máy ảnh. Điều này được gửi đến khung không đồng bộ với process_capture_result(), để đáp lại một yêu cầu chụp duy nhất được gửi tới HAL bằng process_capture_request(). Nhiều lệnh gọi process_capture_result() có thể được HAL thực hiện cho mỗi yêu cầu.
Mỗi cuộc gọi, tất cả đều có cùng số khung, có thể chứa một số tập hợp con của bộ đệm đầu ra và/hoặc siêu dữ liệu kết quả. Siêu dữ liệu chỉ có thể được cung cấp một lần cho một số khung nhất định; tất cả các lệnh gọi khác phải đặt siêu dữ liệu kết quả thành NULL.
Cấu trúc kết quả chứa siêu dữ liệu đầu ra từ lần chụp này và tập hợp các bộ đệm đầu ra đã/sẽ được lấp đầy cho lần chụp này. Mỗi bộ đệm đầu ra có thể đi kèm với một hàng rào đồng bộ hóa phát hành mà khung sẽ chờ trước khi đọc, trong trường hợp bộ đệm chưa được HAL lấp đầy.
>= CAMERA_DEVICE_API_VERSION_3_2:
Siêu dữ liệu có thể được cung cấp nhiều lần cho một số khung. Khung sẽ tích lũy tập kết quả cuối cùng bằng cách kết hợp từng kết quả một phần với nhau thành tập kết quả tổng thể.
Nếu bộ đệm đầu vào được đưa ra trong một yêu cầu, HAL phải trả lại nó trong một trong các lệnh gọi process_capture_result và lệnh gọi có thể chỉ trả về bộ đệm đầu vào, không có siêu dữ liệu và bộ đệm đầu ra; hàng rào đồng bộ phải được xử lý giống như cách chúng được thực hiện đối với bộ đệm đầu ra.
Cân nhắc về hiệu suất:
Các ứng dụng cũng sẽ nhận được các kết quả một phần này ngay lập tức, vì vậy việc gửi một phần kết quả là một biện pháp tối ưu hóa hiệu suất được khuyến nghị cao để tránh độ trễ tổng thể của quy trình trước khi gửi kết quả cho những gì đã biết từ rất sớm trong quy trình.
Trường hợp sử dụng thông thường có thể tính toán trạng thái AF ở giữa đường dẫn; bằng cách gửi trạng thái trở lại khung ngay lập tức, chúng tôi nhận được mức tăng hiệu suất 50% và nhận thấy khả năng phản hồi của tính năng tự động lấy nét.
Tài liệu hiện trường
uint32_t số khung |
Số khung là số nguyên tăng dần do khung đặt trong yêu cầu đã gửi để nhận dạng duy nhất lần chụp này. Nó cũng được sử dụng để xác định yêu cầu trong các thông báo không đồng bộ được gửi tới camera3_callback_ops_t.notify() .
const camera3_stream_buffer_t * input_buffer |
>= CAMERA_DEVICE_API_VERSION_3_2:
Phần xử lý cho bộ đệm luồng đầu vào cho lần chụp này. Nó có thể chưa được sử dụng tại thời điểm HAL gọi process_capture_result(); khung sẽ chờ hàng rào đồng bộ hóa phát hành do HAL cung cấp trước khi sử dụng lại bộ đệm.
HAL phải xử lý các hàng rào đồng bộ giống như cách chúng được thực hiện đối với các bộ đệm đầu ra.
Chỉ được phép gửi một bộ đệm đầu vào cho mỗi yêu cầu. Tương tự như bộ đệm đầu ra, thứ tự của bộ đệm đầu vào được trả về phải được HAL duy trì.
Cân nhắc về hiệu suất:
Bộ đệm đầu vào phải được trả lại càng sớm càng tốt. Nếu HAL hỗ trợ hàng rào đồng bộ hóa, nó có thể gọi process_capture_result để chuyển lại với hàng rào đồng bộ hóa được đặt phù hợp. Nếu hàng rào đồng bộ hóa không được hỗ trợ, bộ đệm chỉ có thể được trả về khi đã sử dụng hết, việc này có thể mất nhiều thời gian; HAL có thể chọn sao chép bộ đệm đầu vào này để bộ đệm quay trở lại sớm hơn.
uint32_t num_output_buffers |
Số lượng bộ đệm đầu ra được trả về trong cấu trúc kết quả này. Phải nhỏ hơn hoặc bằng số lượng yêu cầu chụp phù hợp. Nếu số này nhỏ hơn số lượng bộ đệm trong yêu cầu chụp thì phải thực hiện ít nhất một lệnh gọi nữa tới process_capture_result có cùng số frame_number để trả lại bộ đệm đầu ra còn lại cho khung. Giá trị này chỉ có thể bằng 0 nếu cấu trúc bao gồm siêu dữ liệu kết quả hợp lệ hoặc bộ đệm đầu vào được trả về trong kết quả này.
const camera3_stream_buffer_t * out_buffers |
Bộ điều khiển dành cho bộ đệm luồng đầu ra cho quá trình chụp này. Chúng có thể chưa được điền vào thời điểm HAL gọi process_capture_result(); khung sẽ chờ trên hàng rào đồng bộ hóa phát hành do HAL cung cấp trước khi đọc bộ đệm.
HAL phải đặt hàng rào đồng bộ hóa phát hành bộ đệm luồng thành fd đồng bộ hợp lệ hoặc thành -1 nếu bộ đệm đã được lấp đầy.
Nếu HAL gặp lỗi trong khi xử lý bộ đệm và bộ đệm không được lấp đầy thì trường trạng thái của bộ đệm phải được đặt thành CAMERA3_BUFFER_STATUS_ERROR. Nếu HAL không đợi trên hàng rào thu được trước khi gặp lỗi thì hàng rào thu được phải được sao chép vào hàng rào phát hành, để cho phép khung đợi trên hàng rào trước khi sử dụng lại bộ đệm.
Hàng rào thu được phải được đặt thành -1 cho tất cả các bộ đệm đầu ra. Nếu num_output_buffers bằng 0 thì giá trị này có thể là NULL. Trong trường hợp đó, HAL phải thực hiện ít nhất một lệnh gọi process_capture_result nữa để cung cấp bộ đệm đầu ra.
Khi process_capture_result được gọi với bộ đệm mới cho một khung, tất cả bộ đệm của các khung trước đó cho luồng tương ứng đó phải đã được phân phối (hàng rào chưa cần được báo hiệu).
>= CAMERA_DEVICE_API_VERSION_3_2:
Bộ đệm Gralloc cho một khung có thể được gửi đến khung trước thông báo SHUTTER tương ứng.
Cân nhắc về hiệu suất:
Bộ đệm được phân phối tới khung sẽ không được gửi đến lớp ứng dụng cho đến khi nhận được dấu thời gian bắt đầu hiển thị thông qua lệnh gọi SHUTTER notification(). Chúng tôi khuyên bạn nên gửi cuộc gọi đó càng sớm càng tốt.
uint32_t một phần_result |
>= CAMERA_DEVICE_API_VERSION_3_2:
Để tận dụng kết quả một phần, HAL phải đặt siêu dữ liệu tĩnh android.request.partialResultCount thành số lượng kết quả một phần mà nó sẽ gửi cho mỗi khung.
Mỗi kết quả thu thập mới có kết quả một phần phải đặt trường này (partial_result) thành một giá trị bao gồm riêng biệt giữa 1 và android.request.partialResultCount.
HAL không muốn tận dụng tính năng này không được đặt android.request.partialResultCount hoặcpartial_result thành giá trị khác 1.
Giá trị này phải được đặt thành 0 khi kết quả thu thập chỉ chứa bộ đệm và không có siêu dữ liệu.
const camera_metadata_t * kết quả |
Siêu dữ liệu kết quả cho lần chụp này. Phần này chứa thông tin về các tham số chụp cuối cùng, trạng thái của phần cứng chụp và xử lý hậu kỳ, trạng thái của thuật toán 3A, nếu được bật và đầu ra của bất kỳ đơn vị thống kê nào được bật.
Chỉ một lệnh gọi tới process_capture_result() với số frame_number nhất định mới có thể bao gồm siêu dữ liệu kết quả. Tất cả các lệnh gọi khác cho cùng frame_number phải đặt giá trị này thành NULL.
Nếu có lỗi tạo ra siêu dữ liệu kết quả, kết quả phải là bộ đệm siêu dữ liệu trống và thông báo() phải được gọi bằng ERROR_RESULT.
>= CAMERA_DEVICE_API_VERSION_3_2:
Nhiều lệnh gọi tới process_capture_result() với số frame_number nhất định có thể bao gồm siêu dữ liệu kết quả.
Siêu dữ liệu một phần được gửi không được bao gồm bất kỳ khóa siêu dữ liệu nào được trả về trong kết quả một phần trước đó cho một khung nhất định. Mỗi kết quả một phần mới cho khung đó cũng phải đặt giá trị một phần_result riêng biệt.
Nếu thông báo đã được gọi với ERROR_RESULT, tất cả các kết quả một phần khác cho khung đó sẽ bị khung bỏ qua.
Tài liệu cho cấu trúc này được tạo từ tệp sau:
- phần cứng/libhardware/bao gồm/phần cứng/ camera3.h