X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fencoder.h;h=ea356cec4ba05cead7b17e63f727644d77eb3f73;hb=f29219ed06d27dcae5e18b8b9c52dcf24554f188;hp=bed2c09882172f47cbd709e5ec7980db3c9f00fe;hpb=bb767c7e338414beee132af3e96829c1448e214b;p=dcpomatic.git diff --git a/src/lib/encoder.h b/src/lib/encoder.h index bed2c0988..ea356cec4 100644 --- a/src/lib/encoder.h +++ b/src/lib/encoder.h @@ -28,6 +28,9 @@ #include #include #include +extern "C" { +#include +} class FilmState; class Options; @@ -50,7 +53,7 @@ public: Encoder (boost::shared_ptr s, boost::shared_ptr o, Log* l); /** Called to indicate that a processing run is about to begin */ - virtual void process_begin () = 0; + virtual void process_begin (int64_t audio_channel_layout, AVSampleFormat audio_sample_format) = 0; /** Called with a frame of video. * @param i Video frame image. @@ -68,9 +71,12 @@ public: virtual void process_end () = 0; float current_frames_per_second () const; + bool skipping () const; + int last_frame () const; protected: - void frame_done (); + void frame_done (int n); + void frame_skipped (); /** FilmState of the film that we are encoding */ boost::shared_ptr _fs; @@ -79,9 +85,18 @@ protected: /** Log */ Log* _log; + /** 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 _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; + /** Index of the last frame to be processed */ + int _last_frame; }; #endif