Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 #include <openni_camera/openni_device_xtion.h>
00038 #include <iostream>
00039 #include <sstream>
00040 #include <boost/thread/mutex.hpp>
00041
00042 using namespace boost;
00043
00044 namespace openni_wrapper
00045 {
00046
00047 DeviceXtionPro::DeviceXtionPro (xn::Context& context, const xn::NodeInfo& device_node, const xn::NodeInfo& depth_node, const xn::NodeInfo& ir_node) throw (OpenNIException)
00048 : OpenNIDevice (context, device_node, depth_node, ir_node)
00049 {
00050
00051 enumAvailableModes ();
00052 setDepthOutputMode (getDefaultDepthMode ());
00053 setIROutputMode (getDefaultIRMode ());
00054
00055 lock_guard<mutex> depth_lock(depth_mutex_);
00056 XnStatus status = depth_generator_.SetIntProperty ("RegistrationType", 1);
00057 if (status != XN_STATUS_OK)
00058 THROW_OPENNI_EXCEPTION ("Error setting the registration type. Reason: %s", xnGetStatusString (status));
00059 }
00060
00061 DeviceXtionPro::~DeviceXtionPro () throw ()
00062 {
00063 depth_mutex_.lock ();
00064 depth_generator_.UnregisterFromNewDataAvailable (depth_callback_handle_);
00065 depth_mutex_.unlock ();
00066 }
00067
00068 bool DeviceXtionPro::isImageResizeSupported (unsigned input_width, unsigned input_height, unsigned output_width, unsigned output_height) const throw ()
00069 {
00070 return false;
00071 }
00072
00073 void DeviceXtionPro::enumAvailableModes () throw (OpenNIException)
00074 {
00075 XnMapOutputMode output_mode;
00076 available_image_modes_.clear();
00077 available_depth_modes_.clear();
00078
00079
00080 output_mode.nFPS = 30;
00081 output_mode.nXRes = XN_VGA_X_RES;
00082 output_mode.nYRes = XN_VGA_Y_RES;
00083 available_depth_modes_.push_back (output_mode);
00084
00085 output_mode.nFPS = 25;
00086 output_mode.nXRes = XN_VGA_X_RES;
00087 output_mode.nYRes = XN_VGA_Y_RES;
00088 available_depth_modes_.push_back (output_mode);
00089
00090 output_mode.nFPS = 25;
00091 output_mode.nXRes = XN_QVGA_X_RES;
00092 output_mode.nYRes = XN_QVGA_Y_RES;
00093 available_depth_modes_.push_back (output_mode);
00094
00095 output_mode.nFPS = 30;
00096 output_mode.nXRes = XN_QVGA_X_RES;
00097 output_mode.nYRes = XN_QVGA_Y_RES;
00098 available_depth_modes_.push_back (output_mode);
00099
00100 output_mode.nFPS = 60;
00101 output_mode.nXRes = XN_QVGA_X_RES;
00102 output_mode.nYRes = XN_QVGA_Y_RES;
00103 available_depth_modes_.push_back (output_mode);
00104 }
00105
00106 boost::shared_ptr<Image> DeviceXtionPro::getCurrentImage (boost::shared_ptr<xn::ImageMetaData> image_data) const throw ()
00107 {
00108 return boost::shared_ptr<Image> ((Image*)0);
00109 }
00110
00111 void DeviceXtionPro::startDepthStream () throw (OpenNIException)
00112 {
00113 if (isDepthRegistered ())
00114 {
00115
00116 setDepthRegistration (false);
00117
00118
00119 OpenNIDevice::startDepthStream ();
00120
00121
00122 setDepthRegistration (true);
00123 }
00124 else
00125
00126 OpenNIDevice::startDepthStream ();
00127 }
00128
00129 }