00001
00002 #ifndef __JBXL_OPENNI_DEV_H_
00003 #define __JBXL_OPENNI_DEV_H_
00004
00005
00006 #ifdef ENABLE_OPENNI2
00007 #ifdef ENABLE_OPENNI
00008 #undef ENABLE_OPENNI
00009 #endif
00010 #endif
00011
00012
00013 #ifdef ENABLE_OPENNI
00014
00015
00016 #ifdef WIN32
00017 #pragma warning(disable:4996)
00018 #endif
00019
00020
00021 #include <XnCppWrapper.h>
00022 #include <XnUSB.h>
00023
00024 #include "NiDevice.h"
00025 #include "common++.h"
00026 #include "tools++.h"
00027 #include "buffer.h"
00028
00029
00030
00031 namespace jbxl {
00032
00033
00034
00035 class COpenNiDevice
00036 {
00037 public:
00038 COpenNiDevice(void);
00039 virtual ~COpenNiDevice(void) { free();}
00040
00041 ONI_EnuDev m_enu_dev;
00042
00043 int m_state;
00044 BOOL m_has_camera;
00045 Buffer m_err_mesg;
00046
00047 int m_xsize;
00048 int m_ysize;
00049 int m_nfps;
00050
00051 XnStatus rc;
00052
00053 public:
00054 BOOL init(BOOL use_image);
00055 BOOL init(char* fname, BOOL use_image);
00056 void free(void);
00057
00058
00059 BOOL create_Context(char* fname=NULL);
00060 BOOL create_Image (BOOL easy=FALSE);
00061 BOOL create_Depth (BOOL easy=FALSE);
00062 BOOL create_User (BOOL easy=FALSE);
00063 BOOL create_Player(BOOL easy=FALSE);
00064
00065 void delete_Context(void);
00066 void delete_Image(void);
00067 void delete_Depth(void);
00068 void delete_User(void);
00069 void delete_Player(void);
00070
00071 public:
00072 XnMapOutputMode outputMode;
00073
00074 xn::Context* context;
00075 xn::ImageGenerator* image;
00076 xn::DepthGenerator* depth;
00077 xn::UserGenerator* user;
00078 xn::Player* player;
00079
00080 xn::ImageMetaData* imageMD;
00081 xn::DepthMetaData* depthMD;
00082 xn::SceneMetaData* sceneMD;
00083
00084 xn::Recorder* recorder;
00085 xn::SkeletonCapability* skeleton;
00086
00087 public:
00088 XnUserID dUsers[OPENNI_USERS_NUM];
00089 XnUInt16 nUsers;
00090
00091
00092 public:
00093
00094 BOOL setup_Tracking(int profile, double smooth);
00095 void clear_Skeleton(void);
00096 void clear_Tracking(void);
00097
00098
00099 BOOL create_Recorder(char* file_name, BOOL use_image);
00100 void delete_Recorder(void);
00101
00102 BOOL start_Recorde(char* file_name, BOOL use_image);
00103 void stop_Recorde(void);
00104
00105 public:
00106
00107 XN_USB_DEV_HANDLE usb_dev;
00108 XnUSBConnectionString* devPath;
00109
00110 public:
00111
00112 BOOL open_USB_Device (void);
00113 void close_USB_Device(void);
00114 void set_LED_Color (int col);
00115 void set_Tilt_Motor(int ang);
00116
00117 public:
00118 XnCallbackHandle userCallbacks;
00119 XnCallbackHandle poseCallbacks;
00120 XnCallbackHandle calibCallbacks;
00121
00122 public:
00123
00124 BOOL setup_CallBacks(void);
00125 void clear_CallBacks(void);
00126
00127 BOOL set_UserCallbacks(xn::UserGenerator::UserHandler newUser, xn::UserGenerator::UserHandler lostUser, void* cookie);
00128 BOOL set_CalibCallbacks(xn::SkeletonCapability::CalibrationStart calibStart, xn::SkeletonCapability::CalibrationEnd calibEnd, void* cookie);
00129
00130 void unset_UserCallbacks(void);
00131 void unset_CalibCallbacks(void);
00132 };
00133
00134
00135
00136
00138
00139
00140 void XN_CALLBACK_TYPE userDetect(xn::UserGenerator& user, XnUserID nId, void* cookie);
00141 void XN_CALLBACK_TYPE userLost (xn::UserGenerator& user, XnUserID nId, void* cookie);
00142 void XN_CALLBACK_TYPE calibStart(xn::SkeletonCapability& skeleton, XnUserID nId, void* cookie);
00143 void XN_CALLBACK_TYPE calibEnd (xn::SkeletonCapability& skeleton, XnUserID nId, XnBool success, void* cookie);
00144
00145
00146
00147
00148 }
00149
00150
00151 #endif
00152 #endif
00153