From d9fd6e1a1d0fdfdf9eb4b6fead8dc7ea62f8ec23 Mon Sep 17 00:00:00 2001
From: Nicolas Pope <nwpope@utu.fi>
Date: Tue, 21 Jul 2020 09:49:25 +0300
Subject: [PATCH] Limit render fps

---
 components/streams/include/ftl/streams/builder.hpp | 4 ++++
 components/streams/src/builder.cpp                 | 3 +++
 components/streams/src/feed.cpp                    | 3 +++
 3 files changed, 10 insertions(+)

diff --git a/components/streams/include/ftl/streams/builder.hpp b/components/streams/include/ftl/streams/builder.hpp
index 844e7123b..c13e97901 100644
--- a/components/streams/include/ftl/streams/builder.hpp
+++ b/components/streams/include/ftl/streams/builder.hpp
@@ -119,8 +119,12 @@ class ManualSourceBuilder : public LocalBuilder {
 
 	void tick();
 
+	inline void setFrameRate(int fps) { mspf_ = 1000/fps; };
+
 	private:
 	ftl::data::DiscreteSource *src_;
+	int mspf_ = 30;
+	int64_t last_timestamp_=0;
 };
 
 class ForeignBuilder : public BaseBuilder {
diff --git a/components/streams/src/builder.cpp b/components/streams/src/builder.cpp
index ab0991a53..7dc8400c2 100644
--- a/components/streams/src/builder.cpp
+++ b/components/streams/src/builder.cpp
@@ -171,6 +171,9 @@ void ManualSourceBuilder::tick() {
 	if (!src_) return;
 
 	int64_t ts = ftl::timer::get_time();
+	if (ts < last_timestamp_ + mspf_) return;
+	last_timestamp_ = ts;
+
 	src_->capture(ts);
 
 	auto fs = getNextFrameSet(ts);
diff --git a/components/streams/src/feed.cpp b/components/streams/src/feed.cpp
index 1a61885e0..cd1681459 100644
--- a/components/streams/src/feed.cpp
+++ b/components/streams/src/feed.cpp
@@ -643,6 +643,9 @@ uint32_t Feed::add(const std::string &path) {
 
 			// Create local builder instance
 			auto *creator = new ftl::streams::ManualSourceBuilder(pool_.get(), fsid, source);
+			if (uri.getBaseURI() == "device::openvr") creator->setFrameRate(1000);
+			else creator->setFrameRate(30);
+			
 			std::shared_ptr<ftl::streams::BaseBuilder> creatorptr(creator);
 			lk.lock();
 			receiver_->registerBuilder(creatorptr);
-- 
GitLab