X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fencoder.h;h=b12bd0d48710291ce9e2ae8745137e8ac21bf817;hb=a605b22381ee47d2737307e0b61e3423b020547b;hp=590b8aaa9a25e8189102d5105fbefc6a599507bc;hpb=09a95eca971ddd2ea75cd615e7ef2b997d52b690;p=dcpomatic.git diff --git a/src/lib/encoder.h b/src/lib/encoder.h index 590b8aaa9..b12bd0d48 100644 --- a/src/lib/encoder.h +++ b/src/lib/encoder.h @@ -31,6 +31,9 @@ extern "C" { #include } +#include "util.h" +#include "video_sink.h" +#include "audio_sink.h" class Options; class Image; @@ -48,36 +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 () {} - /** Called with a frame of video. + /** Call with a frame of video. * @param i Video frame image. - * @param f Frame number within the film. * @param s A subtitle that should be on this frame, or 0. */ - virtual void process_video (boost::shared_ptr i, int f, boost::shared_ptr s) = 0; + void process_video (boost::shared_ptr i, boost::shared_ptr s); - /** Called with some audio data. - * @param d Array of pointers to floating point sample data for each channel. - * @param s Number of frames (ie number of samples in each channel) - */ - virtual void process_audio (boost::shared_ptr) = 0; + /** Call with some audio data */ + 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; - int last_frame () const; + SourceFrame video_frame () const; protected: - void frame_done (int n); + + /** Called with a frame of video. + * @param i Video frame image. + * @param s A subtitle that should be on this frame, or 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; + + void frame_done (); void frame_skipped (); /** Film that we are encoding */ @@ -95,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; - /** Index of the last frame to be processed */ - int _last_frame; + + /** Number of video frames received so far */ + SourceFrame _video_frame; + /** Number of audio frames received so far */ + int64_t _audio_frame; }; #endif