Métadonnées du frame

Les métadonnées de frame sont introduites dans Android 11 en tant que membre des données BufferDesc. structure. Ce nouveau champ est déclaré en tant que vec<uint8_t> pour s'adapter un format de données défini par le client et opaque pour un responsable 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> représente des tableaux de taille dynamique avec les données stocké dans un tampon distinct. Ces instances sont représentées par une instance vec<T> dans l'objet struct ce qui signifie que l'implémentation du pilote HAL de la caméra EVS est propriétaire de ces métadonnées et doit les nettoyer. correctement. Il existe deux façons de remplir les métadonnées:

  • Redimensionner le conteneur et remplir les données à l'aide de operator[]
        struct BufferDesc desc = {};
        ...
        desc.metadata.resize(10);
        for (auto i = 0; i < 10; ++i) {
            desc.metadata[i] = frameInfo[i];
        }
        ...
        
  • Utilisez setToExternal() pour faire pointer vec<T> vers votre structure de données personnalisée.
    struct BufferDesc desc = {};
    struct FrameMetadata metadata = {
       ...
    }; // this is in vendor-defined format.
    
    desc.metadata.setToExternal(&metadata, sizeof(metadata)); ...