summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2018-07-27 15:19:30 +0100
committerCarl Hetherington <cth@carlh.net>2018-07-27 15:19:30 +0100
commit4843bf7b6820fe9f027699cf30c41804e714fbac (patch)
tree443970dc9b7a865b4b8130ba5115d28f00ad8b54 /src/lib
parentc8b10d5eac6006b62d2a7add9da0c6206b72899b (diff)
Check for long CCAP lines and too many CCAP lines.
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/hints.cc26
-rw-r--r--src/lib/hints.h3
-rw-r--r--src/lib/util.h4
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;