Use an explicit ceres::Context
This lets us reuse it which makes the solves way faster.
Change-Id: I3f8745970f1e3bf0c3299632efb019002c8eb36f
diff --git a/y2019/vision/target_finder.h b/y2019/vision/target_finder.h
index c7de67a..3da5373 100644
--- a/y2019/vision/target_finder.h
+++ b/y2019/vision/target_finder.h
@@ -1,14 +1,21 @@
#ifndef _Y2019_VISION_TARGET_FINDER_H_
#define _Y2019_VISION_TARGET_FINDER_H_
+#include <memory>
+
+#include "aos/vision/blob/contour.h"
#include "aos/vision/blob/region_alloc.h"
#include "aos/vision/blob/threshold.h"
#include "aos/vision/blob/transpose.h"
-#include "aos/vision/blob/contour.h"
#include "aos/vision/debug/overlay.h"
#include "aos/vision/math/vector.h"
#include "y2019/vision/target_types.h"
+namespace ceres {
+
+class Context;
+
+} // namespace ceres
namespace y2019 {
namespace vision {
@@ -26,6 +33,8 @@
class TargetFinder {
public:
TargetFinder();
+ ~TargetFinder();
+
// Turn a raw image into blob range image.
aos::vision::RangeImage Threshold(aos::vision::ImagePtr image);
@@ -88,6 +97,8 @@
ExtrinsicParams default_extrinsics_;
+ const std::unique_ptr<ceres::Context> ceres_context_;
+
// Counts for logging.
size_t frame_count_;
size_t valid_result_count_;