text: /*
   * 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
   * <b>NVIDIA DeepStream: Metadata Extension Structures</b>
   *
   * @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 <glib.h>
  
  #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,
    NVDS_OBJECT_TYPE_VEHICLE_EXT,
    NVDS_OBJECT_TYPE_PERSON_EXT,
    NVDS_OBJECT_TYPE_FACE_EXT,
    /** 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 a vehicle object's parameters.
   */
  typedef struct NvDsVehicleObjectExt {
    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.*/
  
    GList *mask;      /**< Holds a list of polygons for vehicle mask. */
  } NvDsVehicleObjectExt;
  
  /**
   * Holds a person object's parameters.
   */
  typedef struct NvDsPersonObjectExt {
    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. */
  
    GList *mask;      /**< Holds a list of polygons for person mask. */
  } NvDsPersonObjectExt;
  
  /**
   * Holds a face object's parameters.
   */
  typedef struct NvDsFaceObjectWithExt {
    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. */
  
    GList *mask;      /**< Holds a list of polygons for face mask. */
  } NvDsFaceObjectExt;
  
  /**
   * 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;
  } 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_ */
  
  /** @} */
  