X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fhints.h;h=b29b1c0fc49754c12d3f8fd49d84a002b3ab04a0;hb=e1aac965a70ad8f50716325ef31a1829161dc6d3;hp=3a6850860c54da63110fc9c1ce4ac92a374449e6;hpb=09d5906f44907aab5afb41ce2da887550c0011a8;p=dcpomatic.git diff --git a/src/lib/hints.h b/src/lib/hints.h index 3a6850860..b29b1c0fc 100644 --- a/src/lib/hints.h +++ b/src/lib/hints.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2016 Carl Hetherington + Copyright (C) 2016-2021 Carl Hetherington This file is part of DCP-o-matic. @@ -18,10 +18,94 @@ */ -#include + +#include "audio_analyser.h" +#include "signaller.h" +#include "player_text.h" +#include "dcp_text_track.h" +#include "dcpomatic_time.h" +#include "weak_film.h" +#include +#include #include #include + class Film; +class Writer; + + +class Hints : public Signaller, public ExceptionStore, public WeakConstFilm +{ +public: + explicit Hints (std::weak_ptr film); + ~Hints (); + + void start (); + + boost::signals2::signal Hint; + boost::signals2::signal Progress; + boost::signals2::signal Pulse; + boost::signals2::signal Finished; + + /* For tests only */ + void join (); + void disable_audio_analysis () { + _disable_audio_analysis = true; + } + +private: + friend struct hint_subtitle_too_early; + + void thread (); + void hint (std::string h); + void audio (std::shared_ptr audio, dcpomatic::DCPTime time); + 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_certificates (); + void check_interop (); + 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_4k_3d (); + void check_speed_up (); + void check_vob (); + void check_3d_in_2d (); + bool check_loudness (); + void check_ffec_and_ffmc_in_smpte_feature (); + void check_out_of_range_markers (); + void check_text_languages (); + void check_audio_language (); + + 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; + + AudioAnalyser _analyser; + + bool _long_ccap = false; + bool _overlap_ccap = false; + bool _too_many_ccap_lines = false; + boost::optional _last_ccap; + + bool _early_subtitle = false; + bool _short_subtitle = false; + bool _subtitles_too_close = false; + bool _too_many_subtitle_lines = false; + bool _long_subtitle = false; + bool _very_long_subtitle = false; + boost::optional _last_subtitle; + + boost::atomic _stop; -std::vector get_hints (boost::shared_ptr film); + bool _disable_audio_analysis = false; +};