From 5b13ac106b433dbfca9ddfd4229e9cf7a6c63041 Mon Sep 17 00:00:00 2001
From: artivis <deray.jeremie@gmail.com>
Date: Mon, 28 May 2018 18:24:28 +0200
Subject: [PATCH] pre-process incoming CaptureBase to CaptureMotion

---
 src/processor_motion.cpp |  9 ++++++++-
 src/processor_motion.h   | 14 ++++++++++++++
 2 files changed, 22 insertions(+), 1 deletion(-)

diff --git a/src/processor_motion.cpp b/src/processor_motion.cpp
index de044f523..315abfea1 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 df3471855..03d613244 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();
-- 
GitLab