summaryrefslogtreecommitdiffstats
path: root/src/fig/FIGCarousel.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/fig/FIGCarousel.cpp')
-rw-r--r--src/fig/FIGCarousel.cpp28
1 files changed, 28 insertions, 0 deletions
diff --git a/src/fig/FIGCarousel.cpp b/src/fig/FIGCarousel.cpp
index 415f197..390dcf3 100644
--- a/src/fig/FIGCarousel.cpp
+++ b/src/fig/FIGCarousel.cpp
@@ -55,6 +55,22 @@ void FIGCarouselElement::increase_deadline()
deadline = rate_increment_ms(fig->repetition_rate());
}
+bool FIGCarouselElement::check_deadline()
+{
+ const auto new_rate = fig->repetition_rate();
+ const bool rate_changed = (m_last_rate != new_rate);
+
+ if (rate_changed) {
+ const auto new_deadline = rate_increment_ms(new_rate);
+ if (deadline > new_deadline) {
+ deadline = new_deadline;
+ }
+ m_last_rate = new_rate;
+ }
+
+ return rate_changed;
+}
+
/**************** FIGCarousel *****************/
@@ -211,6 +227,18 @@ size_t FIGCarousel::carousel(
sorted_figs.push_back(&fig);
}
+ /* Some FIGs might have changed rate since we last
+ * set the deadline */
+ for (auto& fig : sorted_figs) {
+ if (fig->check_deadline()) {
+#if CAROUSELDEBUG
+ std::cerr << " FIG" << fig->fig->figtype() << "/" <<
+ fig->fig->figextension() << " deadline changed" <<
+ std::endl;
+#endif
+ }
+ }
+
/* Sort the FIGs in the FIB according to their deadline */
std::sort(sorted_figs.begin(), sorted_figs.end(),
[]( const FIGCarouselElement* left,