X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=mixer.h;h=6f04c67844113d53010fa3ca93a451c0f6fcb821;hb=f006b5b162841dbc764fb620025b87a3272ac79a;hp=2b006822ee14d4fd1393a1ffc7e1dafcf030027a;hpb=71228817c10497e60bcea5b836c79e462f2d32fb;p=nageru diff --git a/mixer.h b/mixer.h index 2b00682..6f04c67 100644 --- a/mixer.h +++ b/mixer.h @@ -71,10 +71,12 @@ class QSurfaceFormat; // // N is reduced as follows: If the queue has had at least one spare frame for // at least 50 (master) frames (ie., it's been too conservative for a second), -// we reduce N by 1 and reset the timers. +// we reduce N by 1 and reset the timers. TODO: Only do this if N ever actually +// touched the limit. // -// Whenever the queue is starved (we needed a frame but there was none), N was -// obviously too low, so we increment N. We will never set N above 5, though. +// Whenever the queue is starved (we needed a frame but there was none), +// and we've been at N since the last starvation, N was obviously too low, +// so we increment it. We will never set N above 5, though. class QueueLengthPolicy { public: QueueLengthPolicy() {} @@ -82,6 +84,7 @@ public: this->card_index = card_index; safe_queue_length = 0; frames_with_at_least_one = 0; + been_at_safe_point_since_last_starvation = false; } void update_policy(int queue_length); // Give in -1 for starvation. @@ -91,6 +94,7 @@ private: unsigned card_index; // For debugging only. unsigned safe_queue_length = 0; // Called N in the comments. unsigned frames_with_at_least_one = 0; + bool been_at_safe_point_since_last_starvation = false; }; class Mixer { @@ -167,6 +171,11 @@ public: return theme->get_channel_name(channel); } + std::string get_channel_color(unsigned channel) const + { + return theme->get_channel_color(channel); + } + int get_channel_signal(unsigned channel) const { return theme->get_channel_signal(channel); @@ -388,7 +397,7 @@ private: int64_t length; // In TIMEBASE units. bool interlaced; unsigned field; // Which field (0 or 1) of the frame to use. Always 0 for progressive. - GLsync ready_fence; // Whether frame is ready for rendering. + RefCountedGLsync ready_fence; // Whether frame is ready for rendering. unsigned dropped_frames = 0; // Number of dropped frames before this one. }; std::queue new_frames;