1020 lines
38 KiB
C
1020 lines
38 KiB
C
/*
|
||
* Copyright (c) 2019-2020, NVIDIA CORPORATION. All rights reserved.
|
||
*
|
||
* NVIDIA Corporation and its licensors retain all intellectual property
|
||
* and proprietary rights in and to this software, related documentation
|
||
* and any modifications thereto. Any use, reproduction, disclosure or
|
||
* distribution of this software and related documentation without an express
|
||
* license agreement from NVIDIA Corporation is strictly prohibited.
|
||
*
|
||
*/
|
||
|
||
/**
|
||
* @file
|
||
* <b>Defines NVIDIA DeepStream Metadata Structures </b>
|
||
*
|
||
* @b Description: This file defines DeepStream metadata structures.
|
||
*/
|
||
|
||
/**
|
||
* @defgroup metadata_structures Metadata Structures
|
||
*
|
||
* Define structures that hold metadata.
|
||
* @ingroup NvDsMetaApi
|
||
* @{
|
||
*/
|
||
|
||
#ifndef _NVDSMETA_NEW_H_
|
||
#define _NVDSMETA_NEW_H_
|
||
|
||
#include <stdbool.h>
|
||
|
||
#include "glib.h"
|
||
#include "gmodule.h"
|
||
#include "nvll_osd_struct.h"
|
||
|
||
#ifdef __cplusplus
|
||
extern "C"
|
||
{
|
||
#endif
|
||
|
||
/** Defines the number of additional fields available to the user
|
||
in the metadata structure. */
|
||
#define MAX_USER_FIELDS 4
|
||
|
||
#define MAX_RESERVED_FIELDS 4
|
||
/** Defines the maximum size of an array for storing a text result. */
|
||
#define MAX_LABEL_SIZE 128
|
||
/** Defines the maximum number of elements that a given display meta
|
||
can hold. */
|
||
#define MAX_ELEMENTS_IN_DISPLAY_META 16
|
||
/** Defines an untracked object ID. */
|
||
#define UNTRACKED_OBJECT_ID 0xFFFFFFFFFFFFFFFF
|
||
|
||
typedef GList NvDsFrameMetaList;
|
||
typedef GList NvDsUserMetaList;
|
||
typedef GList NvDsObjectMetaList;
|
||
typedef GList NvDisplayMetaList;
|
||
typedef GList NvDsClassifierMetaList;
|
||
typedef GList NvDsLabelInfoList;
|
||
typedef GList NvDsMetaList;
|
||
typedef void NvDsElementMeta;
|
||
|
||
/* In the following doc comment:
|
||
* @param[in] user_data A pointer to user-specific data. For internal use
|
||
* only; in applications it must be set to NULL.
|
||
*/
|
||
/**
|
||
* \brief Defines the type of a callback to copy metadata.
|
||
*
|
||
* The callback is passed pointers to source metadata. It allocates the
|
||
* required memory, copies the content from the source metadata and returns
|
||
* a pointer to the destination.
|
||
*
|
||
* @param[in] data A pointer to the source metadata.
|
||
* @param[in] user_data A pointer to user-specific data.
|
||
*/
|
||
typedef gpointer (*NvDsMetaCopyFunc) (gpointer data, gpointer user_data);
|
||
|
||
/**
|
||
* \brief Defines the type of a callback to free metadata.
|
||
*
|
||
* The callback is passed a pointer to metadata created by NvDsMetaCopyFunc().
|
||
* It frees the metadata and
|
||
* any other resources that the metadata uses.
|
||
*
|
||
* @param[in] data A pointer to the metadata to be freed.
|
||
* @param[in] user_data A pointer to user-specific data.
|
||
*/
|
||
typedef void (*NvDsMetaReleaseFunc) (gpointer data, gpointer user_data);
|
||
|
||
/**
|
||
* Specifies the type of metadata. All metadata types are subtypes of
|
||
* @ref NvDsMetaType. Members that represent NVIDIA-defined types are
|
||
* in the range from @ref NVDS_BATCH_META to @ref NVDS_START_USER_META.
|
||
* User-defined types may be assigned values greater than or equal to
|
||
* @ref NVDS_START_USER_META.
|
||
*/
|
||
typedef enum {
|
||
NVDS_INVALID_META=-1,
|
||
/** Specifies metadata type for formed batch. */
|
||
NVDS_BATCH_META = 1,
|
||
/** Specifies metadata type for frame. */
|
||
NVDS_FRAME_META,
|
||
/** Specifies metadata type for a detected object. */
|
||
NVDS_OBJ_META,
|
||
/** Specifies metadata type for display. */
|
||
NVDS_DISPLAY_META,
|
||
/** Specifies metadata type for an object classifier. */
|
||
NVDS_CLASSIFIER_META,
|
||
/** Specifies metadata type for a label assigned by a classifier. */
|
||
NVDS_LABEL_INFO_META,
|
||
/** Reserved for internal use. */
|
||
NVDS_USER_META,
|
||
/** Specifies metadata type for a payload generated by a message converter. */
|
||
NVDS_PAYLOAD_META,
|
||
/** Specifies metadata type for a payload generated by a message broker. */
|
||
NVDS_EVENT_MSG_META,
|
||
/** Specifies metadata type for an optical flow. */
|
||
NVDS_OPTICAL_FLOW_META,
|
||
/** Specifies metadata type for a latency measurement. */
|
||
NVDS_LATENCY_MEASUREMENT_META,
|
||
/** Specifies metadata type for raw inference output attached by Gst-nvinfer.
|
||
@see NvDsInferTensorMeta for details. */
|
||
NVDSINFER_TENSOR_OUTPUT_META,
|
||
/** Specifies metadata type for segmentation model output attached by
|
||
Gst-nvinfer. @see NvDsInferSegmentationMeta for details. */
|
||
NVDSINFER_SEGMENTATION_META,
|
||
/** Specifies metadata type for JPEG-encoded object crops.
|
||
* See the deepstream-image-meta-test app for details. */
|
||
NVDS_CROP_IMAGE_META,
|
||
/** metadata type to be set for tracking previous frames */
|
||
NVDS_TRACKER_PAST_FRAME_META,
|
||
/** Specifies metadata type for formed audio batch. */
|
||
NVDS_AUDIO_BATCH_META,
|
||
/** Specifies metadata type for audio frame. */
|
||
NVDS_AUDIO_FRAME_META,
|
||
/** Reserved field */
|
||
NVDS_RESERVED_META = 4095,
|
||
/**
|
||
* Specifies the start of a range of enum values that represent types of
|
||
* NVIDIA-defined Gst metas. The range is from NVDS_GST_CUSTOM_META to
|
||
* NVDS_GST_CUSTOM_META+4096, inclusive.
|
||
*/
|
||
NVDS_GST_CUSTOM_META = 4096,
|
||
/** Start adding user specific meta types from here */
|
||
/**
|
||
* Specifies the start of a range of enum values that represent custom
|
||
* (application-specific) Gst meta types. A custom meta type may be assigned
|
||
* any enum value equal to or larger than this.
|
||
*
|
||
* Such Gst metas may be attached by GStreamer plugins upstream from
|
||
* Gst-nvstreammux. They may have any contents that is a superset of
|
||
* the metadata in an @ref NvDsFrameMeta.
|
||
*/
|
||
NVDS_START_USER_META = NVDS_GST_CUSTOM_META + 4096 + 1,
|
||
NVDS_FORCE32_META = 0x7FFFFFFF
|
||
} NvDsMetaType;
|
||
|
||
/**
|
||
* Holds unclipped positional bounding box coordinates of the object processed
|
||
* by the component.
|
||
*/
|
||
typedef struct _NvDsComp_BboxInfo
|
||
{
|
||
NvBbox_Coords org_bbox_coords;
|
||
} NvDsComp_BboxInfo;
|
||
|
||
/**
|
||
* Holds information about a given metadata pool.
|
||
*/
|
||
typedef struct _NvDsMetaPool {
|
||
NvDsMetaType meta_type;
|
||
guint max_elements_in_pool;
|
||
guint element_size;
|
||
guint num_empty_elements;
|
||
guint num_full_elements;
|
||
NvDsMetaList * empty_list;
|
||
NvDsMetaList * full_list;
|
||
NvDsMetaCopyFunc copy_func;
|
||
NvDsMetaReleaseFunc release_func;
|
||
}NvDsMetaPool;
|
||
|
||
/**
|
||
* Holds information about base metadata of a given metadata type.
|
||
*/
|
||
typedef struct _NvDsBaseMeta {
|
||
/** Holds a pointer to batch_meta @ref NvDsBatchMeta. */
|
||
struct _NvDsBatchMeta *batch_meta;
|
||
/** Holds the metadata type of this metadata element. */
|
||
NvDsMetaType meta_type;
|
||
/** Holds a pointer to a user context. */
|
||
void * uContext;
|
||
/** Holds a user-defined copy function. The function is called to copy
|
||
or transform metadata from one buffer to another. @a meta_data and
|
||
@a user_data are passed as arguments. */
|
||
NvDsMetaCopyFunc copy_func;
|
||
/** Holds a user-defined release function. The function is called
|
||
when @a meta_data is to be released. */
|
||
NvDsMetaReleaseFunc release_func;
|
||
} NvDsBaseMeta;
|
||
|
||
/**
|
||
* Holds information about a formed batch containing frames from different
|
||
* sources.
|
||
*/
|
||
typedef struct _NvDsBatchMeta {
|
||
NvDsBaseMeta base_meta;
|
||
/** Holds the maximum number of frames in the batch. */
|
||
guint max_frames_in_batch;
|
||
/** Holds the number of frames now in the batch. */
|
||
guint num_frames_in_batch;
|
||
/** Holds a pointer to a pool of pointers of type @ref NvDsFrameMeta,
|
||
representing a pool of frame metas. */
|
||
NvDsMetaPool *frame_meta_pool;
|
||
/** Holds a pointer to a pool of pointers of type NvDsObjMeta,
|
||
representing a pool of object metas. */
|
||
NvDsMetaPool *obj_meta_pool;
|
||
/** Holds a pointer to a pool of pointers of type @ref NvDsClassifierMeta,
|
||
representing a pool of classifier metas. */
|
||
NvDsMetaPool *classifier_meta_pool;
|
||
/** Holds a pointer to a pool of pointers of type @ref NvDsDisplayMeta,
|
||
representing a pool of display metas. */
|
||
NvDsMetaPool *display_meta_pool;
|
||
/** Holds a pointer to a pool of pointers of type @ref NvDsUserMeta,
|
||
representing a pool of user metas. */
|
||
NvDsMetaPool *user_meta_pool;
|
||
/** Holds a pointer to a pool of pointers of type @ref NvDsLabelInfo,
|
||
representing a pool of label metas. */
|
||
NvDsMetaPool *label_info_meta_pool;
|
||
/** Holds a pointer to a list of pointers of type NvDsFrameMeta
|
||
or NvDsAudioFrameMeta (when the batch represent audio batch),
|
||
representing frame metas used in the current batch.
|
||
*/
|
||
NvDsFrameMetaList *frame_meta_list;
|
||
/** Holds a pointer to a list of pointers of type NvDsUserMeta,
|
||
representing user metas in the current batch. */
|
||
NvDsUserMetaList *batch_user_meta_list;
|
||
/** Holds a lock to be set before accessing metadata to avoid
|
||
simultaneous update by multiple components. */
|
||
GRecMutex meta_mutex;
|
||
/** Holds an array of user-specific batch information. */
|
||
gint64 misc_batch_info[MAX_USER_FIELDS];
|
||
/** For internal use. */
|
||
gint64 reserved[MAX_RESERVED_FIELDS];
|
||
} NvDsBatchMeta;
|
||
|
||
/**
|
||
* Holds metadata for a frame in a batch.
|
||
*/
|
||
typedef struct _NvDsFrameMeta {
|
||
/** Holds the base metadata for the frame. */
|
||
NvDsBaseMeta base_meta;
|
||
/** Holds the pad or port index of the Gst-streammux plugin for the frame
|
||
in the batch. */
|
||
guint pad_index;
|
||
/** Holds the location of the frame in the batch. The frame's
|
||
@ref NvBufSurfaceParams are at index @a batch_id in the @a surfaceList
|
||
array of @ref NvBufSurface. */
|
||
guint batch_id;
|
||
/** Holds the current frame number of the source. */
|
||
gint frame_num;
|
||
/** Holds the presentation timestamp (PTS) of the frame. */
|
||
guint64 buf_pts;
|
||
/** Holds the ntp timestamp. */
|
||
guint64 ntp_timestamp;
|
||
/** Holds the source IDof the frame in the batch, e.g. the camera ID.
|
||
It need not be in sequential order. */
|
||
guint source_id;
|
||
/** Holds the number of surfaces in the frame, required in case of
|
||
multiple surfaces in the frame. */
|
||
gint num_surfaces_per_frame;
|
||
/* Holds the width of the frame at input to Gst-streammux. */
|
||
guint source_frame_width;
|
||
/* Holds the height of the frame at input to Gst-streammux. */
|
||
guint source_frame_height;
|
||
/* Holds the surface type of the subframe, required in case of
|
||
multiple surfaces in the frame. */
|
||
guint surface_type;
|
||
/* Holds the surface index of tje subframe, required in case of
|
||
multiple surfaces in the frame. */
|
||
guint surface_index;
|
||
/** Holds the number of object meta elements attached to current frame. */
|
||
guint num_obj_meta;
|
||
/** Holds a Boolean indicating whether inference is performed on the frame. */
|
||
gboolean bInferDone;
|
||
/** Holds a pointer to a list of pointers of type @ref NvDsObjectMeta
|
||
in use for the frame. */
|
||
NvDsObjectMetaList *obj_meta_list;
|
||
/** Holds a pointer to a list of pointers of type @ref NvDsDisplayMeta
|
||
in use for the frame. */
|
||
NvDisplayMetaList *display_meta_list;
|
||
/** Holds a pointer to a list of pointers of type @ref NvDsUserMeta
|
||
in use for the frame. */
|
||
NvDsUserMetaList *frame_user_meta_list;
|
||
/** Holds additional user-defined frame information. */
|
||
gint64 misc_frame_info[MAX_USER_FIELDS];
|
||
/** For internal use. */
|
||
gint64 reserved[MAX_RESERVED_FIELDS];
|
||
} NvDsFrameMeta;
|
||
|
||
/**
|
||
* Holds metadata for an object in the frame.
|
||
*/
|
||
typedef struct _NvDsObjectMeta {
|
||
NvDsBaseMeta base_meta;
|
||
/** Holds a pointer to the parent @ref NvDsObjectMeta. Set to NULL if
|
||
no parent exists. */
|
||
struct _NvDsObjectMeta *parent;
|
||
/** Holds a unique component ID that identifies the metadata
|
||
in this structure. */
|
||
gint unique_component_id;
|
||
/** Holds the index of the object class inferred by the primary
|
||
detector/classifier. */
|
||
gint class_id;
|
||
/** Holds a unique ID for tracking the object. @ref UNTRACKED_OBJECT_ID
|
||
indicates that the object has not been tracked. */
|
||
guint64 object_id;
|
||
/** Holds a structure containing bounding box parameters of the object when
|
||
detected by detector. */
|
||
NvDsComp_BboxInfo detector_bbox_info;
|
||
/** Holds a structure containing bounding box coordinates of the object when
|
||
* processed by tracker. */
|
||
NvDsComp_BboxInfo tracker_bbox_info;
|
||
/** Holds a confidence value for the object, set by the inference
|
||
component. confidence will be set to -0.1, if "Group Rectangles" mode of
|
||
clustering is chosen since the algorithm does not preserve confidence
|
||
values. Also, for objects found by tracker and not inference component,
|
||
confidence will be set to -0.1 */
|
||
gfloat confidence;
|
||
/** Holds a confidence value for the object set by nvdcf_tracker.
|
||
* tracker_confidence will be set to -0.1 for KLT and IOU tracker */
|
||
gfloat tracker_confidence;
|
||
/** Holds a structure containing positional parameters of the object
|
||
* processed by the last component that updates it in the pipeline.
|
||
* e.g. If the tracker component is after the detector component in the
|
||
* pipeline then positinal parameters are from tracker component.
|
||
* Positional parameters are clipped so that they do not fall outside frame
|
||
* boundary. Can also be used to overlay borders or semi-transparent boxes on
|
||
* objects. @see NvOSD_RectParams. */
|
||
NvOSD_RectParams rect_params;
|
||
/** Holds mask parameters for the object. This mask is overlayed on object
|
||
* @see NvOSD_MaskParams. */
|
||
NvOSD_MaskParams mask_params;
|
||
/** Holds text describing the object. This text can be overlayed on the
|
||
standard text that identifies the object. @see NvOSD_TextParams. */
|
||
NvOSD_TextParams text_params;
|
||
/** Holds a string describing the class of the detected object. */
|
||
gchar obj_label[MAX_LABEL_SIZE];
|
||
/** Holds a pointer to a list of pointers of type @ref NvDsClassifierMeta. */
|
||
NvDsClassifierMetaList *classifier_meta_list;
|
||
/** Holds a pointer to a list of pointers of type @ref NvDsUserMeta. */
|
||
NvDsUserMetaList *obj_user_meta_list;
|
||
/** Holds additional user-defined object information. */
|
||
gint64 misc_obj_info[MAX_USER_FIELDS];
|
||
/** For internal use. */
|
||
gint64 reserved[MAX_RESERVED_FIELDS];
|
||
}NvDsObjectMeta;
|
||
|
||
/**
|
||
* Holds classifier metadata for an object.
|
||
*/
|
||
typedef struct _NvDsClassifierMeta {
|
||
NvDsBaseMeta base_meta;
|
||
/** Holds the number of outputs/labels produced by the classifier. */
|
||
guint num_labels;
|
||
/** Holds a unique component ID for the classifier metadata. */
|
||
gint unique_component_id;
|
||
/** Holds a pointer to a list of pointers of type @ref NvDsLabelInfo. */
|
||
NvDsLabelInfoList *label_info_list;
|
||
} NvDsClassifierMeta;
|
||
|
||
/**
|
||
* Holds label metadata for the classifier.
|
||
*/
|
||
typedef struct _NvDsLabelInfo {
|
||
NvDsBaseMeta base_meta;
|
||
/** Holds the number of classes of the given label. */
|
||
guint num_classes;
|
||
/** Holds an string describing the label of the classified object. */
|
||
gchar result_label[MAX_LABEL_SIZE];
|
||
/** Holds a pointer to the result label if its length exceeds MAX_LABEL_SIZE bytes. */
|
||
gchar *pResult_label;
|
||
/** Holds the class UD of the best result. */
|
||
guint result_class_id;
|
||
/** Holds the label ID in case there are multiple label classifiers. */
|
||
guint label_id;
|
||
/** Holds the probability of best result. */
|
||
gfloat result_prob;
|
||
} NvDsLabelInfo;
|
||
|
||
/**
|
||
* Holds display metadata that the user can specify in the frame.
|
||
*/
|
||
typedef struct NvDsDisplayMeta {
|
||
NvDsBaseMeta base_meta;
|
||
/** Holds the number of rectangles described. */
|
||
guint num_rects;
|
||
/** Holds the number of labels (strings) described. */
|
||
guint num_labels;
|
||
/** Holds the number of lines described. */
|
||
guint num_lines;
|
||
/** Holds the number of arrows described. */
|
||
guint num_arrows;
|
||
/** Holds the number of circles described. */
|
||
guint num_circles;
|
||
/** Holds an array of positional parameters for rectangles.
|
||
Used to overlay borders or semi-transparent rectangles,
|
||
as required by the application. @see NvOSD_RectParams. */
|
||
NvOSD_RectParams rect_params[MAX_ELEMENTS_IN_DISPLAY_META];
|
||
/** Holds an array of text parameters for user-defined strings that can be
|
||
overlayed using this structure. @see NvOSD_TextParams. */
|
||
NvOSD_TextParams text_params[MAX_ELEMENTS_IN_DISPLAY_META];
|
||
/** Holds an array of line parameters that the user can use to draw polygons
|
||
in the frame, e.g. to show a RoI in the frame. @see NvOSD_LineParams. */
|
||
NvOSD_LineParams line_params[MAX_ELEMENTS_IN_DISPLAY_META];
|
||
/** Holds an array of arrow parameters that the user can use to draw arrows
|
||
in the frame. @see NvOSD_ArrowParams */
|
||
NvOSD_ArrowParams arrow_params[MAX_ELEMENTS_IN_DISPLAY_META];
|
||
/** Holds an array of circle parameters that the user can use to draw circles
|
||
in the frame. @see NvOSD_CircleParams */
|
||
NvOSD_CircleParams circle_params[MAX_ELEMENTS_IN_DISPLAY_META];
|
||
/** Holds an array of user-defined OSD metadata. */
|
||
gint64 misc_osd_data[MAX_USER_FIELDS];
|
||
/** For internal use. */
|
||
gint64 reserved[MAX_RESERVED_FIELDS];
|
||
} NvDsDisplayMeta;
|
||
|
||
/**
|
||
* Holds user metadata.
|
||
*/
|
||
typedef struct _NvDsUserMeta {
|
||
NvDsBaseMeta base_meta;
|
||
/** Holds a pointer to user data to be attached.
|
||
See the deepstream-user-metadata-test example for usage. */
|
||
void *user_meta_data;
|
||
} NvDsUserMeta;
|
||
|
||
/**
|
||
* Acquires a lock before updating metadata.
|
||
*
|
||
* @param[in] batch_meta A pointer to the NvDsBatchMeta structure
|
||
* to be locked.
|
||
*/
|
||
void nvds_acquire_meta_lock (NvDsBatchMeta *batch_meta);
|
||
|
||
/**
|
||
* Releases the lock after updating metadata.
|
||
*
|
||
* @param[in] batch_meta A pointer to NvDsBatchMeta structure to be unlocked.
|
||
*/
|
||
void nvds_release_meta_lock (NvDsBatchMeta *batch_meta);
|
||
|
||
/**
|
||
* Creates a batch metadata structure for a batch of specified size.
|
||
*
|
||
* @param[in] max_batch_size The maximum number of frames in the batch.
|
||
* @ return A pointer to the created structure.
|
||
*/
|
||
NvDsBatchMeta *nvds_create_batch_meta(guint max_batch_size);
|
||
|
||
/**
|
||
* Destroys a batch metadata structure.
|
||
*
|
||
* @param[in] batch_meta A pointer to batch metadata structure
|
||
* to be destroyed.
|
||
* @returns True if the object was successfully destroyed, or false otherwise.
|
||
*/
|
||
gboolean nvds_destroy_batch_meta(NvDsBatchMeta *batch_meta);
|
||
|
||
/**
|
||
* \brief Acquires a frame meta from a batch's frame meta pool.
|
||
*
|
||
* You must acquire a frame meta before you can fill it with frame metadata.
|
||
*
|
||
* @param[in] batch_meta A pointer to batch meta from which to acquire
|
||
* a frame meta.
|
||
*
|
||
* @return A pointer to the acquired frame meta.
|
||
*/
|
||
NvDsFrameMeta *nvds_acquire_frame_meta_from_pool (NvDsBatchMeta *batch_meta);
|
||
|
||
/**
|
||
* Adds a frame meta to a batch meta.
|
||
*
|
||
* @param[in] batch_meta A pointer to the NvDsBatchMeta to which
|
||
* @a frame_meta is to be added.
|
||
* @param[in] frame_meta A pointer to a frame meta to be added to
|
||
* @a batch_meta.
|
||
*/
|
||
void nvds_add_frame_meta_to_batch(NvDsBatchMeta * batch_meta,
|
||
NvDsFrameMeta * frame_meta);
|
||
|
||
/**
|
||
* Removes a frame meta from a batch meta.
|
||
*
|
||
* @param[in] batch_meta A pointer to the batch meta from which @a frame_meta
|
||
* is to be removed.
|
||
* @param[in] frame_meta A pointer to the frame meta to be removed from
|
||
* @a batch_meta.
|
||
*/
|
||
void nvds_remove_frame_meta_from_batch (NvDsBatchMeta *batch_meta,
|
||
NvDsFrameMeta * frame_meta);
|
||
|
||
/**
|
||
* @brief Acquires an object meta from a batch meta's object meta pool.
|
||
*
|
||
* You must acquire an object meta before you can fill it with object metadata.
|
||
*
|
||
* @param[in] batch_meta A pointer to the batch meta from which to acquire
|
||
* an object meta.
|
||
*
|
||
* @return A pointer to the acquired object meta.
|
||
*/
|
||
NvDsObjectMeta *nvds_acquire_obj_meta_from_pool (NvDsBatchMeta *batch_meta);
|
||
|
||
/**
|
||
* @brief Adds an object meta to a frame meta.
|
||
*
|
||
* You must acquire the object meta with nvds_acquire_object_meta_from_pool()
|
||
* and fill it with metadata before you add to to the frame meta.
|
||
*
|
||
* @param[in] frame_meta A pointer to the frame meta to which @a obj_meta
|
||
* is to be added.
|
||
* @param[in] obj_meta A pointer to an object meta to be added to @a frame_meta.
|
||
* @param[in] obj_parent A pointer to the this object meta's parent object meta.
|
||
* This pointer is stored in @a obj_meta->parent.
|
||
*/
|
||
void nvds_add_obj_meta_to_frame(NvDsFrameMeta * frame_meta,
|
||
NvDsObjectMeta *obj_meta, NvDsObjectMeta *obj_parent);
|
||
|
||
/**
|
||
* Removes an object meta from the frame meta to which it is attached.
|
||
*
|
||
* @param[in] frame_meta A pointer to frame meta from which @a obj_meta
|
||
* is to be removed.
|
||
* @param[in] obj_meta A pointer to the object meta to be removed from
|
||
* @a frame_meta.
|
||
*/
|
||
void nvds_remove_obj_meta_from_frame (NvDsFrameMeta * frame_meta,
|
||
NvDsObjectMeta *obj_meta);
|
||
|
||
/**
|
||
* @brief Acquires a classifier meta from a batch meta's classifier meta pool.
|
||
*
|
||
* You must acquire a classifier meta from the classifier meta pool before you
|
||
* can fill it with classifier metadata.
|
||
*
|
||
* @param[in] batch_meta A pointer to the batch meta from which to acquire
|
||
* a classifier meta.
|
||
*
|
||
* @return The classifier meta acquired from the batch meta's
|
||
* classifier meta pool.
|
||
*/
|
||
NvDsClassifierMeta *nvds_acquire_classifier_meta_from_pool(
|
||
NvDsBatchMeta *batch_meta);
|
||
|
||
/**
|
||
* @brief Adds a classifier meta the appropriate object meta.
|
||
*
|
||
* You must acquire a classifier meta with
|
||
* nvds_acquire_classifier_meta_from_pool() and fill it with
|
||
* classifier metadata before you add it to the object metadata.
|
||
*
|
||
* @param[in] obj_meta A pointer to the object meta to which
|
||
* @a classifier_meta is to be added.
|
||
* @param[in] classifier_meta A pointer to the classifier meta to be added
|
||
* to @a obj_meta.
|
||
*/
|
||
void nvds_add_classifier_meta_to_object(NvDsObjectMeta *obj_meta,
|
||
NvDsClassifierMeta * classifier_meta);
|
||
|
||
/**
|
||
* Removes a classifier meta from the object meta to which it is attached.
|
||
*
|
||
* @param[in] obj_meta A pointer to the object meta from which
|
||
* @a classifier_meta is to be removed.
|
||
* @param[in] classifier_meta A pointer to the classifier meta to be removed
|
||
* from @a obj_meta.
|
||
*/
|
||
void nvds_remove_classifier_meta_from_obj (NvDsObjectMeta * obj_meta,
|
||
NvDsClassifierMeta *classifier_meta);
|
||
|
||
/**
|
||
* @brief Acquires a display meta from a batch meta's display meta pool.
|
||
*
|
||
* You must acquire a display meta before you can fill it with display metadata.
|
||
*
|
||
* @param[in] batch_meta A pointer to the batch meta from which to acquire
|
||
* a display meta.
|
||
*
|
||
* @return The display meta acquired from the batch meta's display meta pool.
|
||
*/
|
||
NvDsDisplayMeta *nvds_acquire_display_meta_from_pool (
|
||
NvDsBatchMeta *batch_meta);
|
||
|
||
/**
|
||
* @brief Adds a display meta to the appropriate frame meta.
|
||
*
|
||
* You must acquire a display meta with nvds_)acquire_display_meta_from_pool()
|
||
* and fill it with display metadata before you can add it to the frame meta.
|
||
*
|
||
* @param[in] frame_meta A pointer to frame meta to which @a display_meta
|
||
* is to be added.
|
||
* @param[in] display_meta A pointer to the display meta to be added to
|
||
* @a frame_meta.
|
||
*/
|
||
void nvds_add_display_meta_to_frame(NvDsFrameMeta * frame_meta,
|
||
NvDsDisplayMeta * display_meta);
|
||
|
||
/**
|
||
* Removes a display meta from the frame meta to which it is attached.
|
||
*
|
||
* @param[in] frame_meta A pointer to the frame meta from which
|
||
* @a display_meta is to be removed.
|
||
* @param[in] display_meta A pointer to the display meta to be removed from
|
||
* @a frame_meta.
|
||
*/
|
||
void nvds_remove_display_meta_from_frame (NvDsFrameMeta * frame_meta,
|
||
NvDsDisplayMeta *display_meta);
|
||
|
||
/**
|
||
* @brief Acquires a label info meta from a batch meta's label info meta pool.
|
||
*
|
||
* You must acquire a label info meta before you can fill it and add it to a
|
||
* classifier meta.
|
||
*
|
||
* @param[in] batch_meta A pointer to the batch meta from which to acquire
|
||
* a label info meta.
|
||
*
|
||
* @return The label info meta acquired from the batch meta's
|
||
* label info meta pool.
|
||
*/
|
||
NvDsLabelInfo *nvds_acquire_label_info_meta_from_pool (
|
||
NvDsBatchMeta *batch_meta);
|
||
|
||
/**
|
||
* Adds a label info meta to a classifier meta.
|
||
*
|
||
* @param[in] classifier_meta A pointer to the classifier meta to which
|
||
* @a label_info_meta is to be added.
|
||
* @param[in] label_info_meta A pointer to the label info meta to be added
|
||
* to @a classifier_meta.
|
||
*/
|
||
void nvds_add_label_info_meta_to_classifier(
|
||
NvDsClassifierMeta *classifier_meta, NvDsLabelInfo * label_info_meta);
|
||
|
||
/**
|
||
* Removes a label info meta from the classifier meta to which it is attached.
|
||
*
|
||
* @param[in] classifier_meta A pointer to the classifier meta from which
|
||
* @a label_info_meta is to be removed.
|
||
* @param[in] label_info_meta A pointer to the label info meta to be removed
|
||
* from @a classifier_meta.
|
||
*/
|
||
void nvds_remove_label_info_meta_from_classifier (
|
||
NvDsClassifierMeta *classifier_meta, NvDsLabelInfo *label_info_meta);
|
||
|
||
/**
|
||
* Add a user meta to a batch meta.
|
||
*
|
||
* @param[in] batch_meta A pointer to batch meta to which @a user_meta
|
||
* is to be added.
|
||
* @param[in] user_meta A pointer to a user meta to be added to
|
||
* @a batch_meta.
|
||
*/
|
||
void nvds_add_user_meta_to_batch(NvDsBatchMeta * batch_meta,
|
||
NvDsUserMeta * user_meta);
|
||
|
||
/**
|
||
* Add a user meta to a frame meta.
|
||
*
|
||
* @param[in] frame_meta A pointer to the frame meta to which @a user_meta
|
||
* is to be added.
|
||
* @param[in] user_meta A pointer to a user meta to be added to
|
||
* @a frame_meta.
|
||
*/
|
||
void nvds_add_user_meta_to_frame(NvDsFrameMeta * frame_meta,
|
||
NvDsUserMeta * user_meta);
|
||
|
||
/**
|
||
* Add a user meta user to an object meta.
|
||
*
|
||
* @param[in] obj_meta A pointer to the object meta to which @a user_meta
|
||
* is to be added.
|
||
* @param[in] user_meta A pointer to the user meta to be added to
|
||
* @a obj_meta.
|
||
*/
|
||
void nvds_add_user_meta_to_obj(NvDsObjectMeta * obj_meta,
|
||
NvDsUserMeta * user_meta);
|
||
|
||
/**
|
||
* @brief Acquires a user meta from a batch meta's user meta pool.
|
||
*
|
||
* You must acquire a user meta before you can fill it with user metdata and
|
||
* add it to a batch, frame, or object meta (call nvds_add_user_data_to_batch(),
|
||
* nvds_add_user_data_to_frame(), or nvds_add_user_data_to_obj()).
|
||
*
|
||
* @param[in] batch_meta A pointer to the batch meta from which to acquire
|
||
* a user meta.
|
||
*/
|
||
NvDsUserMeta *nvds_acquire_user_meta_from_pool (NvDsBatchMeta *batch_meta);
|
||
|
||
/**
|
||
* Removes a user meta from a batch meta to which it is attached.
|
||
*
|
||
* @param[in] batch_meta A pointer to the batch meta from which @a user_meta
|
||
* is to be removed.
|
||
* @param[in] user_meta A pointer to the user meta to be removed from
|
||
* @a batch_meta.
|
||
*
|
||
* returns acquired @ref NvDsUserMeta pointer from user meta pool
|
||
*/
|
||
void nvds_remove_user_meta_from_batch(NvDsBatchMeta * batch_meta,
|
||
NvDsUserMeta * user_meta);
|
||
|
||
/**
|
||
* Removes a user meta from a frame meta to which it is attached.
|
||
*
|
||
* @param[in] frame_meta A pointer to the frame meta from which @a user_meta
|
||
* is to be removed.
|
||
* @param[in] user_meta A pointer to the user meta to be removed from
|
||
* @a frame_meta.
|
||
*/
|
||
void nvds_remove_user_meta_from_frame(NvDsFrameMeta * frame_meta,
|
||
NvDsUserMeta * user_meta);
|
||
|
||
/**
|
||
* Removes a user meta from an object meta to which it is attached.
|
||
*
|
||
* @param[in] obj_meta A pointer to the object meta from which @a user_meta
|
||
* is to be removed.
|
||
* @param[in] user_meta A pointer to the user to be removed from
|
||
* @a obj_meta.
|
||
*/
|
||
void nvds_remove_user_meta_from_object(NvDsObjectMeta * obj_meta,
|
||
NvDsUserMeta * user_meta);
|
||
|
||
/**
|
||
* A debugging function; prints current metadata information available after
|
||
* inference. This function should be called after inference.
|
||
*
|
||
* @param[in] batch_meta A pointer to a batch meta from which to
|
||
* print information.
|
||
* @return
|
||
*/
|
||
gboolean nvds_get_current_metadata_info(NvDsBatchMeta *batch_meta);
|
||
|
||
/**
|
||
* @brief Copies or transforms meta data from one buffer to another.
|
||
*
|
||
* @param[in] data A pointer to a batch meta (of type @ref NvDsBatchMeta),
|
||
* cast to @c gpointer.
|
||
* @param[in] user_data Currently not in use and should be set to NULL.
|
||
*
|
||
* @return A pointer to a metadata structure, to be cast to type NvDsBatchMeta.
|
||
*/
|
||
gpointer nvds_batch_meta_copy_func (gpointer data, gpointer user_data);
|
||
|
||
/**
|
||
* Releases metadata from a batch meta.
|
||
*
|
||
* @param[in] data A pointer to a batch meta (type @ref NvDsBatchMeta),
|
||
* cast to @c gpointer.
|
||
* @param[in] user_data Currently not in use and should be set to NULL.
|
||
*/
|
||
void nvds_batch_meta_release_func(gpointer data, gpointer user_data);
|
||
|
||
/**
|
||
* Returns a pointer to a specified frame meta in the frame meta list.
|
||
*
|
||
* @param[in] frame_meta_list A pointer to a list of pointers to frame metas.
|
||
* @param[in] index The index of the frame meta to be returned.
|
||
*
|
||
* @return A pointer to the @a index'th frame meta in the frame meta list.
|
||
*/
|
||
NvDsFrameMeta *nvds_get_nth_frame_meta (NvDsFrameMetaList *frame_meta_list,
|
||
guint index);
|
||
|
||
/**
|
||
* Removes all of the frame metadata attached to a batch meta.
|
||
*
|
||
* @param[in] batch_meta A pointer to the batch whose frame meta list
|
||
* is to be cleared.
|
||
* @param[in] meta_list A pointer to the frame meta list to be cleared.
|
||
*/
|
||
void nvds_clear_frame_meta_list(NvDsBatchMeta *batch_meta,
|
||
NvDsFrameMetaList *meta_list);
|
||
|
||
/**
|
||
* Removes all the object metadata attached to a frame meta.
|
||
*
|
||
* @param[in] frame_meta A pointer to the frame meta whose object meta list
|
||
* is to be cleared.
|
||
* @param[in] meta_list A pointer to the object meta list to be cleared.
|
||
*/
|
||
void nvds_clear_obj_meta_list(NvDsFrameMeta *frame_meta,
|
||
NvDsObjectMetaList *meta_list);
|
||
|
||
/**
|
||
* Removes all of the classifier metadata attached to an object meta.
|
||
*
|
||
* @param[in] obj_meta A pointer to @ref NvDsObjectMeta from which @a
|
||
* NvDsClassifierMetaList needs to be cleared
|
||
* @param[in] meta_list A pointer to @ref NvDsClassifierMetaList which needs to
|
||
* be cleared
|
||
*/
|
||
void nvds_clear_classifier_meta_list(NvDsObjectMeta *obj_meta,
|
||
NvDsClassifierMetaList *meta_list);
|
||
|
||
/**
|
||
* Removes all of the label info metadata attached to a classifier meta.
|
||
*
|
||
* @param[in] classifier_meta A pointer to the classifier meta whose
|
||
* label info meta list is to be cleared.
|
||
* @param[in] meta_list A pointer to the label info meta list to be
|
||
* cleared.
|
||
*/
|
||
void nvds_clear_label_info_meta_list(NvDsClassifierMeta *classifier_meta,
|
||
NvDsLabelInfoList *meta_list);
|
||
|
||
/**
|
||
* Removes all of the display metadata attached to a frame meta.
|
||
*
|
||
* @param[in] frame_meta A pointer to the frame meta whose display meta list
|
||
* is to be cleared.
|
||
* @param[in] meta_list A pointer to the display meta list to be cleared.
|
||
*/
|
||
void nvds_clear_display_meta_list(NvDsFrameMeta *frame_meta,
|
||
NvDisplayMetaList *meta_list);
|
||
|
||
/**
|
||
* Removes all of the user metadata attached to the batch meta.
|
||
*
|
||
* @param[in] batch_meta A pointer to the batch meta whose
|
||
* user meta list is to be cleared.
|
||
* @param[in] meta_list A pointer to the user meta list to be
|
||
* cleared
|
||
*/
|
||
void nvds_clear_batch_user_meta_list(NvDsBatchMeta *batch_meta,
|
||
NvDsUserMetaList *meta_list);
|
||
|
||
/**
|
||
* Removes all of the user metadata attached to the frame meta.
|
||
*
|
||
* @param[in] frame_meta A pointer to the frame meta whose
|
||
* user meta list is to be cleared.
|
||
* @param[in] meta_list A pointer to the user meta list to be cleared.
|
||
*/
|
||
void nvds_clear_frame_user_meta_list(NvDsFrameMeta *frame_meta,
|
||
NvDsUserMetaList *meta_list);
|
||
|
||
/**
|
||
* Removes all of the user metadata attached to an object meta.
|
||
*
|
||
* @param[in] object_meta A pointer to the object meta whose
|
||
* user meta list is to be cleared.
|
||
* @param[in] meta_list A pointer to the user meta list to be cleared.
|
||
*/
|
||
void nvds_clear_obj_user_meta_list(NvDsObjectMeta *object_meta,
|
||
NvDsUserMetaList *meta_list);
|
||
|
||
/**
|
||
* Removes all of the metadata elements attached to a metadata list.
|
||
*
|
||
* @param[in] batch_meta A pointer to a batch meta.
|
||
* @param[in] meta_list A pointer to meta list to be cleared.
|
||
* @param[in] meta_pool A pointer to the meta pool that contains
|
||
* @a meta_list.
|
||
* @return A pointer to the updated meta list.
|
||
*/
|
||
NvDsMetaList *nvds_clear_meta_list(NvDsBatchMeta *batch_meta,
|
||
NvDsMetaList *meta_list, NvDsMetaPool *meta_pool);
|
||
|
||
/**
|
||
* \brief Makes a deep copy of a frame meta to another frame meta.
|
||
*
|
||
* @param[in] src_frame_meta A pointer to the source frame meta.
|
||
* @param[in] dst_frame_meta A pointer to the destination frame meta.
|
||
*/
|
||
void nvds_copy_frame_meta(NvDsFrameMeta *src_frame_meta,
|
||
NvDsFrameMeta *dst_frame_meta);
|
||
|
||
/**
|
||
* \brief Makes a deep copy of an object meta to another object meta.
|
||
*
|
||
* @param[in] src_object_meta A pointer to the source object meta.
|
||
* @param[in] dst_object_meta A pointer to the destination object meta.
|
||
*/
|
||
void nvds_copy_obj_meta(NvDsObjectMeta *src_object_meta,
|
||
NvDsObjectMeta *dst_object_meta);
|
||
|
||
/**
|
||
* \brief Makes a deep copy of a classifier meta to another classifier meta.
|
||
*
|
||
* @param[in] src_classifier_meta A pointer to the source classifier meta.
|
||
* @param[in] dst_classifier_meta A pointer to the destination classifier meta.
|
||
*/
|
||
void nvds_copy_classifier_meta(NvDsClassifierMeta *src_classifier_meta,
|
||
NvDsClassifierMeta *dst_classifier_meta);
|
||
|
||
/**
|
||
* \brief Makes a deep copy of a label info meta to another label info meta.
|
||
*
|
||
* @param[in] src_label_info A pointer to the source label info meta.
|
||
* @param[in] dst_label_info A pointer to the destination label info meta.
|
||
*/
|
||
void nvds_copy_label_info_meta(NvDsLabelInfo *src_label_info,
|
||
NvDsLabelInfo *dst_label_info);
|
||
|
||
/**
|
||
* \brief Makes a deep copy of a display meta to another display meta.
|
||
*
|
||
* @param[in] src_display_meta A pointer to the source display meta.
|
||
* @param[in] dst_display_meta A pointer to destination display meta.
|
||
*/
|
||
void nvds_copy_display_meta(NvDsDisplayMeta *src_display_meta,
|
||
NvDsDisplayMeta *dst_display_meta);
|
||
|
||
/**
|
||
* \brief Makes a deep copy of a user meta list to the user meta list
|
||
* in a specified batch meta.
|
||
*
|
||
* @param[in] src_user_meta_list A pointer to the source user meta list.
|
||
* @param[in] dst_batch_meta A pointer to the destination batch meta.
|
||
*/
|
||
void nvds_copy_batch_user_meta_list(NvDsUserMetaList *src_user_meta_list,
|
||
NvDsBatchMeta *dst_batch_meta);
|
||
|
||
/**
|
||
* \brief Makes a deep copy of a source user meta list to the user meta list
|
||
* in a specified frame meta.
|
||
*
|
||
* @param[in] src_user_meta_list A pointer to the source user meta list.
|
||
* @param[in] dst_frame_meta A pointer to the destination frame meta.
|
||
*/
|
||
void nvds_copy_frame_user_meta_list(NvDsUserMetaList *src_user_meta_list,
|
||
NvDsFrameMeta *dst_frame_meta);
|
||
|
||
/**
|
||
* \brief Makes a deep copy of a source user meta list to the user meta list
|
||
* in a specified object meta.
|
||
*
|
||
* @param[in] src_user_meta_list A pointer to the source user meta list.
|
||
* @param[in] dst_object_meta A pointer to the destination object meta.
|
||
*/
|
||
void nvds_copy_obj_user_meta_list(NvDsUserMetaList *src_user_meta_list,
|
||
NvDsObjectMeta *dst_object_meta);
|
||
|
||
/**
|
||
* \brief Makes a deep copy of a source display meta list to the
|
||
* display meta list in a specified frame meta.
|
||
*
|
||
* @param[in] src_display_meta_list A pointer to the source display meta list.
|
||
* @param[in] dst_frame_meta A pointer to the destination frame meta.
|
||
*/
|
||
void nvds_copy_display_meta_list(NvDisplayMetaList *src_display_meta_list,
|
||
NvDsFrameMeta *dst_frame_meta);
|
||
|
||
/**
|
||
* \brief Makes a deep copy of a source frame meta list to the frame meta list
|
||
* in a specified batch meta.
|
||
*
|
||
* @param[in] src_frame_meta_list A pointer to the source frame meta list.
|
||
* @param[in] dst_batch_meta A pointer to the destination batch meta.
|
||
*/
|
||
void nvds_copy_frame_meta_list (NvDsFrameMetaList *src_frame_meta_list,
|
||
NvDsBatchMeta *dst_batch_meta);
|
||
|
||
/**
|
||
* \brief Makes a deep copy of a source object meta list to the
|
||
* object meta list in a specified frame meta.
|
||
*
|
||
* @param[in] src_obj_meta_list A pointer to the source object meta list.
|
||
* @param[in] dst_frame_meta A pointer to the destination frame meta.
|
||
*/
|
||
void nvds_copy_obj_meta_list(NvDsObjectMetaList *src_obj_meta_list,
|
||
NvDsFrameMeta *dst_frame_meta);
|
||
|
||
/**
|
||
* \brief Makes a deep copy of a source classifier meta list to the
|
||
* classifier meta list in a specified object meta.
|
||
*
|
||
* @param[in] src_classifier_meta_list A pointer to the source
|
||
* classifier meta list.
|
||
* @param[in] dst_object_meta A pointer to the destination
|
||
* object meta.
|
||
*/
|
||
void nvds_copy_classification_list(NvDsClassifierMetaList *src_classifier_meta_list,
|
||
NvDsObjectMeta *dst_object_meta);
|
||
|
||
/**
|
||
* \brief Makes a deep copy of a source label info meta list to the
|
||
* label info meta list in a specified classifier meta.
|
||
*
|
||
* @param[in] src_label_info_list A pointer to the source
|
||
* label info meta list.
|
||
* @param[in] dst_classifier_meta A pointer to the destination
|
||
* classifier meta.
|
||
*/
|
||
void nvds_copy_label_info_list(NvDsLabelInfoList *src_label_info_list,
|
||
NvDsClassifierMeta *dst_classifier_meta);
|
||
|
||
/**
|
||
* Generates a unique user metadata type from a specified string describing
|
||
* user-specific metadata.
|
||
*
|
||
* @param[in] meta_descriptor A pointer to a string describing user-specific
|
||
* metadata. The string must be in the format
|
||
* @a ORG_NAME.COMPONENT_NAME.METADATA_DESCRIPTION,
|
||
* e.g. @c NVIDIA.NVINFER.TENSOR_METADATA.
|
||
*/
|
||
NvDsMetaType nvds_get_user_meta_type(gchar *meta_descriptor);
|
||
|
||
#ifdef __cplusplus
|
||
}
|
||
#endif
|
||
#endif
|
||
|
||
/** @} */
|