X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=theme.h;h=0a239953baebf515f99c9b831e75ccdf6fc1b822;hb=d7d1594937aac9e11fc35e84e5a3873c2207136f;hp=d2f6d2c586a396199af736e6898b6ea0526a2641;hpb=16e654819e2254ef045b60b7751a918558c4a13a;p=nageru diff --git a/theme.h b/theme.h index d2f6d2c..0a23995 100644 --- a/theme.h +++ b/theme.h @@ -9,6 +9,7 @@ #include #include #include +#include #include #include "bmusb/bmusb.h" @@ -82,25 +83,15 @@ public: } #endif - void register_video_signal_connection(LiveInputWrapper *live_input, FFmpegCapture *capture) + void register_video_signal_connection(movit::EffectChain *chain, LiveInputWrapper *live_input, FFmpegCapture *capture) { - video_signal_connections.emplace_back(live_input, capture); - } - - std::vector> get_video_signal_connections() const - { - return video_signal_connections; + video_signal_connections[chain].emplace_back(VideoSignalConnection { live_input, capture }); } #ifdef HAVE_CEF - void register_html_signal_connection(LiveInputWrapper *live_input, CEFCapture *capture) - { - html_signal_connections.emplace_back(live_input, capture); - } - - std::vector> get_html_signal_connections() const + void register_html_signal_connection(movit::EffectChain *chain, LiveInputWrapper *live_input, CEFCapture *capture) { - return html_signal_connections; + html_signal_connections[chain].emplace_back(CEFSignalConnection { live_input, capture }); } #endif @@ -136,10 +127,20 @@ private: std::map signal_to_card_mapping; // Protected by . std::vector video_inputs; - std::vector> video_signal_connections; + struct VideoSignalConnection { + LiveInputWrapper *wrapper; + FFmpegCapture *source; + }; + std::unordered_map> + video_signal_connections; #ifdef HAVE_CEF std::vector html_inputs; - std::vector> html_signal_connections; + struct CEFSignalConnection { + LiveInputWrapper *wrapper; + CEFCapture *source; + }; + std::unordered_map> + html_signal_connections; #endif std::vector theme_menu; @@ -157,9 +158,9 @@ private: class LiveInputWrapper { public: // Note: is irrelevant for PixelFormat_8BitBGRA. - LiveInputWrapper(Theme *theme, movit::EffectChain *chain, bmusb::PixelFormat pixel_format, bool override_bounce, bool deinterlace); + LiveInputWrapper(Theme *theme, movit::EffectChain *chain, bmusb::PixelFormat pixel_format, bool override_bounce, bool deinterlace, bool user_connectable); - void connect_signal(int signal_num); // Must be called with the theme's lock held, since it accesses theme->input_state. + bool connect_signal(int signal_num); // Must be called with the theme's lock held, since it accesses theme->input_state. Returns false on error. void connect_signal_raw(int signal_num, const InputState &input_state); movit::Effect *get_effect() const { @@ -180,6 +181,7 @@ private: std::vector rgba_inputs; // Multiple ones if deinterlacing. Owned by the chain. movit::Effect *deinterlace_effect = nullptr; // Owned by the chain. bool deinterlace; + bool user_connectable; }; #endif // !defined(_THEME_H)