23 #include "depth_thread.h"
24 #include "utils/setup.h"
26 #include <core/threading/mutex_locker.h>
27 #include <fvutils/ipc/shm_image.h>
28 #include <fvutils/color/colorspaces.h>
32 using namespace fawkes;
33 using namespace firevision;
45 :
Thread(
"OpenNiDepthThread",
Thread::OPMODE_WAITFORWAKEUP),
62 __depth_gen =
new xn::DepthGenerator();
63 std::auto_ptr<xn::DepthGenerator> depthgen_autoptr(__depth_gen);
67 fawkes::openni::find_or_create_node(
openni, XN_NODE_TYPE_DEPTH, __depth_gen);
68 fawkes::openni::setup_map_generator(*__depth_gen,
config);
70 __depth_md =
new xn::DepthMetaData();
72 __depth_gen->GetMetaData(*__depth_md);
74 __depth_width = __depth_md->XRes();
75 __depth_height = __depth_md->YRes();
78 __depth_md->XRes(), __depth_md->YRes());
79 __depth_bufsize = colorspace_buffer_size(RAW16,
80 __depth_md->XRes(), __depth_md->YRes());
82 __depth_gen->StartGenerating();
87 __depth_gen->WaitAndUpdateData();
90 *__capture_start -= (
long int)__depth_gen->GetTimestamp();
93 depthgen_autoptr.release();
112 bool is_depth_new = __depth_gen->IsDataNew();
113 __depth_gen->GetMetaData(*__depth_md);
114 const XnDepthPixel *
const depth_data = __depth_md->Data();
115 fawkes::Time ts = *__capture_start + (
long int)__depth_gen->GetTimestamp();
118 if (is_depth_new && (__depth_buf->
num_attached() > 1)) {
119 memcpy(__depth_buf->
buffer(), depth_data, __depth_bufsize);