Tài liệu tham khảo về cấu trúc camera2_device_ops
#include <
camera2.h
>
Trường dữ liệu |
|
int(* | set_request_queue_src_ops )(const struct camera2_device *, const camera2_request_queue_src_ops_t *request_src_ops) |
int(* | notify_request_queue_not_empty (const struct camera2_device *) |
int(* | set_frame_queue_dst_ops )(const struct camera2_device *, const camera2_frame_queue_dst_ops_t *frame_dst_ops) |
int(* | get_in_progress_count )(const struct camera2_device *) |
int(* | flush_captures_in_progress )(const struct camera2_device *) |
int(* | construct_default_request )(const struct camera2_device *, int request_template, camera_metadata_t **request) |
int(* | allocate_stream )(const struct camera2_device *, uint32_t width, uint32_t height, int format, const camera2_stream_ops_t *stream_ops, uint32_t *stream_id, uint32_t *format_actual, uint32_t *usage, uint32_t *max_buffers) |
int(* | register_stream_buffers )(const struct camera2_device *, uint32_t stream_id, int num_buffers, buffer_handle_t *buffers) |
int(* | release_stream )(const struct camera2_device *, uint32_t stream_id) |
int(* | allocate_reprocess_stream )(const struct camera2_device *, uint32_t width, uint32_t height, uint32_t format, const camera2_stream_in_ops_t *reprocess_stream_ops, uint32_t *stream_id, uint32_t *consumer_usage, uint32_t *max_buffers) |
int(* | allocate_reprocess_stream_from_stream )(const struct camera2_device *, uint32_t output_stream_id, const camera2_stream_in_ops_t *reprocess_stream_ops, uint32_t *stream_id) |
int(* | release_reprocess_stream )(const struct camera2_device *, uint32_t stream_id) |
int(* | trigger_action )(const struct camera2_device *, uint32_t trigger_id, int32_t ext1, int32_t ext2) |
int(* | set_notify_callback )(const struct camera2_device *, camera2_notify_callback notify_cb, void *user) |
int(* | get_metadata_vendor_tag_ops )(const struct camera2_device *, vendor_tag_query_ops_t **ops) |
int(* | dump )(const struct camera2_device *, int fd) |
int(* | get_instance_metadata )(const struct camera2_device *, camera_metadata **instance_metadata) |
Nội dung mô tả chi tiết
Tài liệu về trường
int(* allocate_reprocess_stream)(const struct camera2_device *, uint32_t width, uint32_t height, uint32_t format, const camera2_stream_in_ops_t *reprocess_stream_ops,uint32_t *stream_id, uint32_t *consumer_usage, uint32_t *max_buffers) |
allocate_reprocess_stream:
Phân bổ luồng đầu vào mới để sử dụng, được xác định theo chiều rộng, chiều cao vùng đệm đầu ra và định dạng pixel. Trả về mã nhận dạng của luồng mới, cờ sử dụng gralloc và số lượng vùng đệm cần thiết có thể thu được đồng thời khi thành công. Điều kiện lỗi:
- Yêu cầu tổ hợp chiều rộng/chiều cao/định dạng không được liệt kê là được các đặc điểm tĩnh của cảm biến hỗ trợ
- Yêu cầu định cấu hình quá nhiều luồng xử lý lại cùng một lúc.
Tham số đầu vào:
- width, height, format: Thông số kỹ thuật cho các vùng đệm sẽ được gửi qua luồng này. Định dạng phải là một giá trị trong danh sách HAL_PIXEL_FORMAT_*.
- reprocess_stream_ops: Cấu trúc con trỏ hàm để thu nạp và giải phóng vùng đệm cho luồng này. Luồng cơ bản sẽ được định cấu hình dựa trên mức sử dụng và đầu ra max_buffers.
Tham số đầu ra:
- stream_id: Số nguyên chưa ký xác định luồng này. Giá trị này được dùng trong các yêu cầu đến để xác định luồng và trong quá trình phát hành luồng. Các mã này được đánh số riêng biệt với mã luồng đầu vào.
- consumer_usage: Mặt nạ sử dụng gralloc mà thiết bị HAL cần để sử dụng loại dữ liệu được yêu cầu. Giá trị này được dùng để phân bổ vùng đệm gralloc mới cho hàng đợi vùng đệm luồng.
- max_buffers: Số lượng vùng đệm tối đa mà thiết bị HAL có thể cần phải thu được cùng một lúc. Thiết bị không được có nhiều vùng đệm được thu nạp cùng một lúc hơn giá trị này.
int(* allocate_reprocess_stream_from_stream)(const struct camera2_device *, uint32_t output_stream_id, const camera2_stream_in_ops_t *reprocess_stream_ops,uint32_t *stream_id) |
allocate_reprocess_stream_from_stream:
Phân bổ luồng đầu vào mới để sử dụng, luồng này sẽ sử dụng các vùng đệm được phân bổ cho luồng đầu ra hiện có. Tức là sau khi HAL đưa một vùng đệm vào hàng đợi trên luồng đầu ra, HAL có thể thấy chính vùng đệm đó được chuyển cho HAL từ luồng xử lý lại đầu vào này. Sau khi HAL giải phóng vùng đệm trở lại luồng xử lý lại, vùng đệm sẽ được trả về hàng đợi đầu ra để sử dụng lại.
Điều kiện lỗi:
- Sử dụng luồng đầu ra có kích thước/định dạng không phù hợp làm cơ sở cho luồng xử lý lại.
- Cố gắng phân bổ quá nhiều luồng xử lý lại cùng một lúc.
Tham số đầu vào:
- output_stream_id: Mã của một luồng đầu ra hiện có có kích thước và định dạng phù hợp để xử lý lại.
- reprocess_stream_ops: Cấu trúc con trỏ hàm để thu nạp và giải phóng vùng đệm cho luồng này. Luồng cơ bản sẽ sử dụng cùng một tay điều khiển vùng đệm đồ hoạ như luồng đầu ra sử dụng.
Tham số đầu ra:
- stream_id: Số nguyên chưa ký xác định luồng này. Giá trị này được dùng trong các yêu cầu đến để xác định luồng và trong quá trình phát hành luồng. Các mã này được đánh số riêng biệt với mã luồng đầu vào.
Ứng dụng HAL phải luôn phát hành luồng xử lý lại trước khi phát hành luồng đầu ra dựa trên luồng đó.
int(* allocate_stream)(const struct camera2_device *,uint32_t width, uint32_t height, int format, const camera2_stream_ops_t *stream_ops,uint32_t *stream_id, uint32_t *format_actual,uint32_t *usage, uint32_t *max_buffers) |
allocate_stream:
Phân bổ luồng đầu ra mới để sử dụng, được xác định theo chiều rộng, chiều cao, mục tiêu của bộ đệm đầu ra và có thể là định dạng pixel. Trả về mã nhận dạng của luồng mới, cờ sử dụng gralloc, số lượng vùng đệm hàng đợi tối thiểu và có thể là định dạng pixel nếu thành công. Điều kiện lỗi:
- Yêu cầu tổ hợp chiều rộng/chiều cao/định dạng không được liệt kê là được các đặc điểm tĩnh của cảm biến hỗ trợ
- Yêu cầu quá nhiều luồng của một loại định dạng nhất định (ví dụ: 2 luồng thô bayer).
Tham số đầu vào:
- width, height, format: Thông số kỹ thuật cho các vùng đệm sẽ được gửi qua luồng này. Định dạng là một giá trị trong danh sách HAL_PIXEL_FORMAT_*. Nếu bạn sử dụng HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED, thì mô-đun gralloc của nền tảng sẽ chọn một định dạng dựa trên cờ sử dụng do HAL máy ảnh và người dùng luồng cung cấp. HAL máy ảnh sẽ kiểm tra các vùng đệm được chuyển đến trong lệnh gọi register_stream_buffers để lấy định dạng dành riêng cho quá trình triển khai nếu cần.
- stream_ops: Cấu trúc của con trỏ hàm để lấy và xếp hàng đợi vùng đệm cho luồng này. Luồng cơ bản sẽ được định cấu hình dựa trên mức sử dụng và đầu ra max_buffers. Các phương thức trong cấu trúc này có thể không được gọi cho đến khi allocate_stream trả về.
Tham số đầu ra:
- stream_id: Số nguyên chưa ký xác định luồng này. Giá trị này được dùng trong các yêu cầu đến để xác định luồng và trong quá trình phát hành luồng.
- cách sử dụng: Mặt nạ sử dụng gralloc mà thiết bị HAL cần để tạo loại dữ liệu được yêu cầu. Giá trị này được dùng để phân bổ vùng đệm gralloc mới cho hàng đợi vùng đệm luồng.
- max_buffers: Số lượng bộ đệm tối đa mà thiết bị HAL có thể cần phải loại bỏ cùng một lúc. Thiết bị không thể loại bỏ nhiều vùng đệm hơn giá trị này cùng một lúc.
int(* construct_default_request)(const struct camera2_device *, int request_template, camera_metadata_t **request) |
Tạo một yêu cầu mặc định đã điền sẵn cho các trường hợp sử dụng máy ảnh tiêu chuẩn.
Thiết bị phải trả về một yêu cầu hoàn chỉnh được định cấu hình để đáp ứng trường hợp sử dụng được yêu cầu, yêu cầu này phải là một trong các enum CAMERA2_TEMPLATE_* Bạn phải đưa tất cả các trường điều khiển yêu cầu vào, ngoại trừ android.request.outputStreams.
Bộ đệm siêu dữ liệu được trả về phải được phân bổ bằng allocate_camera_metadata. Khung này sẽ sở hữu bộ đệm.
int(* dump)(const struct camera2_device *, int fd) |
int(* flush_captures_in_progress)(const struct camera2_device *) |
Xoá tất cả bản ghi đang diễn ra. Bao gồm tất cả các yêu cầu đã xoá khỏi hàng đợi (thông thường hoặc xử lý lại) chưa đặt bất kỳ đầu ra nào vào luồng hoặc hàng đợi khung. Bạn phải hoàn tất quá trình chụp ảnh đã hoàn tất một phần như bình thường. Không thể xoá yêu cầu mới khỏi hàng đợi yêu cầu cho đến khi quá trình xả hoàn tất.
int(* get_in_progress_count)(const struct camera2_device *) |
int(* get_instance_metadata)(const struct camera2_device *, camera_metadata **instance_metadata) |
Nhận siêu dữ liệu dành riêng cho phiên bản thiết bị. Siêu dữ liệu này phải không đổi đối với một thực thể của thiết bị máy ảnh, nhưng có thể khác nhau giữa các lệnh gọi open(). Con trỏ camera_metadata được trả về phải hợp lệ cho đến khi phương thức close() của thiết bị được gọi.
Thông tin phiên bản:
CAMERA_DEVICE_API_VERSION_2_0:
Không có. Khung có thể không truy cập được con trỏ hàm này.
CAMERA_DEVICE_API_VERSION_2_1:
Hợp lệ. Có thể được khung gọi.
int(* get_metadata_vendor_tag_ops)(const struct camera2_device *, vendor_tag_query_ops_t **ops) |
int(* notify_request_queue_not_empty)(const struct camera2_device *) |
int(* register_stream_buffers)(const struct camera2_device *, uint32_t stream_id, int num_buffers, buffer_handle_t *buffers) |
Đăng ký vùng đệm cho một luồng nhất định. Phương thức này được gọi sau khi lệnh gọi allocate_stream thành công và trước khi yêu cầu đầu tiên tham chiếu đến luồng được đưa vào hàng đợi. Phương thức này nhằm cho phép thiết bị HAL liên kết hoặc chuẩn bị các vùng đệm để sử dụng sau này. num_buffers được đảm bảo ít nhất là max_buffers (từ allocate_stream), nhưng có thể lớn hơn. Các vùng đệm sẽ được khoá để sử dụng. Khi lệnh gọi kết thúc, tất cả vùng đệm phải sẵn sàng được trả về hàng đợi. Nếu định dạng luồng được đặt thành HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED, thì HAL máy ảnh sẽ kiểm tra các vùng đệm đã truyền vào đây để xác định mọi thông tin về định dạng pixel riêng của nền tảng.
int(* release_reprocess_stream)(const struct camera2_device *, uint32_t stream_id) |
int(* release_stream)(const struct camera2_device *, uint32_t stream_id) |
int(* set_frame_queue_dst_ops)(const struct camera2_device *, const camera2_frame_queue_dst_ops_t *frame_dst_ops) |
int(* set_notify_callback)(const struct camera2_device *, camera2_notify_callback notify_cb, void *user) |
int(* set_request_queue_src_ops)(const struct camera2_device *, const camera2_request_queue_src_ops_t *request_src_ops) |
int(* trigger_action)(const struct camera2_device *, uint32_t trigger_id, int32_t ext1, int32_t ext2) |
Tài liệu cho cấu trúc này được tạo từ tệp sau:
- hardware/libhardware/include/hardware/ camera2.h