Siêu dữ liệu khung được giới thiệu trong Android 11 dưới dạng một thành phần của cấu trúc dữ liệu BufferDesc. Trường mới này được khai báo là vec<uint8_t>
để phù hợp với định dạng dữ liệu do khách hàng xác định và không rõ ràng đối với trình quản lý EVS.
struct BufferDesc { /** * HIDL counterpart of AHardwareBuffer_Desc. Please see * hardware/interfaces/graphics/common/1.2/types.hal for more details. */ HardwareBuffer buffer; ... /** * Time that this buffer is being filled. */ int64_t timestamp; /** * Frame metadata field. This is opaque to EVS manager. */ vec<uint8_t> metadata; };
HIDL vec<T>
đại diện cho các mảng có kích thước động với dữ liệu được lưu trữ trong một vùng đệm riêng biệt. Các thực thể như vậy được biểu thị bằng một thực thể của vec<T>
trong cấu trúc, nghĩa là việc triển khai trình điều khiển HAL của Máy ảnh EVS sở hữu siêu dữ liệu này và phải dọn dẹp siêu dữ liệu đó đúng cách. Có hai cách để điền siêu dữ liệu:
- Thay đổi kích thước vùng chứa và điền dữ liệu bằng cách sử dụng
operator[]
struct BufferDesc desc = {}; ... desc.metadata.resize(10); for (auto i = 0; i < 10; ++i) { desc.metadata[i] = frameInfo[i]; } ...
- Sử dụng
setToExternal()
đểvec<T>
trỏ đến cấu trúc dữ liệu tuỳ chỉnh của bạn.struct BufferDesc desc = {}; struct FrameMetadata metadata = { ... }; // this is in vendor-defined format.
desc.metadata.setToExternal(&metadata, sizeof(metadata)); ...