#include <boost/thread/mutex.hpp>
#include <list>
#include <stdint.h>
+extern "C" {
+#include <libavutil/samplefmt.h>
+}
class FilmState;
class Options;
Encoder (boost::shared_ptr<const FilmState> s, boost::shared_ptr<const Options> 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.
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<const FilmState> _fs;
/** 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<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;
+ /** Index of the last frame to be processed */
+ int _last_frame;
};
#endif