From 96f25981e914d27377d13cccdd733d9996130703 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Sun, 10 Sep 2023 22:56:51 +0200 Subject: Rearrange encoder. --- src/lib/j2k_encoder.h | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) (limited to 'src/lib/j2k_encoder.h') diff --git a/src/lib/j2k_encoder.h b/src/lib/j2k_encoder.h index 63228a6b8..94490f16a 100644 --- a/src/lib/j2k_encoder.h +++ b/src/lib/j2k_encoder.h @@ -32,6 +32,7 @@ #include "enum_indexed_vector.h" #include "event_history.h" #include "exception_store.h" +#include "types.h" #include "writer.h" #include #include @@ -45,9 +46,14 @@ class DCPVideo; class EncodeServerDescription; class Film; +class J2KEncoderThread; class Job; class PlayerVideo; +struct local_threads_created_and_destroyed; +struct remote_threads_created_and_destroyed; +struct frames_not_lost_when_threads_disappear; + /** @class J2KEncoder * @brief Class to manage encoding to J2K. @@ -76,22 +82,33 @@ public: boost::optional current_encoding_rate () const; int video_frames_enqueued () const; - void servers_list_changed (); + DCPVideo pop(); + void retry(DCPVideo frame); + void write(std::shared_ptr data, int index, Eyes eyes); private: - void frame_done (); + friend struct ::local_threads_created_and_destroyed; + friend struct ::remote_threads_created_and_destroyed; + friend struct ::frames_not_lost_when_threads_disappear; - void encoder_thread (boost::optional); + void frame_done (); void terminate_threads (); + void servers_list_changed (); + void remake_threads(int local, std::list servers); + /** Film that we are encoding */ std::shared_ptr _film; EventHistory _history; boost::mutex _threads_mutex; - std::shared_ptr _threads; + std::list> _threads; + /** true if we shouldn't make any more threads, even if remake_threads() + * or servers_list_changed() is called. + */ + bool _ending = false; mutable boost::mutex _queue_mutex; std::list _queue; -- cgit v1.2.3