X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fmatcher.h;h=aab6adad96c7a863efd45dc2afd63f8beb42182d;hb=4ff5c21a9c3c2ea8ab3a253ef5658e3ee91e0bea;hp=60bb8743226078628adfb7246fe2a3922c83a7b3;hpb=422341d1cb6bc8cbb6be76eac239c40cb4061c79;p=dcpomatic.git diff --git a/src/lib/matcher.h b/src/lib/matcher.h index 60bb87432..aab6adad9 100644 --- a/src/lib/matcher.h +++ b/src/lib/matcher.h @@ -21,15 +21,22 @@ #include "processor.h" #include "ffmpeg_compatibility.h" -class Matcher : public AudioVideoProcessor +class Matcher : public Processor, public TimedAudioSink, public TimedVideoSink, public AudioSource, public VideoSource { public: - Matcher (Log* log, int sample_rate, float frames_per_second); - void process_video (boost::shared_ptr i, bool, boost::shared_ptr s); - void process_audio (boost::shared_ptr); + Matcher (boost::shared_ptr log, int sample_rate, float frames_per_second); + + void set_audio_starts_with_video (bool); + + void process_video (boost::shared_ptr i, bool, boost::shared_ptr s, double); + void process_audio (boost::shared_ptr, double); void process_end (); private: + void fix_start (double); + void match (double); + void repeat_last_video (); + int _sample_rate; float _frames_per_second; int _video_frames; @@ -37,4 +44,26 @@ private: boost::optional _pixel_format; boost::optional _size; boost::optional _channels; + + struct AudioRecord { + AudioRecord (boost::shared_ptr a, double t) + : audio (a) + , time (t) + {} + + boost::shared_ptr audio; + double time; + }; + + std::list _pending_audio; + + boost::optional _first_input; + boost::optional _first_video; + boost::shared_ptr _last_image; + boost::shared_ptr _last_subtitle; + + bool _had_first_video; + bool _had_first_audio; + + bool _audio_starts_with_video; };