X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fencoder.h;h=b12bd0d48710291ce9e2ae8745137e8ac21bf817;hb=a605b22381ee47d2737307e0b61e3423b020547b;hp=20ec8fb162b04f04e0a0ef2496134bc7d9377520;hpb=42410ff820cf885a4b26c24c6c5c9d759dadbf2f;p=dcpomatic.git diff --git a/src/lib/encoder.h b/src/lib/encoder.h index 20ec8fb16..b12bd0d48 100644 --- a/src/lib/encoder.h +++ b/src/lib/encoder.h @@ -32,6 +32,8 @@ extern "C" { #include } #include "util.h" +#include "video_sink.h" +#include "audio_sink.h" class Options; class Image; @@ -49,45 +51,43 @@ class Film; * some way and write it to disk. */ -class Encoder +class Encoder : public VideoSink, public AudioSink { public: Encoder (boost::shared_ptr f, boost::shared_ptr o); virtual ~Encoder () {} /** Called to indicate that a processing run is about to begin */ - virtual void process_begin (int64_t audio_channel_layout) = 0; + virtual void process_begin () {} /** Call with a frame of video. * @param i Video frame image. - * @param f Frame number within the film's source. * @param s A subtitle that should be on this frame, or 0. */ - void process_video (boost::shared_ptr i, SourceFrame f, boost::shared_ptr s); + void process_video (boost::shared_ptr i, boost::shared_ptr s); /** Call with some audio data */ - void process_audio (boost::shared_ptr, int64_t); + void process_audio (boost::shared_ptr); /** Called when a processing run has finished */ - virtual void process_end () = 0; + virtual void process_end () {} float current_frames_per_second () const; bool skipping () const; - SourceFrame last_frame () const; + SourceFrame video_frame () const; protected: /** Called with a frame of video. * @param i Video frame image. - * @param f Frame number within the film's source. * @param s A subtitle that should be on this frame, or 0. */ - virtual void do_process_video (boost::shared_ptr i, SourceFrame f, boost::shared_ptr s) = 0; + virtual void do_process_video (boost::shared_ptr i, boost::shared_ptr s) = 0; /** Called with some audio data */ - virtual void do_process_audio (boost::shared_ptr) = 0; + virtual void do_process_audio (boost::shared_ptr) = 0; - void frame_done (SourceFrame n); + void frame_done (); void frame_skipped (); /** Film that we are encoding */ @@ -105,8 +105,11 @@ protected: static int const _history_size; /** true if the last frame we processed was skipped (because it was already done) */ bool _just_skipped; - /** Source index of the last frame to be processed */ - SourceFrame _last_frame; + + /** Number of video frames received so far */ + SourceFrame _video_frame; + /** Number of audio frames received so far */ + int64_t _audio_frame; }; #endif