/****************************************************************************
* *
* OpenNI 1.x Alpha *
* Copyright (C) 2011 PrimeSense Ltd. *
* *
* This file is part of OpenNI. *
* *
* OpenNI is free software: you can redistribute it and/or modify *
* it under the terms of the GNU Lesser General Public License as published *
* by the Free Software Foundation, either version 3 of the License, or *
* (at your option) any later version. *
* *
* OpenNI is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Lesser General Public License for more details. *
* *
* You should have received a copy of the GNU Lesser General Public License *
* along with OpenNI. If not, see . *
* *
****************************************************************************/
#ifndef __XN_TYPES_H__
#define __XN_TYPES_H__
//---------------------------------------------------------------------------
// Includes
//---------------------------------------------------------------------------
#include
#include
//---------------------------------------------------------------------------
// Defines
//---------------------------------------------------------------------------
/** The maximum length of names of objects in OpenNI **/
#define XN_MAX_NAME_LENGTH 80
/** The maximum length of a creation info string **/
#define XN_MAX_CREATION_INFO_LENGTH 255
/** The maxumim length of a license key **/
#define XN_MAX_LICENSE_LENGTH 255
/** The maximum time to wait for node new data with the xnWaitXXXUpdateXXX functions **/
#define XN_NODE_WAIT_FOR_DATA_TIMEOUT 2000
/** OpenNI vendor ID, used by nodes supplied by OpenNI itself. **/
#define XN_VENDOR_OPEN_NI "OpenNI"
/** The name of the OpenNI recording format. **/
#define XN_FORMAT_NAME_ONI "oni"
/** The name of the OpenNI XML script format. **/
#define XN_SCRIPT_FORMAT_XML "xml"
/** represents playback speed which does not consider file timestamps. **/
#define XN_PLAYBACK_SPEED_FASTEST 0.0
/** represents a value for automatic control for nodes supporting it, as part of the @ref general_int. **/
#define XN_AUTO_CONTROL XN_MIN_INT32
//---------------------------------------------------------------------------
// Forward Declarations
//---------------------------------------------------------------------------
struct XnInternalNodeData;
//---------------------------------------------------------------------------
// Types
//---------------------------------------------------------------------------
#if XN_PLATFORM != XN_PLATFORM_ARC
#pragma pack (push, 1)
#endif
/**
* The context of an OpenNI library.
*/
typedef struct XnContext XnContext;
/**
* A handle to a production node in the OpenNI context. A value of NULL represents an invalid handle.
*/
typedef struct XnInternalNodeData* XnNodeHandle;
/**
* A handle to a lock. A value of NULL represents an invalid handle.
*/
typedef XnUInt32 XnLockHandle;
/**
* Type of the production node.
*/
typedef XnInt32 XnProductionNodeType;
/**
* Predefined types of production nodes.
*/
typedef enum XnPredefinedProductionNodeType
{
/** An invalid node type **/
XN_NODE_TYPE_INVALID = -1,
/** A device node **/
XN_NODE_TYPE_DEVICE = 1,
/** A depth generator **/
XN_NODE_TYPE_DEPTH = 2,
/** An image generator **/
XN_NODE_TYPE_IMAGE = 3,
/** An audio generator **/
XN_NODE_TYPE_AUDIO = 4,
/** An IR generator **/
XN_NODE_TYPE_IR = 5,
/** A user generator **/
XN_NODE_TYPE_USER = 6,
/** A recorder **/
XN_NODE_TYPE_RECORDER = 7,
/** A player **/
XN_NODE_TYPE_PLAYER = 8,
/** A gesture generator **/
XN_NODE_TYPE_GESTURE = 9,
/** A scene analyzer **/
XN_NODE_TYPE_SCENE = 10,
/** A hands generator **/
XN_NODE_TYPE_HANDS = 11,
/** A Codec **/
XN_NODE_TYPE_CODEC = 12,
/** Abstract types **/
XN_NODE_TYPE_PRODUCTION_NODE = 13,
XN_NODE_TYPE_GENERATOR = 14,
XN_NODE_TYPE_MAP_GENERATOR = 15,
XN_NODE_TYPE_SCRIPT = 16,
XN_NODE_TYPE_FIRST_EXTENSION,
} XnPredefinedProductionNodeType;
/**
* A Version.
*/
typedef struct XnVersion
{
XnUInt8 nMajor;
XnUInt8 nMinor;
XnUInt16 nMaintenance;
XnUInt32 nBuild;
} XnVersion;
/**
* An exported generator description.
*/
typedef struct XnProductionNodeDescription
{
/** Type of the production node. */
XnProductionNodeType Type;
/** Vendor name */
XnChar strVendor[XN_MAX_NAME_LENGTH];
/** Generator name. Should be unique under Type and Vendor. */
XnChar strName[XN_MAX_NAME_LENGTH];
/** Current version */
XnVersion Version;
} XnProductionNodeDescription;
/**
* Information about a single production node.
*/
typedef struct XnNodeInfo XnNodeInfo;
/**
* A single node in a node info list.
*/
typedef struct XnNodeInfoListNode XnNodeInfoListNode;
/**
* A (linked) list of production node info objects.
*/
typedef struct XnNodeInfoList XnNodeInfoList;
/**
* An iterator in a linked list of production node info objects.
*/
typedef struct XnNodeInfoListIterator
{
XnNodeInfoListNode* pCurrent;
} XnNodeInfoListIterator;
typedef struct XnNodeQuery XnNodeQuery;
/**
* A license key.
*/
typedef struct XnLicense
{
/** Vendor name **/
XnChar strVendor[XN_MAX_NAME_LENGTH];
/** License key **/
XnChar strKey[XN_MAX_LICENSE_LENGTH];
} XnLicense;
/**
* @ingroup enum_errors
* An object that holds errors during an enumeration process.
*/
typedef struct XnEnumerationErrors XnEnumerationErrors;
/**
* A handle to an instance of a generator.
**/
typedef void* XnModuleNodeHandle;
/**
* Prototype for state change callback function.
*
* @param hNode [in] A handle to the node that raised the event.
* @param pCookie [in] A user-provided cookie that was given when registering to the event.
**/
typedef void (XN_CALLBACK_TYPE* XnStateChangedHandler)(XnNodeHandle hNode, void* pCookie);
/**
* Prototype for error state change callback function.
*
* @param errorState [in] The new error state. A value of XN_STATUS_OK means there is no longer an error.
* @param pCookie [in] A user-provided cookie that was given when registering to the event.
**/
typedef void (XN_CALLBACK_TYPE* XnErrorStateChangedHandler)(XnStatus errorState, void* pCookie);
/**
* Prototype for freeing data callbacks.
*
* @param pData [in] The data to be freed.
**/
typedef void (XN_CALLBACK_TYPE* XnFreeHandler)(const void* pData);
typedef void (XN_CALLBACK_TYPE* XnContextShuttingDownHandler)(XnContext* pContext, void* pCookie);
/**
* Prototype for the 'Node Creation' event handler.
*
* @param [in] pContext The context raising the event.
* @param [in] hCreatedNode A handle to the newly created node.
* @param [in] pCookie A user-provided cookie that was given when registering to the event.
*
* @remark The passed handle (@c hCreatedNode) is not referenced. If your handler keeps this handle for later use,
* it must call @ref xnProductionNodeAddRef().
*/
typedef void (XN_CALLBACK_TYPE* XnNodeCreationHandler)(XnContext* pContext, XnNodeHandle hCreatedNode, void* pCookie);
/**
* Prototype for the 'Node Destruction' event handler.
*
* @param [in] pContext The context raising the event.
* @param [in] strDestroyedNodeName The name of the destroyed node.
* @param [in] pCookie A user-provided cookie that was given when registering to the event.
*/
typedef void (XN_CALLBACK_TYPE* XnNodeDestructionHandler)(XnContext* pContext, const XnChar* strDestroyedNodeName, void* pCookie);
/** Handle to a registered callback function. **/
typedef void* XnCallbackHandle;
typedef struct XnModuleExportedProductionNodeInterface XnModuleExportedProductionNodeInterface; // Forward Declaration
//---------------------------------------------------------------------------
// 3D Vision Types
//---------------------------------------------------------------------------
/** Defines the depth values type (16-bit values). **/
typedef XnUInt16 XnDepthPixel;
/** Defines the value of a no-sample depth pixel. */
#define XN_DEPTH_NO_SAMPLE_VALUE ((XnDepthPixel)0)
/** Defines the image RGB24 pixel type. **/
typedef struct XnRGB24Pixel
{
XnUInt8 nRed;
XnUInt8 nGreen;
XnUInt8 nBlue;
} XnRGB24Pixel;
/** Defines the image YUV422 double-pixel type. **/
typedef struct XnYUV422DoublePixel
{
XnUInt8 nU;
XnUInt8 nY1;
XnUInt8 nV;
XnUInt8 nY2;
} XnYUV422DoublePixel;
/** Defines the image Grayscale8 pixel type. **/
typedef XnUInt8 XnGrayscale8Pixel;
/** Defines the image Grayscale16 pixel type. **/
typedef XnUInt16 XnGrayscale16Pixel;
/** Defines the IR values type (16-bit grayscale). **/
typedef XnGrayscale16Pixel XnIRPixel;
/** Defines the label type */
typedef XnUInt16 XnLabel;
//---------------------------------------------------------------------------
// Generators Capabilities
//---------------------------------------------------------------------------
#define XN_CAPABILITY_EXTENDED_SERIALIZATION "ExtendedSerialization"
#define XN_CAPABILITY_MIRROR "Mirror"
#define XN_CAPABILITY_ALTERNATIVE_VIEW_POINT "AlternativeViewPoint"
#define XN_CAPABILITY_CROPPING "Cropping"
#define XN_CAPABILITY_USER_POSITION "UserPosition"
#define XN_CAPABILITY_SKELETON "User::Skeleton"
#define XN_CAPABILITY_POSE_DETECTION "User::PoseDetection"
#define XN_CAPABILITY_LOCK_AWARE "LockAware"
#define XN_CAPABILITY_ERROR_STATE "ErrorState"
#define XN_CAPABILITY_FRAME_SYNC "FrameSync"
#define XN_CAPABILITY_DEVICE_IDENTIFICATION "DeviceIdentification"
#define XN_CAPABILITY_BRIGHTNESS "Brightness"
#define XN_CAPABILITY_CONTRAST "Contrast"
#define XN_CAPABILITY_HUE "Hue"
#define XN_CAPABILITY_SATURATION "Saturation"
#define XN_CAPABILITY_SHARPNESS "Sharpness"
#define XN_CAPABILITY_GAMMA "Gamma"
#define XN_CAPABILITY_COLOR_TEMPERATURE "ColorTemperature"
#define XN_CAPABILITY_BACKLIGHT_COMPENSATION "BacklightCompensation"
#define XN_CAPABILITY_GAIN "Gain"
#define XN_CAPABILITY_PAN "Pan"
#define XN_CAPABILITY_TILT "Tilt"
#define XN_CAPABILITY_ROLL "Roll"
#define XN_CAPABILITY_ZOOM "Zoom"
#define XN_CAPABILITY_EXPOSURE "Exposure"
#define XN_CAPABILITY_IRIS "Iris"
#define XN_CAPABILITY_FOCUS "Focus"
#define XN_CAPABILITY_LOW_LIGHT_COMPENSATION "LowLightCompensation"
#define XN_CAPABILITY_ANTI_FLICKER "AntiFlicker"
#define XN_CAPABILITY_HAND_TOUCHING_FOV_EDGE "Hands::HandTouchingFOVEdge"
// Backwards compatibility - typo was fixed
#define XN_CAPABILITY_ANTI_FILCKER XN_CAPABILITY_ANTI_FLICKER
// deprecated pragma is only supported in Visual Studio
#if (XN_PLATFORM == XN_PLATFORM_WIN32)
#pragma deprecated("XN_CAPABILITY_ANTI_FILCKER")
#endif
//---------------------------------------------------------------------------
// Generators API Structs
//---------------------------------------------------------------------------
#define XN_QQVGA_X_RES 160
#define XN_QQVGA_Y_RES 120
#define XN_CGA_X_RES 320
#define XN_CGA_Y_RES 200
#define XN_QVGA_X_RES 320
#define XN_QVGA_Y_RES 240
#define XN_VGA_X_RES 640
#define XN_VGA_Y_RES 480
#define XN_SVGA_X_RES 800
#define XN_SVGA_Y_RES 600
#define XN_XGA_X_RES 1024
#define XN_XGA_Y_RES 768
#define XN_720P_X_RES 1280
#define XN_720P_Y_RES 720
#define XN_SXGA_X_RES 1280
#define XN_SXGA_Y_RES 1024
#define XN_UXGA_X_RES 1600
#define XN_UXGA_Y_RES 1200
#define XN_1080P_X_RES 1920
#define XN_1080P_Y_RES 1080
#define XN_QCIF_X_RES 176
#define XN_QCIF_Y_RES 144
#define XN_240P_X_RES 423
#define XN_240P_Y_RES 240
#define XN_CIF_X_RES 352
#define XN_CIF_Y_RES 288
#define XN_WVGA_X_RES 640
#define XN_WVGA_Y_RES 360
#define XN_480P_X_RES 864
#define XN_480P_Y_RES 480
#define XN_576P_X_RES 1024
#define XN_576P_Y_RES 576
#define XN_DV_X_RES 960
#define XN_DV_Y_RES 720
typedef enum XnResolution
{
XN_RES_CUSTOM = 0,
XN_RES_QQVGA = 1,
XN_RES_CGA = 2,
XN_RES_QVGA = 3,
XN_RES_VGA = 4,
XN_RES_SVGA = 5,
XN_RES_XGA = 6,
XN_RES_720P = 7,
XN_RES_SXGA = 8,
XN_RES_UXGA = 9,
XN_RES_1080P = 10,
XN_RES_QCIF = 11,
XN_RES_240P = 12,
XN_RES_CIF = 13,
XN_RES_WVGA = 14,
XN_RES_480P = 15,
XN_RES_576P = 16,
XN_RES_DV = 17,
} XnResolution;
/**
* The output mode of a map generator.
*/
typedef struct XnMapOutputMode
{
/** Number of elements in the X-axis. */
XnUInt32 nXRes;
/** Number of elements in the Y-axis. */
XnUInt32 nYRes;
/** Number of frames per second. */
XnUInt32 nFPS;
} XnMapOutputMode;
typedef enum XnSampleRate
{
XN_SAMPLE_RATE_8K = 8000,
XN_SAMPLE_RATE_11K = 11025,
XN_SAMPLE_RATE_12K = 12000,
XN_SAMPLE_RATE_16K = 16000,
XN_SAMPLE_RATE_22K = 22050,
XN_SAMPLE_RATE_24K = 24000,
XN_SAMPLE_RATE_32K = 32000,
XN_SAMPLE_RATE_44K = 44100,
XN_SAMPLE_RATE_48K = 48000,
} XnSampleRate;
typedef struct XnWaveOutputMode
{
XnUInt32 nSampleRate;
XnUInt16 nBitsPerSample;
XnUInt8 nChannels;
} XnWaveOutputMode;
/**
* Representation of a vector in 3D space
*/
typedef struct XnVector3D
{
XnFloat X;
XnFloat Y;
XnFloat Z;
} XnVector3D;
typedef XnVector3D XnPoint3D;
/**
* Representation of an axis-aligned box in 3D space
*/
typedef struct XnBoundingBox3D
{
XnPoint3D LeftBottomNear;
XnPoint3D RightTopFar;
} XnBoundingBox3D;
/**
* Cropping configuration
*/
typedef struct XnCropping
{
/** TRUE if cropping is turned on, FALSE otherwise. */
XnBool bEnabled;
/** Offset in the X-axis, in pixels. */
XnUInt16 nXOffset;
/** Offset in the Y-axis, in pixels. */
XnUInt16 nYOffset;
/** Number of pixels in the X-axis. */
XnUInt16 nXSize;
/** Number of pixels in the Y-axis. */
XnUInt16 nYSize;
} XnCropping;
/**
* Field-Of-View
*/
typedef struct XnFieldOfView
{
/** Horizontal Field Of View, in radians. */
XnDouble fHFOV;
/** Vertical Field Of View, in radians. */
XnDouble fVFOV;
} XnFieldOfView;
typedef enum XnPixelFormat
{
XN_PIXEL_FORMAT_RGB24 = 1,
XN_PIXEL_FORMAT_YUV422 = 2,
XN_PIXEL_FORMAT_GRAYSCALE_8_BIT = 3,
XN_PIXEL_FORMAT_GRAYSCALE_16_BIT = 4,
XN_PIXEL_FORMAT_MJPEG = 5,
} XnPixelFormat;
typedef struct XnSupportedPixelFormats
{
XnBool m_bRGB24 : 1;
XnBool m_bYUV422 : 1;
XnBool m_bGrayscale8Bit : 1;
XnBool m_bGrayscale16Bit : 1;
XnBool m_bMJPEG : 1;
XnUInt m_nPadding : 3;
XnUInt m_nReserved : 24;
} XnSupportedPixelFormats;
typedef enum XnPlayerSeekOrigin
{
XN_PLAYER_SEEK_SET = 0,
XN_PLAYER_SEEK_CUR = 1,
XN_PLAYER_SEEK_END = 2,
} XnPlayerSeekOrigin;
typedef enum XnPowerLineFrequency
{
XN_POWER_LINE_FREQUENCY_OFF = 0,
XN_POWER_LINE_FREQUENCY_50_HZ = 50,
XN_POWER_LINE_FREQUENCY_60_HZ = 60,
} XnPowerLineFrequency;
// User
typedef XnUInt32 XnUserID;
typedef XnFloat XnConfidence;
/** A 3x3 matrix of floating point values **/
typedef struct XnMatrix3X3
{
/** The elements of the matrix. **/
XnFloat elements[9];
} XnMatrix3X3;
/**
* A representation of a 3D plane.
* A plane is described by a point on it and a normal
*/
typedef struct XnPlane3D
{
/** The normal of the plane. **/
XnVector3D vNormal;
/** A point on the plane. **/
XnPoint3D ptPoint;
} XnPlane3D;
/**
* Position of a specific joint. A joint position is described by its actual position
* and the confidence we have in that position.
*/
typedef struct XnSkeletonJointPosition
{
/** The actual position in real world coordinations */
XnVector3D position;
/** The confidence in the position */
XnConfidence fConfidence;
} XnSkeletonJointPosition;
/**
* Orientation of a specific joint. A joint orientation is described by its actual rotation
* and the confidence we have in that rotation
* The first column is the X orientation, where the value increases from left to right.
* The second column is the Y orientation, where the value increases from bottom to top.
* The third column is the Z orientation, where the value increases from near to far.
*/
typedef struct XnSkeletonJointOrientation
{
/** The actual orientation */
XnMatrix3X3 orientation;
/** The confidence in the orientation */
XnConfidence fConfidence;
} XnSkeletonJointOrientation;
/**
* Transformation of a specific joint is its full description: both its position and orientation.
*/
typedef struct XnSkeletonJointTransformation
{
/** The position of the joint */
XnSkeletonJointPosition position;
/** The orientation of the joint */
XnSkeletonJointOrientation orientation;
} XnSkeletonJointTransformation;
/**
* A full list of available joints.
*/
typedef enum XnSkeletonJoint
{
XN_SKEL_HEAD = 1,
XN_SKEL_NECK = 2,
XN_SKEL_TORSO = 3,
XN_SKEL_WAIST = 4,
XN_SKEL_LEFT_COLLAR = 5,
XN_SKEL_LEFT_SHOULDER = 6,
XN_SKEL_LEFT_ELBOW = 7,
XN_SKEL_LEFT_WRIST = 8,
XN_SKEL_LEFT_HAND = 9,
XN_SKEL_LEFT_FINGERTIP =10,
XN_SKEL_RIGHT_COLLAR =11,
XN_SKEL_RIGHT_SHOULDER =12,
XN_SKEL_RIGHT_ELBOW =13,
XN_SKEL_RIGHT_WRIST =14,
XN_SKEL_RIGHT_HAND =15,
XN_SKEL_RIGHT_FINGERTIP =16,
XN_SKEL_LEFT_HIP =17,
XN_SKEL_LEFT_KNEE =18,
XN_SKEL_LEFT_ANKLE =19,
XN_SKEL_LEFT_FOOT =20,
XN_SKEL_RIGHT_HIP =21,
XN_SKEL_RIGHT_KNEE =22,
XN_SKEL_RIGHT_ANKLE =23,
XN_SKEL_RIGHT_FOOT =24
} XnSkeletonJoint;
/** A configuration of joints to be used by skeleton (see @ref xnSetSkeletonProfile) **/
typedef enum XnSkeletonProfile
{
/** No joints at all **/
XN_SKEL_PROFILE_NONE = 1,
/** All joints **/
XN_SKEL_PROFILE_ALL = 2,
/** All the joints in the upper body (torso and upwards) **/
XN_SKEL_PROFILE_UPPER = 3,
/** All the joints in the lower body (torso and downwards) **/
XN_SKEL_PROFILE_LOWER = 4,
/** The head and the hands **/
XN_SKEL_PROFILE_HEAD_HANDS = 5,
} XnSkeletonProfile;
/** Possible statuses for pose detection */
typedef enum XnPoseDetectionStatus
{
XN_POSE_DETECTION_STATUS_OK = 0,
XN_POSE_DETECTION_STATUS_NO_USER = 1,
XN_POSE_DETECTION_STATUS_TOP_FOV = 2,
XN_POSE_DETECTION_STATUS_SIDE_FOV = 3,
XN_POSE_DETECTION_STATUS_ERROR = 4,
XN_POSE_DETECTION_STATUS_NO_TRACKING = 5
} XnPoseDetectionStatus;
/** Possible pose detection states */
typedef enum XnPoseDetectionState
{
XN_POSE_DETECTION_STATE_IN_POSE =0,
XN_POSE_DETECTION_STATE_OUT_OF_POSE =1,
XN_POSE_DETECTION_STATE_UNDEFINED =2
} XnPoseDetectionState;
/** Possible statuses for calibration */
typedef enum XnCalibrationStatus
{
XN_CALIBRATION_STATUS_OK = 0,
XN_CALIBRATION_STATUS_NO_USER = 1,
XN_CALIBRATION_STATUS_ARM = 2,
XN_CALIBRATION_STATUS_LEG = 3,
XN_CALIBRATION_STATUS_HEAD = 4,
XN_CALIBRATION_STATUS_TORSO = 5,
XN_CALIBRATION_STATUS_TOP_FOV = 6,
XN_CALIBRATION_STATUS_SIDE_FOV = 7,
XN_CALIBRATION_STATUS_POSE = 8,
XN_CALIBRATION_STATUS_MANUAL_ABORT = 9,
XN_CALIBRATION_STATUS_MANUAL_RESET = 10,
XN_CALIBRATION_STATUS_TIMEOUT_FAIL = 11
} XnCalibrationStatus;
typedef enum XnDirection
{
XN_DIRECTION_ILLEGAL = 0,
XN_DIRECTION_LEFT = 1,
XN_DIRECTION_RIGHT = 2,
XN_DIRECTION_UP = 3,
XN_DIRECTION_DOWN = 4,
XN_DIRECTION_FORWARD = 5,
XN_DIRECTION_BACKWARD = 6,
} XnDirection;
// User
/**
* Callback for a general user-related event. It is used for either creation or destruction of users.
*
* @param hNode [in] A handle to the user generator that raised this event.
* @param user [in] The id of the user that is relevant to this event.
* @param pCookie [in] A user-provided cookie that was given when registering to this event.
*/
typedef void (XN_CALLBACK_TYPE* XnUserHandler)(XnNodeHandle hNode, XnUserID user, void* pCookie);
// Hands
/**
* Callback for the creation of a new hand.
*
* @param hNode [in] A handle to the hands generator that raised this event.
* @param user [in] The id of the new hand.
* @param pPosition [in] The position in which the hand was created.
* @param fTime [in] Timestamp, in seconds.
* @param pCookie [in] A user-provided cookie that was given when registering to this event.
*/
typedef void (XN_CALLBACK_TYPE* XnHandCreate)(XnNodeHandle hNode, XnUserID user, const XnPoint3D* pPosition, XnFloat fTime, void* pCookie);
/**
* Callback for a new position of an already-existing hand.
*
* @param hNode [in] A handle to the hands generator that raised this event.
* @param user [in] The id of the hand that moved.
* @param pPosition [in] The new position of the relevant hand.
* @param fTime [in] Timestamp, in seconds.
* @param pCookie [in] A user-provided cookie that was given when registering to this event.
*/
typedef void (XN_CALLBACK_TYPE* XnHandUpdate)(XnNodeHandle hNode, XnUserID user, const XnPoint3D* pPosition, XnFloat fTime, void* pCookie);
/**
* Callback for the disappearance of a hand.
*
* @param hNode [in] A handle to the hands generator that raised this event.
* @param user [in] The id of the hand that disappeared.
* @param fTime [in] Timestamp, in seconds.
* @param pCookie [in] A user-provided cookie that was given when registering to this event.
*/
typedef void (XN_CALLBACK_TYPE* XnHandDestroy)(XnNodeHandle hNode, XnUserID user, XnFloat fTime, void* pCookie);
/**
* Callback for when a hand reaches the edge of the FOV
*
* @param hNode [in] A handle to the hand generator that raised this event.
* @param user [in] The id of the hand that reached FOV
* @param pPosition [in] The current position of the hand
* @param fTime [in] Timestamp, in seconds
* @param eDir [in] The direction of the edge that is being reached
* @param pCookie [in] A user-provided cookie that was given when reigstering to this event
*/
typedef void (XN_CALLBACK_TYPE* XnHandTouchingFOVEdge)(XnNodeHandle hNode, XnUserID user, const XnPoint3D* pPosition, XnFloat fTime, XnDirection eDir, void* pCookie);
// Gesture Module
/**
* Callback for the recognition of a gesture
*
* @param hNode [in] A handle to the gesture generator that raised this event.
* @param strGesture [in] The gesture that was recognized.
* @param pIDPosition [in] The position in which the gesture was identified.
* @param pEndPosition [in] The position of the hand that performed the gesture at the end of the gesture.
* @param pCookie [in] A user-provided cookie that was given when registering to this event.
*/
typedef void (XN_CALLBACK_TYPE* XnGestureRecognized)(XnNodeHandle hNode, const XnChar* strGesture, const XnPoint3D* pIDPosition, const XnPoint3D* pEndPosition, void* pCookie);
/**
* Callback for indication that a certain gesture is in progress
*
* @param hNode [in] A handle to the gesture generator that raised this event.
* @param strGesture [in] The gesture that is on its way to being recognized.
* @param pPosition [in] The current position of the hand that is performing the gesture.
* @param fProgress [in] The percentage of the gesture that was already performed.
* @param pCookie [in] A user-provided cookie that was given when registering to this event.
*/
typedef void (XN_CALLBACK_TYPE* XnGestureProgress)(XnNodeHandle hNode, const XnChar* strGesture, const XnPoint3D* pPosition, XnFloat fProgress, void* pCookie);
typedef void (XN_CALLBACK_TYPE* XnGestureIntermediateStageCompleted)(XnNodeHandle hNode, const XnChar* strGesture, const XnPoint3D* pPosition, void* pCookie);
typedef void (XN_CALLBACK_TYPE* XnGestureReadyForNextIntermediateStage)(XnNodeHandle hNode, const XnChar* strGesture, const XnPoint3D* pPosition, void* pCookie);
// Skeleton
/**
* Callback for indication that a specific user's skeleton is now starting the calibration process
*
* @param hNode [in] A handle to the skeleton capability that raised this event.
* @param user [in] The id of the user that's being calibrated.
* @param pCookie [in] A user-provided cookie that was given when registering to this event.
*/
typedef void (XN_CALLBACK_TYPE* XnCalibrationStart)(XnNodeHandle hNode, XnUserID user, void* pCookie);
/**
* Callback for indication that a specific user's skeleton has now completed the calibration process
*
* @param hNode [in] A handle to the skeleton capability that raised this event.
* @param user [in] The id of the user for which calibration was attempted.
* @param bSuccess [in] An indication of whether or not the calibration attempt succeeded.
* @param pCookie [in] A user-provided cookie that was given when registering to this event.
*/
typedef void (XN_CALLBACK_TYPE* XnCalibrationEnd)(XnNodeHandle hNode, XnUserID user, XnBool bSuccess, void* pCookie);
typedef void (XN_CALLBACK_TYPE* XnCalibrationInProgress)(XnNodeHandle hNode, XnUserID user, XnCalibrationStatus calibrationError, void* pCookie);
typedef void (XN_CALLBACK_TYPE* XnCalibrationComplete)(XnNodeHandle hNode, XnUserID user, XnCalibrationStatus calibrationError, void* pCookie);
// Pose Detection
/**
* Callback for indication that a specific user has entered a pose, or left it.
*
* @param hNode [in] A handle to the pose capability that raised this event.
* @param strPose [in] The pose that is relevant to the callback.
* @param user [in] The id of the user that entered the pose or left it.
* @param pCookie [in] A user-provided cookie that was given when registering to this event.
*/
typedef void (XN_CALLBACK_TYPE* XnPoseDetectionCallback)(XnNodeHandle hNode, const XnChar* strPose, XnUserID user, void* pCookie);
typedef void (XN_CALLBACK_TYPE* XnPoseDetectionInProgress)(XnNodeHandle hNode, const XnChar* strPose, XnUserID user, XnPoseDetectionStatus poseDetectionError, void* pCookie);
//---------------------------------------------------------------------------
// Recorder Types
//---------------------------------------------------------------------------
/**
* @ingroup recorder
*/
/** Defines the type of medium used for recording. See @ref xnAddNodeToRecording. */
typedef enum XnRecordMedium
{
/** Recording medium is a file **/
XN_RECORD_MEDIUM_FILE = 0,
} XnRecordMedium;
/** An ID of a codec. See @ref xnCreateCodec. **/
typedef XnUInt32 XnCodecID;
/** Define a Codec ID by 4 characters, e.g. XN_CODEC_ID('J','P','E','G') **/
#define XN_CODEC_ID(c1, c2, c3, c4) (XnCodecID)((c4 << 24) | (c3 << 16) | (c2 << 8) | c1)
/**
* An interface used for communication between OpenNI and a recorder module. This interface is used by a recorder
* module to send recorded data to OpenNI, which then knows how to store them according to one of the values of
* @ref XnRecordMedium.
**/
typedef struct XnRecorderOutputStreamInterface
{
/**
* Opens the stream for writing.
*
* @param pCookie [in] A token that was received with this interface.
*/
XnStatus (XN_CALLBACK_TYPE* Open)(void* pCookie);
/**
* Writes data to the stream
*
* @param pCookie [in] A token that was received with this interface.
* @param strNodeName [in] Optional. Specifies the node that initiated the write action.
* @param pData [in] A pointer to the data to write.
* @param nSize [in] Number of bytes to be written.
*/
XnStatus (XN_CALLBACK_TYPE* Write)(void* pCookie, const XnChar* strNodeName,
const void* pData, XnUInt32 nSize);
/**
* Sets the stream's pointer to the specified position.
*
* @param pCookie [in] A cookie that was received with this interface.
* @param seekType [in] Specifies how to seek - according to current position, end or beginning.
* @param nOffset [in] Specifies how many bytes to move
*/
XnStatus (XN_CALLBACK_TYPE* Seek)(void* pCookie, XnOSSeekType seekType, const XnInt32 nOffset);
/**
* Tells the current position in the stream.
*
* @param pCookie [in] A cookie that was received with this interface.
* @param pPos [out] The position of the stream.
*
* @returns (XnUInt32)-1 on error.
*/
XnUInt32 (XN_CALLBACK_TYPE* Tell)(void* pCookie);
/**
* Closes the stream.
*
* @param pCookie [in] A token that was received with this interface.
*/
void (XN_CALLBACK_TYPE* Close)(void* pCookie);
/**
* Sets the stream's pointer to the specified position. (64bit version, for large files)
*
* @param pCookie [in] A cookie that was received with this interface.
* @param seekType [in] Specifies how to seek - according to current position, end or beginning.
* @param nOffset [in] Specifies how many bytes to move
*/
XnStatus (XN_CALLBACK_TYPE* Seek64)(void* pCookie, XnOSSeekType seekType, const XnInt64 nOffset);
/**
* Tells the current position in the stream. (64bit version, for large files)
*
* @param pCookie [in] A cookie that was received with this interface.
* @param pPos [out] The position of the stream.
*
* @returns (XnUInt64)-1 on error.
*/
XnUInt64 (XN_CALLBACK_TYPE* Tell64)(void* pCookie);
} XnRecorderOutputStreamInterface;
/**
* An interface used for communication between OpenNI and a player module. This interface is used by a player
* module to receive recorded data from OpenNI, which knows where to get them according to one of the values of
* @ref XnRecordMedium.
**/
typedef struct XnPlayerInputStreamInterface
{
/**
* Opens the stream for reading.
*
* @param pCookie [in] A cookie that was received with this interface.
*/
XnStatus (XN_CALLBACK_TYPE* Open)(void* pCookie);
/**
* Reads data from the stream. May read less data than asked, if the stream is near its end. This is not
* considered an error.
*
* @param pCookie [in] A cookie that was received with this interface.
* @param pBuffer [out] A pointer to the buffer to read into.
* @param nSize [in] Number of bytes to read.
* @param pnBytesRead [out] Optional. Number of bytes actually read.
*/
XnStatus (XN_CALLBACK_TYPE* Read)(void* pCookie, void* pBuffer, XnUInt32 nSize, XnUInt32* pnBytesRead);
/**
* Sets the stream's pointer to the specified position.
*
* @param pCookie [in] A cookie that was received with this interface.
* @param seekType [in] Specifies how to seek - according to current position, end or beginning.
* @param nOffset [in] Specifies how many bytes to move
*/
XnStatus (XN_CALLBACK_TYPE* Seek)(void* pCookie, XnOSSeekType seekType, const XnInt32 nOffset);
/**
* Tells the current stream position
*
* @param pCookie [in] A cookie that was received with this interface.
*
* @returns (XnUInt32)-1 if there was an error in the stream.
*/
XnUInt32 (XN_CALLBACK_TYPE* Tell)(void* pCookie);
/**
* Closes the stream.
*
* @param pCookie [in] A cookie that was received with this interface.
*/
void (XN_CALLBACK_TYPE* Close)(void* pCookie);
/**
* Sets the stream's pointer to the specified position. (64bit version, for large files)
*
* @param pCookie [in] A cookie that was received with this interface.
* @param seekType [in] Specifies how to seek - according to current position, end or beginning.
* @param nOffset [in] Specifies how many bytes to move
*/
XnStatus (XN_CALLBACK_TYPE* Seek64)(void* pCookie, XnOSSeekType seekType, const XnInt64 nOffset);
/**
* Tells the current position in the stream. (64bit version, for large files)
*
* @param pCookie [in] A cookie that was received with this interface.
* @param pPos [out] The position of the stream.
*
* @returns (XnUInt64)-1 on error.
*/
XnUInt64 (XN_CALLBACK_TYPE* Tell64)(void* pCookie);
} XnPlayerInputStreamInterface;
/**
* An interface that is used for notifications about node events.
**/
typedef struct XnNodeNotifications
{
/**
* Notifies the object that a production node was added
*
* @param pCookie [in] A cookie that was received with this interface.
* @param strNodeName [in] The instance name of the added node.
*/
XnStatus (XN_CALLBACK_TYPE* OnNodeAdded)
(void* pCookie, const XnChar* strNodeName, XnProductionNodeType type,
XnCodecID compression);
/**
* Notifies the object that a production node has been removed
*
* @param pCookie [in] A cookie that was received with this interface.
* @param strNodeName [in] The instance name of the removed node.
*/
XnStatus (XN_CALLBACK_TYPE* OnNodeRemoved)
(void* pCookie, const XnChar* strNodeName);
/**
* Notifies the object that an integer type property has changed.
*
* @param pCookie [in] A cookie that was received with this interface.
* @param strNodeName [in] The name of the node whose property changed.
* @param strPropName [in] The name of the property that changed.
* @param nValue [in] The new value of the property.
*/
XnStatus (XN_CALLBACK_TYPE* OnNodeIntPropChanged)
(void* pCookie, const XnChar* strNodeName,
const XnChar* strPropName, XnUInt64 nValue);
/**
* Notifies the object that a real type property has changed.
*
* @param pCookie [in] A cookie that was received with this interface.
* @param strNodeName [in] The name of the node whose property changed.
* @param strPropName [in] The name of the property that changed.
* @param dValue [in] The new value of the property.
*/
XnStatus (XN_CALLBACK_TYPE* OnNodeRealPropChanged)
(void* pCookie, const XnChar* strNodeName,
const XnChar* strPropName, XnDouble dValue);
/**
* Notifies the object that a string type property has changed.
*
* @param pCookie [in] A cookie that was received with this interface.
* @param strNodeName [in] The name of the node whose property changed.
* @param strPropName [in] The name of the property that changed.
* @param strValue [in] The new value of the property.
*/
XnStatus (XN_CALLBACK_TYPE* OnNodeStringPropChanged)
(void* pCookie, const XnChar* strNodeName,
const XnChar* strPropName, const XnChar* strValue);
/**
* Notifies the object that a general type property has changed.
*
* @param pCookie [in] A cookie that was received with this interface.
* @param strNodeName [in] The name of the node whose property changed.
* @param strPropName [in] The name of the property that changed.
* @param nBufferSize [in] The size of the buffer that holds the new value.
* @param pBuffer [in] The buffer that holds the new value of the property.
*/
XnStatus (XN_CALLBACK_TYPE* OnNodeGeneralPropChanged)
(void* pCookie, const XnChar* strNodeName,
const XnChar* strPropName, XnUInt32 nBufferSize, const void* pBuffer);
/**
* Notifies the object that a node has finished sending all the initial 'property changed' notifications.
*
* @param pCookie [in] A cookie that was received with this interface.
* @param strNodeName [in] The name of the node whose state is ready.
*/
XnStatus (XN_CALLBACK_TYPE* OnNodeStateReady)
(void* pCookie, const XnChar* strNodeName);
/**
* Notifies the object that it has received new data.
*
* @param pCookie [in] A cookie that was received with this interface.
* @param strNodeName [in] The name of the node whose property changed.
* @param strName [in] The name of the property that changed.
* @param nBufferSize [in] The size of the buffer that holds the new value.
* @param pBuffer [in] The buffer that holds the new value of the property.
*/
XnStatus (XN_CALLBACK_TYPE* OnNodeNewData)
(void* pCookie, const XnChar* strNodeName,
XnUInt64 nTimeStamp, XnUInt32 nFrame, const void* pData, XnUInt32 nSize);
} XnNodeNotifications;
/** A pair of 32-bit unsigned values. **/
typedef struct XnUInt32XYPair
{
XnUInt32 X;
XnUInt32 Y;
} XnUInt32XYPair;
/** Holds information about a general frame of data. **/
typedef struct XnOutputMetaData
{
/** Represents the time in which the data was received. **/
XnUInt64 nTimestamp;
/** The frame ID, or frame number, of this frame. **/
XnUInt32 nFrameID;
/** The size of the data. **/
XnUInt32 nDataSize;
/** Specifies whether the generator updated this data on the last call to one of the XnWaitXXXUpdateXXX() functions. **/
XnBool bIsNew;
} XnOutputMetaData;
/** Holds information about a frame of data that has a map format. **/
typedef struct XnMapMetaData
{
/** A pointer to general information about this frame. **/
XnOutputMetaData* pOutput;
/** The resolution of this frame, including any cropping that was set. **/
XnUInt32XYPair Res;
/** The offset of the cropped region within this frame. Set to (0,0) if no cropping was done. **/
XnUInt32XYPair Offset;
/** The full resolution of this frame, disregarding cropping. **/
XnUInt32XYPair FullRes;
/** The pixel format of this frame. **/
XnPixelFormat PixelFormat;
/** The number of frames per second that was set when this frame was received. **/
XnUInt32 nFPS;
} XnMapMetaData;
/** Holds information about a frame of depth. **/
typedef struct XnDepthMetaData
{
/** A pointer to the map meta data of this frame. **/
XnMapMetaData* pMap;
/** A pointer to the depth data of this frame. **/
const XnDepthPixel* pData;
/** The value of the Z resolution of this frame - the maximum depth a pixel can have. **/
XnDepthPixel nZRes;
} XnDepthMetaData;
/** Holds information about an image frame. **/
typedef struct XnImageMetaData
{
/** A pointer to the map meta data of this frame **/
XnMapMetaData* pMap;
/** A pointer to the image data of this frame **/
const XnUInt8* pData;
} XnImageMetaData;
/** Holds information about an IR frame. **/
typedef struct XnIRMetaData
{
/** A pointer to the map meta data of this frame **/
XnMapMetaData* pMap;
/** A pointer to the IR data of this frame **/
const XnIRPixel* pData;
} XnIRMetaData;
typedef struct XnAudioMetaData
{
/** A pointer to general information about this chunk of audio. **/
XnOutputMetaData* pOutput;
/** The wave output mode of this cunk of audio. **/
XnWaveOutputMode Wave;
/** A pointer to audio data of this cunk. **/
const XnUInt8* pData;
} XnAudioMetaData;
typedef struct XnSceneMetaData
{
/** A pointer to the map meta data of this frame. **/
XnMapMetaData* pMap;
/** A pointer to the scene data of this frame. **/
const XnLabel* pData;
} XnSceneMetaData;
#if XN_PLATFORM != XN_PLATFORM_ARC
#pragma pack (pop)
#endif
#endif //__XN_TYPES_H__