Merge 1.0 in.
[dcpomatic.git] / src / lib / encoder.h
index a866a77f19c43998e0f96572e5a71a80d657861e..e9b30df9e558cbf60c00f54e612869d7e2887b09 100644 (file)
@@ -66,7 +66,7 @@ public:
         *  @param i Video frame image.
         *  @param same true if i is the same as the last time we were called.
         */
-       void process_video (boost::shared_ptr<const Image> i, Eyes eyes, bool same);
+       void process_video (boost::shared_ptr<const Image> i, Eyes eyes, ColourConversion, bool same);
 
        /** Call with some audio data */
        void process_audio (boost::shared_ptr<const AudioBuffers>);
@@ -77,19 +77,29 @@ public:
        float current_encoding_rate () const;
        int video_frames_out () const;
 
+       enum State {
+               TRANSCODING,
+               HASHING
+       };
+
+       State state () const {
+               boost::mutex::scoped_lock lm (_state_mutex);
+               return _state;
+       }
+
 private:
        
        void frame_done ();
        
-       void encoder_thread (ServerDescription *);
+       void encoder_thread (boost::optional<ServerDescription>);
        void terminate_threads ();
 
        /** Film that we are encoding */
        boost::shared_ptr<const Film> _film;
        boost::shared_ptr<Job> _job;
 
-       /** Mutex for _time_history and _last_frame */
-       mutable boost::mutex _history_mutex;
+       /** Mutex for _time_history, _last_frame and _state */
+       mutable boost::mutex _state_mutex;
        /** List of the times of completion of the last _history_size frames;
            first is the most recently completed.
        */
@@ -99,6 +109,7 @@ private:
 
        /** Number of video frames written for the DCP so far */
        int _video_frames_out;
+       State _state;
 
        bool _have_a_real_frame[EYES_COUNT];
        bool _terminate;