From: Christophe de Dinechin <dinechin@xxxxxxxxxx> The agent is the class ultimately responsible for the capture loop. This patch also gets rid of a global "agent" variable, reducing implicitly shared state. Signed-off-by: Christophe de Dinechin <dinechin@xxxxxxxxxx> --- src/concrete-agent.hpp | 4 ++++ src/spice-streaming-agent.cpp | 20 +++++++++----------- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/src/concrete-agent.hpp b/src/concrete-agent.hpp index 5bca23b..346ba6c 100644 --- a/src/concrete-agent.hpp +++ b/src/concrete-agent.hpp @@ -14,6 +14,9 @@ namespace spice { namespace streaming_agent { +class Stream; +class FrameLog; + struct ConcreteConfigureOption: ConfigureOption { ConcreteConfigureOption(const char *name, const char *value) @@ -33,6 +36,7 @@ public: void Register(Plugin& plugin) override; const ConfigureOption* Options() const override; void LoadPlugins(const std::string &directory); + void CaptureLoop(Stream &stream, FrameLog &frame_log); // pointer must remain valid void AddOption(const char *name, const char *value); FrameCapture *GetBestFrameCapture(const std::set<SpiceVideoCodecType>& codecs); diff --git a/src/spice-streaming-agent.cpp b/src/spice-streaming-agent.cpp index 9e643bf..1c5b6c1 100644 --- a/src/spice-streaming-agent.cpp +++ b/src/spice-streaming-agent.cpp @@ -41,8 +41,6 @@ using namespace spice::streaming_agent; -static ConcreteAgent agent; - namespace spice { namespace streaming_agent @@ -488,8 +486,8 @@ static void usage(const char *progname) exit(1); } -static void -do_capture(Stream &stream, const char *streamport, FrameLog &frame_log) + +void ConcreteAgent::CaptureLoop(Stream &stream, FrameLog &frame_log) { unsigned int frame_count = 0; while (!quit_requested) { @@ -507,7 +505,7 @@ do_capture(Stream &stream, const char *streamport, FrameLog &frame_log) syslog(LOG_INFO, "streaming starts now\n"); uint64_t time_last = 0; - std::unique_ptr<FrameCapture> capture(agent.GetBestFrameCapture(stream.client_codecs())); + std::unique_ptr<FrameCapture> capture(GetBestFrameCapture(stream.client_codecs())); if (!capture) { throw std::runtime_error("cannot find a suitable capture system"); } @@ -581,6 +579,7 @@ int main(int argc, char* argv[]) setlogmask(logmask); + ConcreteAgent agent; while ((opt = getopt_long(argc, argv, "hp:c:l:d", long_options, NULL)) != -1) { switch (opt) { case 0: @@ -618,19 +617,17 @@ int main(int argc, char* argv[]) } } - // register built-in plugins - MjpegPlugin::Register(&agent); - - agent.LoadPlugins(pluginsdir); - register_interrupts(); int ret = EXIT_SUCCESS; try { + // register built-in plugins + MjpegPlugin::Register(&agent); + agent.LoadPlugins(pluginsdir); Stream stream(streamport); FrameLog frame_log(log_filename, log_binary); X11CursorThread cursor_thread(stream); - do_capture(stream, streamport, frame_log); + agent.CaptureLoop(stream, frame_log); } catch (Error &err) { err.syslog(); @@ -640,6 +637,7 @@ int main(int argc, char* argv[]) syslog(LOG_ERR, "%s\n", err.what()); ret = EXIT_FAILURE; } + closelog(); return ret; } -- 2.13.5 (Apple Git-94) _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel