void DepthFilter::updateSeedsLoop() { while(!boost::this_thread::interruption_requested()) { FramePtr frame; { lock_t lock(frame_queue_mut_); while(frame_queue_.empty() && new_keyframe_set_ == false) frame_queue_cond_.wait(lock); if(new_keyframe_set_) { new_keyframe_set_ = false; seeds_updating_halt_ = false; clearFrameQueue(); frame = new_keyframe_; } else { frame = frame_queue_.front(); frame_queue_.pop(); } } updateSeeds(frame); if(frame->isKeyframe()) initializeSeeds(frame); } }
void DepthFilter::addKeyframe(FramePtr frame, double depth_mean, double depth_min) { new_keyframe_min_depth_ = depth_min; new_keyframe_mean_depth_ = depth_mean; if(thread_ != NULL) { new_keyframe_ = frame; new_keyframe_set_ = true; seeds_updating_halt_ = true; frame_queue_cond_.notify_one(); } else initializeSeeds(frame); }
void DepthFilter::addKeyframe(FramePtr frame, double depth_mean, double depth_min) { new_keyframe_min_depth_ = depth_min; new_keyframe_mean_depth_ = depth_mean; // if there exists an parallel thread for Depth-Filter just setup the control variables to jump into it if(thread_ != NULL) { new_keyframe_ = frame; new_keyframe_set_ = true; seeds_updating_halt_ = true; frame_queue_cond_.notify_one(); } // if there is no independent thread for Depth-Filter call the initialization of seeds explicitly (same effect) else initializeSeeds(frame); }