Attempt to tidy up internal APIs slightly.
[dcpomatic.git] / src / lib / encoder.h
index b188e3be304ac4f8d3a04985cdd7218758d203f7..27ae64aac589ba577578fb874fcafdffe8557b40 100644 (file)
@@ -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>);
@@ -61,7 +62,7 @@ public:
        void begin ();
 
        /** Called to pass a bit of video to be encoded as the next DCP frame */
-       void encode (boost::shared_ptr<PlayerVideo> f);
+       void encode (boost::shared_ptr<PlayerVideo> f, DCPTime time);
 
        /** Called when a processing run has finished */
        void end ();
@@ -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;
@@ -103,6 +107,7 @@ private:
        Waker _waker;
 
        boost::shared_ptr<PlayerVideo> _last_player_video;
+       boost::optional<DCPTime> _last_player_video_time;
 
        boost::signals2::scoped_connection _server_found_connection;
 };