From 5420562cd6a90f352372b7ddf2b2dfe52fcdfd8a Mon Sep 17 00:00:00 2001
From: Nicolas Pope <nwpope@utu.fi>
Date: Tue, 13 Aug 2019 10:05:07 +0300
Subject: [PATCH] Remove group callbacks

---
 components/rgbd-sources/include/ftl/rgbd/source.hpp | 3 ++-
 components/rgbd-sources/src/group.cpp               | 4 +++-
 components/rgbd-sources/src/source.cpp              | 5 +++++
 3 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/components/rgbd-sources/include/ftl/rgbd/source.hpp b/components/rgbd-sources/include/ftl/rgbd/source.hpp
index 55cb8554e..f5e27cd88 100644
--- a/components/rgbd-sources/include/ftl/rgbd/source.hpp
+++ b/components/rgbd-sources/include/ftl/rgbd/source.hpp
@@ -199,7 +199,8 @@ class Source : public ftl::Configurable {
 	SHARED_MUTEX &mutex() { return mutex_; }
 
 	std::function<void(int64_t, const cv::Mat &, const cv::Mat &)> &callback() { return callback_; }
-	void setCallback(std::function<void(int64_t, const cv::Mat &, const cv::Mat &)> cb) { callback_ = cb; }
+	void setCallback(std::function<void(int64_t, const cv::Mat &, const cv::Mat &)> cb);
+	void removeCallback() { callback_ = nullptr; }
 
 
 	private:
diff --git a/components/rgbd-sources/src/group.cpp b/components/rgbd-sources/src/group.cpp
index 88b9afcdc..b8dbd6369 100644
--- a/components/rgbd-sources/src/group.cpp
+++ b/components/rgbd-sources/src/group.cpp
@@ -11,7 +11,9 @@ Group::Group() : framesets_(kFrameBufferSize), head_(0) {
 }
 
 Group::~Group() {
-
+	for (auto s : sources_) {
+		s->removeCallback();
+	}
 }
 
 void Group::addSource(ftl::rgbd::Source *src) {
diff --git a/components/rgbd-sources/src/source.cpp b/components/rgbd-sources/src/source.cpp
index c5efd26fc..17e343a00 100644
--- a/components/rgbd-sources/src/source.cpp
+++ b/components/rgbd-sources/src/source.cpp
@@ -355,3 +355,8 @@ bool Source::setChannel(ftl::rgbd::channel_t c) {
 const ftl::rgbd::Camera Source::parameters(ftl::rgbd::channel_t chan) const {
 	return (impl_) ? impl_->parameters(chan) : parameters();
 }
+
+void Source::setCallback(std::function<void(int64_t, const cv::Mat &, const cv::Mat &)> cb) {
+	if (bool(callback_)) LOG(ERROR) << "Source already has a callback: " << getURI();
+	callback_ = cb;
+}
-- 
GitLab