Siêu dữ liệu khung,Siêu dữ liệu khung

Siêu dữ liệu khung được giới thiệu trong Android 11 với tư cách là thành viê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> để chứa định dạng dữ liệu do khách hàng xác định và không rõ ràng đối với người 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> biểu thị các mảng có kích thước động với dữ liệu được lưu trữ trong một bộ đệm riêng. Các phiên bản như vậy được thể hiện bằng một phiên bản của vec<T> trong struct , có nghĩa là việc triển khai trình điều khiển HAL của Camera EVS sở hữu siêu dữ liệu này và phải dọn sạch nó đú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() để tạo vec<T> trỏ tới cấu trúc dữ liệu tùy chỉnh của bạn.
    struct BufferDesc desc = {};
    struct FrameMetadata metadata = {
       ...
    }; // this is in vendor-defined format.
    
    desc.metadata.setToExternal(&metadata, sizeof(metadata)); ...
,

Siêu dữ liệu khung được giới thiệu trong Android 11 với tư cách là thành viê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> để chứa định dạng dữ liệu do khách hàng xác định và không rõ ràng đối với người 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> biểu thị các mảng có kích thước động với dữ liệu được lưu trữ trong một bộ đệm riêng. Các phiên bản như vậy được thể hiện bằng một phiên bản của vec<T> trong struct , có nghĩa là việc triển khai trình điều khiển HAL của Camera EVS sở hữu siêu dữ liệu này và phải dọn sạch nó đú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() để tạo vec<T> trỏ tới cấu trúc dữ liệu tùy chỉnh của bạn.
    struct BufferDesc desc = {};
    struct FrameMetadata metadata = {
       ...
    }; // this is in vendor-defined format.
    
    desc.metadata.setToExternal(&metadata, sizeof(metadata)); ...