diff options
Diffstat (limited to 'tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnTypes.h')
-rw-r--r-- | tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnTypes.h | 1188 |
1 files changed, 1188 insertions, 0 deletions
diff --git a/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnTypes.h b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnTypes.h new file mode 100644 index 00000000..40eb04e6 --- /dev/null +++ b/tests/manual/kinectsurface/QtKinectWrapper/OpenNI/Include/XnTypes.h @@ -0,0 +1,1188 @@ +/**************************************************************************** +* * +* 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 <http://www.gnu.org/licenses/>. * +* * +****************************************************************************/ +#ifndef __XN_TYPES_H__ +#define __XN_TYPES_H__ + +//--------------------------------------------------------------------------- +// Includes +//--------------------------------------------------------------------------- +#include <XnStatus.h> +#include <XnOS.h> + +//--------------------------------------------------------------------------- +// 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__ |