diff --git a/src/processor_base.cpp b/src/processor_base.cpp index 18701229dab299956def1c10bddfac5030ae0e3c..a7b02955e18b2e6c23d0be2d9968bdf4c00d3e4b 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 e1d6c240c5c9ab997721cd14318c8549806e07cf..2f1486dabea472230da45a86a09e7f355316fed0 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() ); } }