+ class OutputChannel {
+ public:
+ void output_frame(GLuint tex, RefCountedGLsync fence);
+ bool get_display_frame(DisplayFrame *frame);
+ void set_frame_ready_callback(new_frame_ready_callback_t callback);
+ void set_size(int width, int height); // Ignored for OUTPUT_LIVE.
+
+ private:
+ friend class Mixer;
+
+ Mixer *parent = nullptr; // Not owned.
+ std::mutex frame_mutex;
+ DisplayFrame current_frame, ready_frame; // protected by <frame_mutex>
+ bool has_current_frame = false, has_ready_frame = false; // protected by <frame_mutex>
+ new_frame_ready_callback_t new_frame_ready_callback;
+ bool has_new_frame_ready_callback = false;
+
+ int width = 1280, height = 720;
+ };
+ OutputChannel output_channel[NUM_OUTPUTS];