diff options
| author | Carl Hetherington <cth@carlh.net> | 2017-05-10 11:54:19 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2017-05-10 11:54:19 +0100 |
| commit | d8ea1796f34ff894b148a0af78c0a547e0496ee1 (patch) | |
| tree | 2a3177217dee39c1a4dbe795c21369236e7a5533 /src/lib/encoder.h | |
| parent | 7f40b703e8a83f07a1c8bffb45cd40ebcc238418 (diff) | |
Rename some classes.
Diffstat (limited to 'src/lib/encoder.h')
| -rw-r--r-- | src/lib/encoder.h | 95 |
1 files changed, 23 insertions, 72 deletions
diff --git a/src/lib/encoder.h b/src/lib/encoder.h index 7e9bd497a..79ad0ab44 100644 --- a/src/lib/encoder.h +++ b/src/lib/encoder.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2012-2016 Carl Hetherington <cth@carlh.net> + Copyright (C) 2012-2017 Carl Hetherington <cth@carlh.net> This file is part of DCP-o-matic. @@ -21,89 +21,40 @@ #ifndef DCPOMATIC_ENCODER_H #define DCPOMATIC_ENCODER_H -/** @file src/encoder.h - * @brief Encoder class. - */ - -#include "util.h" -#include "cross.h" -#include "event_history.h" -#include "exception_store.h" -#include <boost/shared_ptr.hpp> -#include <boost/thread/mutex.hpp> -#include <boost/thread/condition.hpp> -#include <boost/thread.hpp> -#include <boost/optional.hpp> -#include <boost/signals2.hpp> -#include <boost/enable_shared_from_this.hpp> -#include <list> -#include <stdint.h> +#include "types.h" +#include "player_subtitles.h" +#include <boost/weak_ptr.hpp> class Film; -class EncodeServerDescription; -class DCPVideo; -class Writer; +class Encoder; +class Player; class Job; class PlayerVideo; +class AudioBuffers; -/** @class Encoder - * @brief Class to manage encoding to JPEG2000. - * - * This class keeps a queue of frames to be encoded and distributes - * the work around threads and encoding servers. - */ - -class Encoder : public boost::noncopyable, public ExceptionStore, public boost::enable_shared_from_this<Encoder> +/** @class Encoder */ +class Encoder : public boost::noncopyable { public: - Encoder (boost::shared_ptr<const Film> film, boost::shared_ptr<Writer> writer); - ~Encoder (); - - /** Called to indicate that a processing run is about to begin */ - void begin (); - - /** Called to pass a bit of video to be encoded as the next DCP frame */ - void encode (boost::shared_ptr<PlayerVideo> pv, DCPTime time); - - /** Called when a processing run has finished */ - void end (); - - float current_encoding_rate () const; - int video_frames_enqueued () const; - - void servers_list_changed (); + Encoder (boost::shared_ptr<const Film> film, boost::weak_ptr<Job> job); + virtual ~Encoder () {} -private: + virtual void go () = 0; - static void call_servers_list_changed (boost::weak_ptr<Encoder> encoder); + /** @return the current frame rate over the last short while */ + virtual float current_rate () const = 0; + /** @return the number of frames that are done */ + virtual Frame frames_done () const = 0; + virtual bool finishing () const = 0; - void frame_done (); +protected: + virtual void video (boost::shared_ptr<PlayerVideo>, DCPTime) = 0; + virtual void audio (boost::shared_ptr<AudioBuffers>, DCPTime) = 0; + virtual void subtitle (PlayerSubtitles, DCPTimePeriod) = 0; - void encoder_thread (boost::optional<EncodeServerDescription>); - void terminate_threads (); - - /** Film that we are encoding */ boost::shared_ptr<const Film> _film; - - EventHistory _history; - - /** Mutex for _threads */ - mutable boost::mutex _threads_mutex; - std::list<boost::thread *> _threads; - mutable boost::mutex _queue_mutex; - std::list<boost::shared_ptr<DCPVideo> > _queue; - /** condition to manage thread wakeups when we have nothing to do */ - boost::condition _empty_condition; - /** condition to manage thread wakeups when we have too much to do */ - boost::condition _full_condition; - - boost::shared_ptr<Writer> _writer; - Waker _waker; - - boost::shared_ptr<PlayerVideo> _last_player_video; - boost::optional<DCPTime> _last_player_video_time; - - boost::signals2::scoped_connection _server_found_connection; + boost::weak_ptr<Job> _job; + boost::shared_ptr<Player> _player; }; #endif |
