diff options
| author | Carl Hetherington <cth@carlh.net> | 2018-07-27 15:19:30 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2018-07-27 15:19:30 +0100 |
| commit | 4843bf7b6820fe9f027699cf30c41804e714fbac (patch) | |
| tree | 443970dc9b7a865b4b8130ba5115d28f00ad8b54 /src/lib | |
| parent | c8b10d5eac6006b62d2a7add9da0c6206b72899b (diff) | |
Check for long CCAP lines and too many CCAP lines.
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/hints.cc | 26 | ||||
| -rw-r--r-- | src/lib/hints.h | 3 | ||||
| -rw-r--r-- | src/lib/util.h | 4 |
3 files changed, 30 insertions, 3 deletions
diff --git a/src/lib/hints.cc b/src/lib/hints.cc index 77b10da15..e11312eb0 100644 --- a/src/lib/hints.cc +++ b/src/lib/hints.cc @@ -54,6 +54,8 @@ Hints::Hints (weak_ptr<const Film> film) : _film (film) , _thread (0) , _long_ccap (false) + , _overlap_ccap (false) + , _too_many_ccap_lines (false) { } @@ -84,6 +86,8 @@ Hints::start () { stop_thread (); _long_ccap = false; + _overlap_ccap = false; + _too_many_ccap_lines = false; _thread = new boost::thread (bind(&Hints::thread, this)); } @@ -283,10 +287,26 @@ Hints::text (PlayerText text, TextType type, DCPTimePeriod period) return; } + int lines = text.text.size(); BOOST_FOREACH (StringText i, text.text) { - if (!_long_ccap && i.text().length() > 30) { - _long_ccap = true; - hint (_("Some of your closed captions have lines longer than 30 characters, so they will probably be word-wrapped.")); + if (i.text().length() > CLOSED_CAPTION_LENGTH) { + ++lines; + if (!_long_ccap) { + _long_ccap = true; + hint (String::compose(_("Some of your closed captions have lines longer than %1 characters, so they will probably be word-wrapped."), CLOSED_CAPTION_LENGTH)); + } } } + + if (!_too_many_ccap_lines && lines > CLOSED_CAPTION_LINES) { + hint (String::compose(_("Some of your closed captions span more than %1 lines, so they will be truncated."), CLOSED_CAPTION_LINES)); + _too_many_ccap_lines = true; + } + + if (!_overlap_ccap && _last && _last->overlap(period)) { + _overlap_ccap = true; + hint (_("You have overlapping closed captions, which is not allowed.")); + } + + _last = period; } diff --git a/src/lib/hints.h b/src/lib/hints.h index ad66fb472..6ee398c88 100644 --- a/src/lib/hints.h +++ b/src/lib/hints.h @@ -52,4 +52,7 @@ private: boost::thread* _thread; bool _long_ccap; + bool _overlap_ccap; + bool _too_many_ccap_lines; + boost::optional<DCPTimePeriod> _last; }; diff --git a/src/lib/util.h b/src/lib/util.h index 5ca198ebb..d6fddcdda 100644 --- a/src/lib/util.h +++ b/src/lib/util.h @@ -57,6 +57,10 @@ namespace dcp { #define TEXT_FONT_ID "font" /** Largest KDM size (in bytes) that will be accepted */ #define MAX_KDM_SIZE (256 * 1024) +/** Number of lines that closed caption viewers will display */ +#define CLOSED_CAPTION_LINES 3 +/** Maximum line length of closed caption viewers */ +#define CLOSED_CAPTION_LENGTH 30 extern std::string program_name; extern bool is_batch_converter; |
