+ void audio (std::shared_ptr<AudioBuffers> audio, dcpomatic::DCPTime time);
+ void text (PlayerText text, TextType type, boost::optional<DCPTextTrack> 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> _writer;
+
+ AudioAnalyser _analyser;
+
+ bool _long_ccap = false;
+ bool _overlap_ccap = false;
+ bool _too_many_ccap_lines = false;
+ boost::optional<dcpomatic::DCPTimePeriod> _last_ccap;