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

फ़्रेम मेटाडेटा को Android 11 में बफ़रडेस्क डेटा के सदस्य के तौर पर उपलब्ध कराया गया है स्ट्रक्चर. शामिल करने के लिए इस नए फ़ील्ड को vec<uint8_t> के रूप में बताया गया है यह ग्राहक की ओर से तय किया गया डेटा फ़ॉर्मैट होता है. इसमें ईवीएस मैनेजर की जानकारी साफ़ तौर पर नहीं दिखती.

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>, इसका मतलब है कि यह मेटाडेटा, ईवीएस कैमरा एचएएल ड्राइवर के लिए तय किया गया है. इसलिए, इसे साफ़ करना चाहिए आवाज़ सही से सुनाई दे. मेटाडेटा भरने के दो तरीके हैं:

  • 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)); ...