]> git.sesse.net Git - nageru/blobdiff - mixer.h
Reset audio resampler when FFmpeg inputs restart due to errors.
[nageru] / mixer.h
diff --git a/mixer.h b/mixer.h
index 940dc1308c04445c166b3956aeda6b36cbaa3287..adfb7cf361f24ea22554c3deab545cbd9de87ad5 100644 (file)
--- a/mixer.h
+++ b/mixer.h
@@ -403,6 +403,15 @@ public:
                return httpd.get_num_connected_clients();
        }
 
+       std::vector<Theme::MenuEntry> get_theme_menu() { return theme->get_theme_menu(); }
+
+       void theme_menu_entry_clicked(int lua_ref) { return theme->theme_menu_entry_clicked(lua_ref); }
+
+       void set_theme_menu_callback(std::function<void()> callback)
+       {
+               theme->set_theme_menu_callback(callback);
+       }
+
 private:
        struct CaptureCard;
 
@@ -433,7 +442,7 @@ private:
        std::pair<std::string, std::string> get_channel_color_http(unsigned channel_idx);
 
        HTTPD httpd;
-       unsigned num_cards, num_video_inputs, num_html_inputs;
+       unsigned num_cards, num_video_inputs, num_html_inputs = 0;
 
        QSurface *mixer_surface, *h264_encoder_surface, *decklink_output_surface;
        std::unique_ptr<movit::ResourcePool> resource_pool;
@@ -478,6 +487,15 @@ private:
                CardType type;
                std::unique_ptr<DeckLinkOutput> output;
 
+               // CEF only delivers frames when it actually has a change.
+               // If we trim the queue for latency reasons, we could thus
+               // end up in a situation trimming a frame that was meant to
+               // be displayed for a long time, which is really suboptimal.
+               // Thus, if we drop the last frame we have, may_have_dropped_last_frame
+               // is set to true, and the next starvation event will trigger
+               // us requestin a CEF repaint.
+               bool is_cef_capture, may_have_dropped_last_frame = false;
+
                // If this card is used for output (ie., output_card_index points to it),
                // it cannot simultaneously be uesd for capture, so <capture> gets replaced
                // by a FakeCapture. However, since reconstructing the real capture object