#include "types.h"
#include "dcp_text_track.h"
#include "dcpomatic_time.h"
-#include <boost/weak_ptr.hpp>
+#include "weak_film.h"
#include <boost/signals2.hpp>
#include <boost/atomic.hpp>
#include <vector>
#include <string>
+
class Film;
+class Writer;
+
-class Hints : public Signaller, public ExceptionStore
+class Hints : public Signaller, public ExceptionStore, public WeakConstFilm
{
public:
- explicit Hints (boost::weak_ptr<const Film> film);
+ explicit Hints (std::weak_ptr<const Film> film);
~Hints ();
void start ();
boost::signals2::signal<void (void)> Pulse;
boost::signals2::signal<void (void)> 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);
- boost::shared_ptr<const Film> film () const;
+ 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_big_font_files ();
void check_few_audio_channels ();
void check_vob ();
void check_3d_in_2d ();
void check_loudness ();
+ void check_ffec_and_ffmc_in_smpte_feature ();
- boost::weak_ptr<const Film> _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> _writer;
bool _long_ccap;
bool _overlap_ccap;
bool _too_many_ccap_lines;
- boost::optional<dcpomatic::DCPTimePeriod> _last;
+ boost::optional<dcpomatic::DCPTimePeriod> _last_ccap;
+
+ bool _early_subtitle;
+ bool _short_subtitle;
+ bool _subtitles_too_close;
+ bool _too_many_subtitle_lines;
+ bool _long_subtitle;
+ boost::optional<dcpomatic::DCPTimePeriod> _last_subtitle;
boost::atomic<bool> _stop;
};