diff options
| author | Carl Hetherington <cth@carlh.net> | 2016-06-20 15:02:15 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2016-06-20 15:02:15 +0100 |
| commit | 795e5d916707da498acc7079ae1fb10aa6af6973 (patch) | |
| tree | b231beddbc88fd5578631b282ddb8ac3ddcdc697 /src/lib/encoder.h | |
| parent | cc08eda9243c746d8940259428e61cc90d31c873 (diff) | |
Encoder shutdown fixes.
Two fixes here; prevent the servers-list-changed callback being
called when Encoder is being destroyed, and stop ~Encoder throwing
exceptions.
I'm not sure if the catch (...) in ~Encoder will hide problems
that we should be handling, but I think by the time ~Encoder
is happening we'll already have seen any exceptions that we
need to report.
Diffstat (limited to 'src/lib/encoder.h')
| -rw-r--r-- | src/lib/encoder.h | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/src/lib/encoder.h b/src/lib/encoder.h index b188e3be3..5816fe12f 100644 --- a/src/lib/encoder.h +++ b/src/lib/encoder.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2012-2015 Carl Hetherington <cth@carlh.net> + Copyright (C) 2012-2016 Carl Hetherington <cth@carlh.net> This file is part of DCP-o-matic. @@ -34,6 +34,7 @@ #include <boost/thread.hpp> #include <boost/optional.hpp> #include <boost/signals2.hpp> +#include <boost/enable_shared_from_this.hpp> #include <list> #include <stdint.h> @@ -51,7 +52,7 @@ class PlayerVideo; * the work around threads and encoding servers. */ -class Encoder : public boost::noncopyable, public ExceptionStore +class Encoder : public boost::noncopyable, public ExceptionStore, public boost::enable_shared_from_this<Encoder> { public: Encoder (boost::shared_ptr<const Film>, boost::shared_ptr<Writer>); @@ -69,13 +70,16 @@ public: float current_encoding_rate () const; int video_frames_enqueued () const; + void servers_list_changed (); + private: + static void call_servers_list_changed (boost::weak_ptr<Encoder> encoder); + void frame_done (); void encoder_thread (boost::optional<EncodeServerDescription>); void terminate_threads (); - void servers_list_changed (); /** Film that we are encoding */ boost::shared_ptr<const Film> _film; |
