00001
00002 #ifndef __JBXL_OPENNI2_DEV_H_
00003 #define __JBXL_OPENNI2_DEV_H_
00004
00005
00006 #ifdef ENABLE_OPENNI2
00007
00008
00009 #ifdef WIN32
00010
00011 #pragma warning(disable:4005) // INT8_MIN etc マクロの再定義
00012 #endif
00013
00014
00015 #include <OpenNI.h>
00016 #include <NiTE.h>
00017
00018 #include "NiDevice.h"
00019 #include "common++.h"
00020 #include "tools++.h"
00021 #include "buffer.h"
00022
00023
00024
00025 namespace jbxl {
00026
00027
00028 #define OPENNI2_DEVICE_PS1080 "PS1080"
00029 #define OPENNI2_DEVICE_KINECT "Kinect"
00030 #define OPENNI2_DEVICE_ONIFILE "oni File"
00031
00032
00033 #define OPENNI2_STREAM_DATA_NUM 3
00034
00035 #define OPENNI2_DEPTH_FLAG 0x01
00036 #define OPENNI2_IMAGE_FLAG 0x02
00037
00038
00039 #define OPENNI2_DEPTH_INDEX 0
00040 #define OPENNI2_IMAGE_INDEX 1
00041
00042
00043
00044
00045 class COpenNi2Device
00046 {
00047 public:
00048 COpenNi2Device(void);
00049 virtual ~COpenNi2Device(void) { free();}
00050
00051 ONI_EnuDev m_enu_dev;
00052
00053 int m_state;
00054 BOOL m_has_camera;
00055 Buffer m_err_mesg;
00056 Buffer m_dev_name;
00057
00058 int m_xsize;
00059 int m_ysize;
00060 int m_nfps;
00061
00062 public:
00063 BOOL init(BOOL use_image);
00064 BOOL init(char* fname, BOOL use_image);
00065 void free(void);
00066
00067
00068 BOOL create_Context(char* fname=NULL);
00069 BOOL create_Recorder(char* fname, BOOL use_image);
00070
00071 BOOL create_Image(void);
00072 BOOL create_Depth(void);
00073 BOOL create_User(void);
00074
00075 void delete_Context(void);
00076 void delete_Recorder(void);
00077
00078 void delete_Image(void);
00079 void delete_Depth(void);
00080 void delete_User(void);
00081
00082 public:
00083 void wait_StreamData(void);
00084
00085 BOOL set_ImageData(void);
00086 BOOL set_DepthData(void);
00087 BOOL set_SceneData(void);
00088
00089 uByte* get_ImageData(void) { if (imageFrame.isValid()) return (uByte*)imageFrame.getData(); else return NULL;}
00090 uByte* get_DepthData(void) { if (depthFrame.isValid()) return (uByte*)depthFrame.getData(); else return NULL;}
00091 uByte* get_SceneData(void) { if (userFrame.isValid()) return (uByte*)userFrame.getUserMap().getPixels(); else return NULL;}
00092
00093 public:
00094 openni::Device* context;
00095
00096 openni::VideoStream* image;
00097 openni::VideoStream* depth;
00098
00099
00100 openni::VideoFrameRef imageFrame;
00101 openni::VideoFrameRef depthFrame;
00102
00103
00104 openni::VideoMode imageMode;
00105 openni::VideoMode depthMode;
00106
00107 openni::Recorder* recorder;
00108
00109
00110 nite::UserTracker* user;
00111 nite::UserTrackerFrameRef userFrame;
00112
00113 private:
00114 unsigned char m_stream_flg;
00115 int m_stream_num;
00116 BOOL m_has_image_data;
00117 BOOL m_has_depth_data;
00118
00119
00120 openni::VideoStream* m_streams[OPENNI2_STREAM_DATA_NUM];
00121
00122 public:
00123
00124 BOOL setup_Tracking(int profile, double smooth);
00125
00126
00127 BOOL start_Recorde(char* file_name, BOOL use_image);
00128 void stop_Recorde(void);
00129
00130 public:
00131
00132 BOOL open_USB_Device (void) { return FALSE;}
00133 void close_USB_Device(void) {}
00134 void set_LED_Color (int col) {}
00135 void set_Tilt_Motor(int ang) {}
00136 };
00137
00138
00139
00140
00142
00143
00144 Buffer initialize_OpenNI2(void);
00145 void shutdown_OpenNI2(void);
00146
00147 Buffer initialize_NiTE2(void);
00148 void shutdown_NiTE2(void);
00149
00150
00151 }
00152
00153
00154 #endif // ENABLE_OPENNI2
00155
00156 #endif
00157