// Do not call directly, even in child void DepthCallback(void *_depth, uint32_t timestamp) { Mutex::ScopedLock lock(m_depth_mutex); uint16_t* depth = static_cast<uint16_t*>(_depth); copy(depth, depth+getDepthBufferSize()/2, m_buffer_depth.begin()); m_new_depth_frame = true; }
/*! * \brief called if usb depth event in Freenect::m_thread. * \param [out] _depth points buffer where to save usb incoming depth frame. * \param timestamp internal use to synchronize video & depth frames. * \see libfreenect.hpp Freenect::Freenect */ void Apikinect::DepthCallback(void *_depth, uint32_t timestamp) { std::lock_guard<std::mutex> lock(m_depth_mutex);//lock will be destroyed when exit DepthCallback uint16_t* depth = static_cast<uint16_t*>(_depth); copy(depth, depth+getDepthBufferSize()/2, m_buffer_depth.begin()); m_new_depth_frame = true; }
// Do not call directly even in child void DepthCallback(void* _depth, uint32_t timestamp) { m_depth_mutex.lock(); uint16_t* depth = static_cast<uint16_t*>(_depth); // was getVideoBufferSize() std::copy(depth, depth+getDepthBufferSize(), m_buffer_depth.begin()); m_new_depth_frame = true; m_depth_mutex.unlock(); }
MyFreenectDevice(freenect_context *_ctx, int _index) : Freenect::FreenectDevice(_ctx, _index), m_buffer_depth(getDepthBufferSize()),m_buffer_video(getVideoBufferSize()), m_gamma(2048), m_new_rgb_frame(false), m_new_depth_frame(false) { for( unsigned int i = 0 ; i < 2048 ; i++) { float v = i/2048.0; v = std::pow(v, 3)* 6; m_gamma[i] = v*6*256; } }
uint16_t getDepthBufferSize16() { return getDepthBufferSize()/2; }