Tham chiếu Cấu trúc camera3_callback_ops

Tham chiếu Cấu trúc camera3_callback_ops

#include < camera3.h >

Trường dữ liệu

void(*  process_capture_result )(const struct camera3_callback_ops *, const camera3_capture_result_t *result)
 
void(*  notify )(const struct camera3_callback_ops *, const camera3_notify_msg_t *msg)
 

Nội dung mô tả chi tiết

Định nghĩa tại dòng của tệp camera3.h .

Tài liệu về trường

void(* notify)(const struct camera3_callback_ops *, const camera3_notify_msg_t *msg)

notify:

Lệnh gọi lại thông báo không đồng bộ từ HAL, được kích hoạt vì nhiều lý do. Chỉ dành cho thông tin độc lập với tính năng chụp khung hình hoặc yêu cầu thời gian cụ thể. Quyền sở hữu cấu trúc thông báo vẫn thuộc về HAL và msg chỉ cần hợp lệ trong thời gian diễn ra lệnh gọi này.

Nhiều luồng có thể gọi notify() đồng thời.

<= CAMERA_DEVICE_API_VERSION_3_1:

HAL phải gửi thông báo về thời điểm bắt đầu tiếp xúc cho một yêu cầu nhất định trước khi thực hiện lệnh gọi đầu tiên đến process_capture_result() cho yêu cầu đó.

>= CAMERA_DEVICE_API_VERSION_3_2:

Các vùng đệm được gửi đến 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 phơi sáng (hoặc dấu thời gian bắt đầu phơi sáng của hình ảnh đầu vào cho yêu cầu xử lý lại) thông qua lệnh gọi SHUTTER notify() . Bạn nên gửi lệnh gọi này càng sớm càng tốt.


Yêu cầu về hiệu suất:

Đây là một lệnh gọi không chặn. Khung sẽ trả về lệnh gọi này trong 5 mili giây.

Định nghĩa tại dòng 2499 của tệp camera3.h .

void(* process_capture_result)(const struct camera3_callback_ops *, const camera3_capture_result_t *result)

process_capture_result:

Gửi kết quả của một quá trình ghi hình đã hoàn tất đến khung. process_capture_result() có thể được HAL gọi nhiều lần để phản hồi một yêu cầu chụp duy nhất. Ví dụ: điều này cho phép siêu dữ liệu và các vùng đệm có độ phân giải thấp được trả về trong một lệnh gọi, còn các vùng đệm JPEG đã xử lý hậu kỳ trong một lệnh gọi sau đó, sau khi có sẵn. Mỗi lệnh gọi phải bao gồm số khung của yêu cầu mà lệnh gọi đó đang trả về siêu dữ liệu hoặc bộ đệm.

Một thành phần (vùng đệm hoặc siêu dữ liệu) của kết quả hoàn chỉnh chỉ có thể được đưa vào một lệnh gọi process_capture_result. HAL phải trả về một vùng đệm cho mỗi luồng và siêu dữ liệu kết quả cho mỗi yêu cầu trong một trong các lệnh gọi process_capture_result, ngay cả trong trường hợp xảy ra lỗi khiến một số đầu ra không được tạo. Không được phép gọi process_capture_result() mà không có vùng đệm đầu ra hoặc siêu dữ liệu kết quả.

Thứ tự trả về siêu dữ liệu và vùng đệm cho một kết quả không quan trọng, nhưng vùng đệm cho một luồng nhất định phải được trả về theo thứ tự FIFO. Vì vậy, vùng đệm cho yêu cầu 5 đối với luồng A phải luôn được trả về trước vùng đệm cho yêu cầu 6 đối với luồng A. Điều này cũng áp dụng cho siêu dữ liệu kết quả; siêu dữ liệu cho yêu cầu 5 phải được trả về trước siêu dữ liệu cho yêu cầu 6.

Tuy nhiên, các luồng khác nhau độc lập với nhau, vì vậy, có thể chấp nhận và dự kiến rằng vùng đệm cho yêu cầu 5 đối với luồng A có thể được trả về sau vùng đệm cho yêu cầu 6 đối với luồng B. Ngoài ra, có thể chấp nhận rằng siêu dữ liệu kết quả cho yêu cầu 6 đối với luồng B được trả về trước vùng đệm cho yêu cầu 5 đối với luồng A.

HAL vẫn giữ quyền sở hữu cấu trúc kết quả, chỉ cần hợp lệ để truy cập trong cuộc gọi này. Khung sẽ sao chép mọi thứ cần thiết trước khi lệnh gọi này trả về.

Bạn chưa cần điền vào các vùng đệm đầu ra; khung sẽ đợi hàng rào đồng bộ hoá phát hành vùng đệm luồng trước khi đọc dữ liệu vùng đệm. Do đó, HAL phải gọi phương thức này càng sớm càng tốt, ngay cả khi một số hoặc tất cả các vùng đệm đầu ra vẫn đang được điền. HAL phải bao gồm các hàng rào đồng bộ hoá bản phát hành hợp lệ trong mỗi mục đệm đầu ra của luồng output_buffers hoặc -1 nếu đệm luồng đó đã được lấp đầy.

Nếu không thể tạo vùng đệm kết quả cho một yêu cầu, HAL sẽ trả về một vùng đệm siêu dữ liệu trống, nhưng vẫn cung cấp các vùng đệm đầu ra và hàng rào đồng bộ hoá của chúng. Ngoài ra, notify() phải được gọi bằng thông báo ERROR_RESULT.

Nếu không thể điền vào vùng đệm đầu ra, thì trường trạng thái của vùng đệm đó phải được đặt thành STATUS_ERROR. Ngoài ra, notify() phải được gọi bằng thông báo ERROR_BUFFER.

Nếu toàn bộ quá trình ghi hình không thành công, thì bạn vẫn cần gọi phương thức này để trả lại các vùng đệm đầu ra cho khung. Tất cả trạng thái vùng đệm phải là STATUS_ERROR và siêu dữ liệu kết quả phải là một vùng đệm trống. Ngoài ra, notify() phải được gọi bằng thông báo ERROR_REQUEST. Trong trường hợp này, bạn không nên gửi từng thông báo ERROR_RESULT/ERROR_BUFFER.

Yêu cầu về hiệu suất:

Đây là một lệnh gọi không chặn. Khung sẽ trả về lệnh gọi này trong 5 mili giây.

Độ trễ của quy trình (xem S7 để biết định nghĩa) phải nhỏ hơn hoặc bằng 4 khoảng thời gian khung hình và phải nhỏ hơn hoặc bằng 8 khoảng thời gian khung hình.

Định nghĩa tại dòng 2466 của tệp camera3.h .


Tài liệu cho cấu trúc này được tạo từ tệp sau: