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