X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fhints.h;h=d070dc2014c3e707b6362bc6fc2d64af094d34b5;hb=dd9be86db6cde0afa5da0d1d1ac43b42e05dca26;hp=b74b8bd71df42843909cba2ff98210f2e647ff8d;hpb=a2ceaa313a2b8ba28516c935f7f8b82d69957b77;p=dcpomatic.git diff --git a/src/lib/hints.h b/src/lib/hints.h index b74b8bd71..d070dc201 100644 --- a/src/lib/hints.h +++ b/src/lib/hints.h @@ -23,18 +23,21 @@ #include "types.h" #include "dcp_text_track.h" #include "dcpomatic_time.h" -#include +#include "weak_film.h" #include #include #include #include + class Film; +class Writer; + -class Hints : public Signaller, public ExceptionStore +class Hints : public Signaller, public ExceptionStore, public WeakConstFilm { public: - explicit Hints (boost::weak_ptr film); + explicit Hints (std::weak_ptr film); ~Hints (); void start (); @@ -44,18 +47,49 @@ public: boost::signals2::signal Pulse; boost::signals2::signal Finished; + /* For tests only */ + void join (); + private: + friend struct hint_subtitle_too_early; + void thread (); void hint (std::string h); - void text (PlayerText text, TextType type, dcpomatic::DCPTimePeriod period); + void text (PlayerText text, TextType type, boost::optional track, dcpomatic::DCPTimePeriod period); + void closed_caption (PlayerText text, dcpomatic::DCPTimePeriod period); + void open_subtitle (PlayerText text, dcpomatic::DCPTimePeriod period); + + void check_big_font_files (); + void check_few_audio_channels (); + void check_upmixers (); + void check_incorrect_container (); + void check_unusual_container (); + void check_high_j2k_bandwidth (); + void check_frame_rate (); + void check_speed_up (); + void check_vob (); + void check_3d_in_2d (); + void check_loudness (); + void check_ffec_and_ffmc_in_smpte_feature (); - boost::weak_ptr _film; boost::thread _thread; + /** This is used to make a partial DCP containing only the subtitles and closed captions that + * our final DCP will have. This means we can see how big the files will be and warn if they + * will be too big. + */ + std::shared_ptr _writer; bool _long_ccap; bool _overlap_ccap; bool _too_many_ccap_lines; - boost::optional _last; + boost::optional _last_ccap; + + bool _early_subtitle; + bool _short_subtitle; + bool _subtitles_too_close; + bool _too_many_subtitle_lines; + bool _long_subtitle; + boost::optional _last_subtitle; boost::atomic _stop; };