From 3837cb4b70edbe9baa6adad45bc5166d88784dd1 Mon Sep 17 00:00:00 2001
From: Nicolas Pope <nwpope@utu.fi>
Date: Thu, 23 Jul 2020 19:46:34 +0300
Subject: [PATCH] Add frame name method

---
 components/streams/src/renderers/screen_render.cpp   |  2 +-
 components/structures/include/ftl/data/new_frame.hpp |  5 +++++
 components/structures/src/new_frame.cpp              | 11 +++++++++++
 3 files changed, 17 insertions(+), 1 deletion(-)

diff --git a/components/streams/src/renderers/screen_render.cpp b/components/streams/src/renderers/screen_render.cpp
index da685ea88..7f6c7a359 100644
--- a/components/streams/src/renderers/screen_render.cpp
+++ b/components/streams/src/renderers/screen_render.cpp
@@ -161,7 +161,7 @@ bool ScreenRender::retrieve(ftl::data::Frame &frame_out) {
 				shape.type = Shape3DType::CAMERA;
 				shape.size = Eigen::Vector3f(0.2f,0.2f,0.2f);
 				shape.pose = f.cast<ftl::rgbd::Frame>().getPose().cast<float>();
-				shape.label = std::string("Camera");
+				shape.label = f.name();
 			}
 		}
 
diff --git a/components/structures/include/ftl/data/new_frame.hpp b/components/structures/include/ftl/data/new_frame.hpp
index 8a935688e..557984e87 100644
--- a/components/structures/include/ftl/data/new_frame.hpp
+++ b/components/structures/include/ftl/data/new_frame.hpp
@@ -642,6 +642,11 @@ class Frame {
 	void information(const std::string &msg);
 	void information(const ftl::Formatter &msg);
 
+	/**
+	 * Get or generate a name for this frame.
+	 */
+	std::string name() const;
+
 	// =========================================================================
 
 	protected:
diff --git a/components/structures/src/new_frame.cpp b/components/structures/src/new_frame.cpp
index ba79f32bf..ba95ba267 100644
--- a/components/structures/src/new_frame.cpp
+++ b/components/structures/src/new_frame.cpp
@@ -470,6 +470,17 @@ void Frame::information(const ftl::Formatter &msg) {
 	information(msg.str());
 }
 
+std::string Frame::name() const {
+	if (has(Channel::MetaData)) {
+		const auto &meta = get<std::map<std::string,std::string>>(Channel::MetaData);
+		auto i = meta.find("name");
+		if (i != meta.end()) return i->second;
+	}
+
+	// Generate a name
+	return std::string("Frame-") + std::to_string(frameset()) + std::string("-") + std::to_string(source());
+}
+
 // ==== Session ================================================================
 
 ftl::Handle Session::onChange(uint32_t pid, ftl::codecs::Channel c, const std::function<bool(Frame&,ftl::codecs::Channel)> &cb) {
-- 
GitLab