-
- void frame_done ();
- void frame_skipped ();
-
- /** Film that we are encoding */
- boost::shared_ptr<const Film> _film;
- /** Options */
- boost::shared_ptr<const EncodeOptions> _opt;
-
- /** Mutex for _time_history, _just_skipped and _last_frame */
- mutable boost::mutex _history_mutex;
- /** List of the times of completion of the last _history_size frames;
- first is the most recently completed.
- */
- std::list<struct timeval> _time_history;
- /** Number of frames that we should keep history for */
- static int const _history_size;
- /** true if the last frame we processed was skipped (because it was already done) */
- bool _just_skipped;
-
- /** Number of video frames received so far */
- SourceFrame _video_frame;
- /** Number of audio frames received so far */
- int64_t _audio_frame;
-
-private:
- void close_sound_files ();
- void write_audio (boost::shared_ptr<const AudioBuffers> audio);
-
- void encoder_thread (ServerDescription *);
- void terminate_worker_threads ();
- void link (std::string, std::string) const;
-
- void writer_thread ();
- void terminate_writer_thread ();
-
-#if HAVE_SWRESAMPLE
- SwrContext* _swr_context;
-#endif
-
- /** List of links that we need to create when all frames have been processed;
- * such that we need to call link (first, second) for each member of this list.
- * In other words, `first' is a `real' frame and `second' should be a link to `first'.
- */
- std::list<std::pair<int, int> > _links_required;
-
- std::vector<SNDFILE*> _sound_files;
- int64_t _audio_frames_written;
-
- boost::optional<int> _last_real_frame;
- bool _terminate_encoder;
- std::list<boost::shared_ptr<DCPVideoFrame> > _encode_queue;
- std::list<boost::thread *> _worker_threads;
- mutable boost::mutex _worker_mutex;
- boost::condition _worker_condition;
-
- boost::thread* _writer_thread;
- bool _terminate_writer;
- std::list<std::pair<boost::shared_ptr<EncodedData>, int> > _write_queue;
- mutable boost::mutex _writer_mutex;
- boost::condition _writer_condition;