tham chiếu cấu trúc camera3_callback_ops
#include < camera3.h >
Trường dữ liệu | |
khoảng trống(* | process_capture_result )(const struct camera3_callback_ops *, const camera3_capture_result_t *kết quả) |
khoảng trống(* | thông báo )(const struct camera3_callback_ops *, const camera3_notify_msg_t *msg) |
miêu tả cụ thể
Tài liệu hiện trường
void(* thông báo)(const struct camera3_callback_ops *, const camera3_notify_msg_t *msg) |
thông báo:
Lệnh gọi lại thông báo không đồng bộ từ HAL, bị kích hoạt vì nhiều lý do. Chỉ dành cho thông tin độc lập với việc 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 tin nhắn vẫn thuộc về HAL và tin nhắn chỉ cần hợp lệ trong suốt thời gian của cuộc gọi này.
Nhiều luồng có thể gọi thông báo() cùng một lúc.
<= CAMERA_DEVICE_API_VERSION_3_1:
Thông báo về việc bắt đầu hiển thị đối với một yêu cầu nhất định phải được HAL gửi trước khi thực hiện lệnh gọi đầu tiên tới process_capture_result() cho yêu cầu đó.
>= CAMERA_DEVICE_API_VERSION_3_2:
Bộ đệm được phân phối đến khung sẽ không được gửi đến lớp ứng dụng cho đến khi bắt đầu dấu thời gian 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) đã được nhận 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 này càng sớm càng tốt.
Các yêu cầu thực hiện:
Đây là cuộc gọi không chặn. Khung sẽ trả lại lệnh gọi này sau 5 mili giây.
void(* process_capture_result)(const struct camera3_callback_ops *, const camera3_capture_result_t *kết quả) |
process_capture_result:
Gửi kết quả từ quá trình chụp hoàn chỉnh đến khung. process_capture_result() có thể được HAL gọi nhiều lần để đáp ứng một yêu cầu chụp duy nhất. Ví dụ: điều này cho phép trả về siêu dữ liệu và bộ đệm có độ phân giải thấp trong một cuộc gọi và bộ đệm JPEG được xử lý sau trong cuộc gọi sau, khi nó có sẵn. Mỗi cuộc gọi phải bao gồm số khung của yêu cầu mà nó trả về siêu dữ liệu hoặc bộ đệm.
Một thành phần (bộ đệ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. Bộ đệm cho mỗi luồng và siêu dữ liệu kết quả phải được HAL trả về 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 có lỗi tạo ra một số đầu ra. Không được phép gọi tới process_capture_result() mà không có bộ đệm đầu ra hoặc siêu dữ liệu kết quả.
Thứ tự trả về siêu dữ liệu và bộ đệm cho một kết quả không quan trọng nhưng bộ đệm cho một luồng nhất định phải được trả về theo thứ tự FIFO. Vì vậy, bộ đệm cho yêu cầu 5 cho luồng A phải luôn được trả về trước bộ đệm cho yêu cầu 6 cho 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, do đó có thể chấp nhận và mong đợi rằng bộ đệm cho yêu cầu 5 cho luồng A có thể được trả về sau bộ đệm cho yêu cầu 6 cho luồng B. Và có thể chấp nhận rằng siêu dữ liệu kết quả cho yêu cầu 6 cho luồng B được trả về trước bộ đệm cho yêu cầu 5 cho luồng A.
HAL giữ quyền sở hữu cấu trúc kết quả, cấu trúc này chỉ cần hợp lệ để truy cập trong cuộc gọi này. Khung sẽ sao chép bất cứ thứ gì nó cần trước khi cuộc gọi này trở lại.
Bộ đệm đầu ra chưa cần phải được lấp đầy; khung sẽ đợi trên hàng rào đồng bộ hóa phát hành bộ đệm luồng trước khi đọc dữ liệu bộ đệm. Do đó, phương pháp này nên được HAL gọi càng sớm càng tốt, ngay cả khi một số hoặc tất cả bộ đệm đầu ra vẫn đang được lấp đầy. HAL phải bao gồm các hàng rào đồng bộ hóa bản phát hành hợp lệ vào mỗi mục nhập bộ đệm luồng đầu ra_buffers hoặc -1 nếu bộ đệm luồng đó đã được lấp đầy.
Nếu bộ đệm kết quả không thể được xây dựng cho một yêu cầu, HAL sẽ trả về bộ đệm siêu dữ liệu trống nhưng vẫn cung cấp bộ đệm đầu ra và hàng rào đồng bộ hóa của chúng. Ngoài ra, thông báo() phải được gọi bằng thông báo ERROR_RESULT.
Nếu không thể lấp đầy bộ đệm đầu ra thì trường trạng thái của nó phải được đặt thành STATUS_ERROR. Ngoài ra, thông báo() phải được gọi bằng thông báo ERROR_BUFFER.
Nếu toàn bộ quá trình chụp không thành công thì phương thức này vẫn cần được gọi để trả bộ đệm đầu ra về khung. Tất cả trạng thái bộ đệm phải là STATUS_ERROR và siêu dữ liệu kết quả phải là bộ đệm trống. Ngoài ra, thông báo() phải được gọi bằng thông báo ERROR_REQUEST. Trong trường hợp này, không được gửi các tin nhắn ERROR_RESULT/ERROR_BUFFER riêng lẻ.
Các yêu cầu thực hiện:
Đây là cuộc gọi không chặn. Khung sẽ trả lại lệnh gọi này sau 5 mili giây.
Độ trễ 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.
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