summaryrefslogtreecommitdiff
path: root/src/lib/encoder.h
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2016-06-20 15:02:15 +0100
committerCarl Hetherington <cth@carlh.net>2016-06-20 15:02:15 +0100
commit795e5d916707da498acc7079ae1fb10aa6af6973 (patch)
treeb231beddbc88fd5578631b282ddb8ac3ddcdc697 /src/lib/encoder.h
parentcc08eda9243c746d8940259428e61cc90d31c873 (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.h10
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;