फ़्रेम का मेटाडेटा

फ़्रेम मेटाडेटा को Android 11 में, BufferDesc डेटा स्ट्रक्चर के सदस्य के तौर पर पेश किया गया है. ग्राहक के तय किए गए डेटा फ़ॉर्मैट को शामिल करने के लिए, इस नए फ़ील्ड को vec<uint8_t> के तौर पर दिखाया गया है. यह 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>, डाइनैमिक साइज़ वाले ऐरे को दिखाता है. इन ऐरे का डेटा, अलग बफ़र में सेव होता है. ऐसे इंस्टेंस को स्ट्रक्चर में vec<T> के इंस्टेंस के साथ दिखाया जाता है. इसका मतलब है कि EVS Camera HAL ड्राइवर लागू करने वाले के पास इस मेटाडेटा का मालिकाना हक होता है और उसे इसे ठीक से हटाना चाहिए. मेटाडेटा भरने के दो तरीके हैं:

  • operator[] का इस्तेमाल करके, कंटेनर का साइज़ बदलना और डेटा भरना
        struct BufferDesc desc = {};
        ...
        desc.metadata.resize(10);
        for (auto i = 0; i < 10; ++i) {
            desc.metadata[i] = frameInfo[i];
        }
        ...
        
  • vec<T> को अपने कस्टम डेटा स्ट्रक्चर पर ले जाने के लिए, setToExternal() का इस्तेमाल करें.
    struct BufferDesc desc = {};
    struct FrameMetadata metadata = {
       ...
    }; // this is in vendor-defined format.
    
    desc.metadata.setToExternal(&metadata, sizeof(metadata)); ...