/*
* Copyright (c) 2018-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
* NVIDIA DeepStream: Metadata Extension Structures
*
* @b Description: This file defines the NVIDIA DeepStream metadata structures
* used to describe metadata objects.
*/
/**
* @defgroup metadata_extensions Metadata Extension Structures
*
* Defines metadata structures used to describe metadata objects.
*
* @ingroup NvDsMetaApi
* @{
*/
#ifndef NVDSMETA_H_
#define NVDSMETA_H_
#include
#ifdef __cplusplus
extern "C"
{
#endif
/**
* Defines event type flags.
*/
typedef enum NvDsEventType {
NVDS_EVENT_ENTRY,
NVDS_EVENT_EXIT,
NVDS_EVENT_MOVING,
NVDS_EVENT_STOPPED,
NVDS_EVENT_EMPTY,
NVDS_EVENT_PARKED,
NVDS_EVENT_RESET,
/** Reserved for future use. Custom events must be assigned values
greater than this. */
NVDS_EVENT_RESERVED = 0x100,
/** Specifies a custom event. */
NVDS_EVENT_CUSTOM = 0x101,
NVDS_EVENT_FORCE32 = 0x7FFFFFFF
} NvDsEventType;
/**
* Defines object type flags.
*/
typedef enum NvDsObjectType {
NVDS_OBJECT_TYPE_VEHICLE,
NVDS_OBJECT_TYPE_PERSON,
NVDS_OBJECT_TYPE_FACE,
NVDS_OBJECT_TYPE_BAG,
NVDS_OBJECT_TYPE_BICYCLE,
NVDS_OBJECT_TYPE_ROADSIGN,
/** Reserved for future use. Custom objects must be assigned values
greater than this. */
NVDS_OBJECT_TYPE_RESERVED = 0x100,
/** Specifies a custom object. */
NVDS_OBJECT_TYPE_CUSTOM = 0x101,
/** "object" key will be missing in the schema */
NVDS_OBJECT_TYPE_UNKNOWN = 0x102,
NVDS_OBEJCT_TYPE_FORCE32 = 0x7FFFFFFF
} NvDsObjectType;
/**
* Defines payload type flags.
*/
typedef enum NvDsPayloadType {
NVDS_PAYLOAD_DEEPSTREAM,
NVDS_PAYLOAD_DEEPSTREAM_MINIMAL,
/** Reserved for future use. Custom payloads must be assigned values
greater than this. */
NVDS_PAYLOAD_RESERVED = 0x100,
/** Specifies a custom payload. You must implement the nvds_msg2p_*
interface. */
NVDS_PAYLOAD_CUSTOM = 0x101,
NVDS_PAYLOAD_FORCE32 = 0x7FFFFFFF
} NvDsPayloadType;
/**
* Holds a rectangle's position and size.
*/
typedef struct NvDsRect {
float top; /**< Holds the position of rectangle's top in pixels. */
float left; /**< Holds the position of rectangle's left side in pixels. */
float width; /**< Holds the rectangle's width in pixels. */
float height; /**< Holds the rectangle's height in pixels. */
} NvDsRect;
/**
* Holds geolocation parameters.
*/
typedef struct NvDsGeoLocation {
gdouble lat; /**< Holds the location's latitude. */
gdouble lon; /**< Holds the location's longitude. */
gdouble alt; /**< Holds the location's altitude. */
} NvDsGeoLocation;
/**
* Hold a coordinate's position.
*/
typedef struct NvDsCoordinate {
gdouble x; /**< Holds the coordinate's X position. */
gdouble y; /**< Holds the coordinate's Y position. */
gdouble z; /**< Holds the coordinate's Z position. */
} NvDsCoordinate;
/**
* Holds an object's signature.
*/
typedef struct NvDsObjectSignature {
/** Holds a pointer to an array of signature values. */
gdouble *signature;
/** Holds the number of signature values in @a signature. */
guint size;
} NvDsObjectSignature;
/**
* Holds a vehicle object's parameters.
*/
typedef struct NvDsVehicleObject {
gchar *type; /**< Holds a pointer to the type of the vehicle. */
gchar *make; /**< Holds a pointer to the make of the vehicle. */
gchar *model; /**< Holds a pointer to the model of the vehicle. */
gchar *color; /**< Holds a pointer to the color of the vehicle. */
gchar *region; /**< Holds a pointer to the region of the vehicle. */
gchar *license; /**< Holds a pointer to the license number of the vehicle.*/
} NvDsVehicleObject;
/**
* Holds a person object's parameters.
*/
typedef struct NvDsPersonObject {
gchar *gender; /**< Holds a pointer to the person's gender. */
gchar *hair; /**< Holds a pointer to the person's hair color. */
gchar *cap; /**< Holds a pointer to the type of cap the person is
wearing, if any. */
gchar *apparel; /**< Holds a pointer to a description of the person's
apparel. */
guint age; /**< Holds the person's age. */
} NvDsPersonObject;
/**
* Holds a face object's parameters.
*/
typedef struct NvDsFaceObject {
gchar *gender; /**< Holds a pointer to the person's gender. */
gchar *hair; /**< Holds a pointer to the person's hair color. */
gchar *cap; /**< Holds a pointer to the type of cap the person
is wearing, if any. */
gchar *glasses; /**< Holds a pointer to the type of glasses the person
is wearing, if any. */
gchar *facialhair;/**< Holds a pointer to the person's facial hair color. */
gchar *name; /**< Holds a pointer to the person's name. */
gchar *eyecolor; /**< Holds a pointer to the person's eye color. */
guint age; /**< Holds the person's age. */
} NvDsFaceObject;
/**
* Holds event message meta data.
*
* You can attach various types of objects (vehicle, person, face, etc.)
* to an event by setting a pointer to the object in @a extMsg.
*
* Similarly, you can attach a custom object to an event by setting a pointer to the object in @a extMsg.
* A custom object must be handled by the metadata parsing module accordingly.
*/
typedef struct NvDsEventMsgMeta {
/** Holds the event's type. */
NvDsEventType type;
/** Holds the object's type. */
NvDsObjectType objType;
/** Holds the object's bounding box. */
NvDsRect bbox;
/** Holds the object's geolocation. */
NvDsGeoLocation location;
/** Holds the object's coordinates. */
NvDsCoordinate coordinate;
/** Holds the object's signature. */
NvDsObjectSignature objSignature;
/** Holds the object's class ID. */
gint objClassId;
/** Holds the ID of the sensor that generated the event. */
gint sensorId;
/** Holds the ID of the analytics module that generated the event. */
gint moduleId;
/** Holds the ID of the place related to the object. */
gint placeId;
/** Holds the ID of the component (plugin) that generated this event. */
gint componentId;
/** Holds the video frame ID of this event. */
gint frameId;
/** Holds the confidence level of the inference. */
gdouble confidence;
/** Holds the object's tracking ID. */
gint trackingId;
/** Holds a pointer to the generated event's timestamp. */
gchar *ts;
/** Holds a pointer to the detected or inferred object's ID. */
gchar *objectId;
/** Holds a pointer to a string containing the sensor's identity. */
gchar *sensorStr;
/** Holds a pointer to a string containing other attributes associated with
the object. */
gchar *otherAttrs;
/** Holds a pointer to the name of the video file. */
gchar *videoPath;
/** Holds a pointer to event message meta data. This can be used to hold
data that can't be accommodated in the existing fields, or an associated
object (representing a vehicle, person, face, etc.). */
gpointer extMsg;
/** Holds the size of the custom object at @a extMsg. */
guint extMsgSize;
/*My data*/
guint occupancy;
guint source_id;
guint lccum_cnt_entry;
guint lccum_cnt_exit;
} NvDsEventMsgMeta;
/**
* Holds event information.
*/
typedef struct _NvDsEvent {
/** Holds the type of event. */
NvDsEventType eventType;
/** Holds a pointer to event metadata. */
NvDsEventMsgMeta *metadata;
} NvDsEvent;
/**
* Holds payload metadata.
*/
typedef struct NvDsPayload {
/** Holds a pointer to the payload. */
gpointer payload;
/** Holds the size of the payload. */
guint payloadSize;
/** Holds the ID of the component (plugin) which attached the payload
(optional). */
guint componentId;
} NvDsPayload;
#ifdef __cplusplus
}
#endif
#endif /* NVDSMETA_H_ */
/** @} */