diff --git a/src/processor_motion.cpp b/src/processor_motion.cpp index de044f52334c94b49688df4f2aa3d2c6150f0b3a..315abfea1fb072ce5558683ed9302139656bce4b 100644 --- a/src/processor_motion.cpp +++ b/src/processor_motion.cpp @@ -46,7 +46,14 @@ void ProcessorMotion::process(CaptureBasePtr _incoming_ptr) return; } - incoming_ptr_ = std::static_pointer_cast<CaptureMotion>(_incoming_ptr); + incoming_ptr_ = processIncomingCapture(_incoming_ptr); + + /// @todo Anything else to do ? + if (incoming_ptr_ == nullptr) + { + WOLF_WARN("Processor motion received a nullptr incoming_ptr_.") + return; + } preProcess(); // Derived class operations diff --git a/src/processor_motion.h b/src/processor_motion.h index df3471855ac4b030db679cfa7cd0027afc9328b9..03d6132447aaaf7a529d0c80154d6aa4197a0cb6 100644 --- a/src/processor_motion.h +++ b/src/processor_motion.h @@ -198,6 +198,15 @@ class ProcessorMotion : public ProcessorBase void splitBuffer(const TimeStamp& _t_split, MotionBuffer& _oldest_part); void reintegrateBuffer(CaptureMotionPtr _capture_ptr); + /** + * @brief @brief Process the incoming CaptureBase an return a CaptureMotion. + * If not overloaded, the default impl simply calls + * static_pointer_cast<CaptureMotion>(incoming). + * @param _incoming_ptr, the incoming Capture to be processed. + * @return A CaptureMotionPtr. + */ + CaptureMotionPtr processIncomingCapture(CaptureBasePtr _incoming_ptr); + /** Pre-process incoming Capture * * This is called by process() just after assigning incoming_ptr_ to a valid Capture. @@ -508,6 +517,11 @@ inline Scalar ProcessorMotion::updateDt() return dt_ = incoming_ptr_->getTimeStamp() - getBuffer().get().back().ts_; } +inline CaptureMotionPtr ProcessorMotion::processIncomingCapture(CaptureBasePtr _incoming_ptr) +{ + return std::static_pointer_cast<CaptureMotion>(_incoming_ptr); +} + inline const MotionBuffer& ProcessorMotion::getBuffer() const { return last_ptr_->getBuffer();