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 std;
00043 using namespace boost;
00044
00045 namespace openni_wrapper
00046 {
00047
00048 DeviceXtionPro::DeviceXtionPro (xn::Context& context, const xn::NodeInfo& device_node, const xn::NodeInfo& depth_node, const xn::NodeInfo& ir_node) throw (OpenNIException)
00049 : OpenNIDevice (context, device_node, depth_node, ir_node)
00050 {
00051
00052 enumAvailableModes ();
00053 setDepthOutputMode (getDefaultDepthMode ());
00054 setIROutputMode (getDefaultIRMode ());
00055
00056 lock_guard<mutex> depth_lock(depth_mutex_);
00057 XnStatus status = depth_generator_.SetIntProperty ("RegistrationType", 1);
00058 if (status != XN_STATUS_OK)
00059 THROW_OPENNI_EXCEPTION ("Error setting the registration type. Reason: %s", xnGetStatusString (status));
00060 }
00061
00062 DeviceXtionPro::~DeviceXtionPro () throw ()
00063 {
00064 depth_mutex_.lock ();
00065 depth_generator_.UnregisterFromNewDataAvailable (depth_callback_handle_);
00066 depth_mutex_.unlock ();
00067 }
00068
00069 bool DeviceXtionPro::isImageResizeSupported (unsigned input_width, unsigned input_height, unsigned output_width, unsigned output_height) const throw ()
00070 {
00071 return false;
00072 }
00073
00074 void DeviceXtionPro::enumAvailableModes () throw (OpenNIException)
00075 {
00076 XnMapOutputMode output_mode;
00077 available_image_modes_.clear();
00078 available_depth_modes_.clear();
00079
00080
00081 output_mode.nFPS = 30;
00082 output_mode.nXRes = XN_VGA_X_RES;
00083 output_mode.nYRes = XN_VGA_Y_RES;
00084 available_depth_modes_.push_back (output_mode);
00085
00086 output_mode.nFPS = 25;
00087 output_mode.nXRes = XN_VGA_X_RES;
00088 output_mode.nYRes = XN_VGA_Y_RES;
00089 available_depth_modes_.push_back (output_mode);
00090
00091 output_mode.nFPS = 25;
00092 output_mode.nXRes = XN_QVGA_X_RES;
00093 output_mode.nYRes = XN_QVGA_Y_RES;
00094 available_depth_modes_.push_back (output_mode);
00095
00096 output_mode.nFPS = 30;
00097 output_mode.nXRes = XN_QVGA_X_RES;
00098 output_mode.nYRes = XN_QVGA_Y_RES;
00099 available_depth_modes_.push_back (output_mode);
00100
00101 output_mode.nFPS = 60;
00102 output_mode.nXRes = XN_QVGA_X_RES;
00103 output_mode.nYRes = XN_QVGA_Y_RES;
00104 available_depth_modes_.push_back (output_mode);
00105 }
00106
00107 boost::shared_ptr<Image> DeviceXtionPro::getCurrentImage (boost::shared_ptr<xn::ImageMetaData> image_data) const throw ()
00108 {
00109 return boost::shared_ptr<Image> ((Image*)0);
00110 }
00111
00112 void DeviceXtionPro::startDepthStream () throw (OpenNIException)
00113 {
00114 if (isDepthRegistered ())
00115 {
00116
00117 setDepthRegistration (false);
00118
00119
00120 OpenNIDevice::startDepthStream ();
00121
00122
00123 setDepthRegistration (true);
00124 }
00125 else
00126
00127 OpenNIDevice::startDepthStream ();
00128 }
00129
00130 }