From 2350ca94431238f6a98bfb333d3cc63d9ce32c83 Mon Sep 17 00:00:00 2001 From: Joan Sola <jsola@iri.upc.edu> Date: Mon, 19 Feb 2018 19:12:02 +0100 Subject: [PATCH] Fix wrong incoming pointer and evaluation logic --- src/processor_base.cpp | 17 ++++++++++++++--- src/processor_tracker.cpp | 4 ++-- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/processor_base.cpp b/src/processor_base.cpp index 18701229d..a7b02955e 100644 --- a/src/processor_base.cpp +++ b/src/processor_base.cpp @@ -92,14 +92,25 @@ KFPackPtr KFPackBuffer::selectPack(const TimeStamp& _time_stamp, const Scalar& _ KFPackBuffer::Iterator post = container_.upper_bound(_time_stamp); KFPackBuffer::Iterator prev = container_.end(); + if (container_.empty()) + return nullptr; + + bool check_post = (post != container_.end()); + if (post != container_.begin()) { prev = std::prev(post); - if (!checkTimeTolerance(prev->first, prev->second->time_tolerance, _time_stamp, _time_tolerance) && checkTimeTolerance(post->first, post->second->time_tolerance, _time_stamp, _time_tolerance)) + if (!checkTimeTolerance(prev->first, prev->second->time_tolerance, _time_stamp, _time_tolerance) + && check_post + && checkTimeTolerance(post->first, post->second->time_tolerance, _time_stamp, _time_tolerance)) return post->second; - else if (checkTimeTolerance(prev->first, prev->second->time_tolerance, _time_stamp, _time_tolerance) && !checkTimeTolerance(post->first, post->second->time_tolerance, _time_stamp, _time_tolerance)) + else if (checkTimeTolerance(prev->first, prev->second->time_tolerance, _time_stamp, _time_tolerance) + && check_post + && !checkTimeTolerance(post->first, post->second->time_tolerance, _time_stamp, _time_tolerance)) return prev->second; - else if (checkTimeTolerance(prev->first, prev->second->time_tolerance, _time_stamp, _time_tolerance) && checkTimeTolerance(post->first, post->second->time_tolerance, _time_stamp, _time_tolerance)) + else if (checkTimeTolerance(prev->first, prev->second->time_tolerance, _time_stamp, _time_tolerance) + && check_post + && checkTimeTolerance(post->first, post->second->time_tolerance, _time_stamp, _time_tolerance)) { if (std::fabs((*post).first - _time_stamp) < std::fabs((*prev).first - _time_stamp)) return post->second; diff --git a/src/processor_tracker.cpp b/src/processor_tracker.cpp index e1d6c240c..2f1486dab 100644 --- a/src/processor_tracker.cpp +++ b/src/processor_tracker.cpp @@ -52,11 +52,11 @@ void ProcessorTracker::process(CaptureBasePtr const _incoming_ptr) } // Select using incoming_ptr - pack = kf_pack_buffer_.selectPack( incoming_ptr_->getTimeStamp(), time_tolerance_ ); + pack = kf_pack_buffer_.selectPack( _incoming_ptr->getTimeStamp(), time_tolerance_ ); if (pack!=nullptr) { keyFrameCallback(pack->key_frame,pack->time_tolerance); - kf_pack_buffer_.removeUpTo( incoming_ptr_->getTimeStamp() ); + kf_pack_buffer_.removeUpTo( _incoming_ptr->getTimeStamp() ); } } -- GitLab