From dc566df772ef79e059cd258156bff7e17549f967 Mon Sep 17 00:00:00 2001
From: Nicolas Pope <nwpope@utu.fi>
Date: Mon, 20 Jul 2020 19:31:51 +0300
Subject: [PATCH] Respond to render intrinsics change

---
 components/streams/src/renderers/screen_render.cpp | 14 +++++++++++++-
 components/streams/src/renderers/screen_render.hpp |  1 +
 2 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/components/streams/src/renderers/screen_render.cpp b/components/streams/src/renderers/screen_render.cpp
index 9a1728c13..bc78d4216 100644
--- a/components/streams/src/renderers/screen_render.cpp
+++ b/components/streams/src/renderers/screen_render.cpp
@@ -31,6 +31,17 @@ ScreenRender::ScreenRender(ftl::render::Source *host, ftl::stream::Feed *feed)
 	);
 
 	intrinsics_ = ftl::create<ftl::Configurable>(host_, "intrinsics");
+	refresh_calibration_ = false;
+
+	intrinsics_->on("focal", [this](const ftl::config::Event &e) {
+		refresh_calibration_ = true;
+	});
+	intrinsics_->on("width", [this](const ftl::config::Event &e) {
+		refresh_calibration_ = true;
+	});
+	intrinsics_->on("height", [this](const ftl::config::Event &e) {
+		refresh_calibration_ = true;
+	});
 
 	filter_ = nullptr;
 	std::string source = host_->value("source", std::string(""));
@@ -78,7 +89,8 @@ bool ScreenRender::retrieve(ftl::data::Frame &frame_out) {
 	if (sets.size() > 0) {
 		ftl::rgbd::Frame &rgbdframe = frame_out.cast<ftl::rgbd::Frame>();
 
-		if (!frame_out.has(Channel::Calibration)) {
+		if (!frame_out.has(Channel::Calibration) || refresh_calibration_) {
+			refresh_calibration_ = false;
 			rgbdframe.setLeft() = ftl::rgbd::Camera::from(intrinsics_);
 
 			if (!frame_out.has(Channel::Capabilities)) {
diff --git a/components/streams/src/renderers/screen_render.hpp b/components/streams/src/renderers/screen_render.hpp
index 084b096fe..4de8e9609 100644
--- a/components/streams/src/renderers/screen_render.hpp
+++ b/components/streams/src/renderers/screen_render.hpp
@@ -34,6 +34,7 @@ class ScreenRender : public ftl::render::BaseSourceImpl {
 	ftl::Configurable *intrinsics_;
 	uint32_t my_id_;
 	ftl::operators::Graph *post_pipe_;
+	bool refresh_calibration_;
 };
 
 }
-- 
GitLab