X-Git-Url: https://main.carlh.net/gitweb/?p=dcpomatic.git;a=blobdiff_plain;f=src%2Flib%2Fhints.h;h=6553593a06e761da7b908ce1949f5dc3fc06fa58;hp=b5a26998def529d8131d6c8f8c9c8b535baca781;hb=cd6c6a693f19fcaa6c75ed60f48a54a8cae51352;hpb=ce058471aa9995adac968cecc205f5a4319f449e diff --git a/src/lib/hints.h b/src/lib/hints.h index b5a26998d..6553593a0 100644 --- a/src/lib/hints.h +++ b/src/lib/hints.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2016-2020 Carl Hetherington + Copyright (C) 2016-2021 Carl Hetherington This file is part of DCP-o-matic. @@ -18,23 +18,28 @@ */ + +#include "audio_analyser.h" #include "signaller.h" #include "player_text.h" #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,12 +49,23 @@ public: 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 text (PlayerText text, TextType type, dcpomatic::DCPTimePeriod period); - boost::shared_ptr film () const; + 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_interop (); void check_big_font_files (); void check_few_audio_channels (); void check_upmixers (); @@ -57,19 +73,39 @@ private: 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 (); - void check_loudness (); + 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::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; + + AudioAnalyser _analyser; - bool _long_ccap; - bool _overlap_ccap; - bool _too_many_ccap_lines; - boost::optional _last; + 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; + + bool _disable_audio_analysis = false; };