Les métadonnées de frame sont introduites dans Android 11 en tant que membre de la structure de données BufferDesc. Ce nouveau champ est déclaré comme vec<uint8_t>
pour s'adapter à un format de données défini par le client et est opaque pour le gestionnaire 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 dont les données sont stockées dans un tampon distinct. Ces instances sont représentées par une instance de vec<T>
dans la 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 renseigner 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 pointervec<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)); ...