summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2017-10-24 21:11:53 +0100
committerCarl Hetherington <cth@carlh.net>2017-10-24 21:11:53 +0100
commit32c25edb97465c3b159fe8eed582596ffa7e8ee5 (patch)
tree36c28ac34e83869364d20f81583e3e2542e14eef /src
parentca6c347327c5384554cf6665452d0487aea62b54 (diff)
Fix (and inform about) video content that is not placed on a frame boundary.
Diffstat (limited to 'src')
-rw-r--r--src/lib/content_factory.cc22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/lib/content_factory.cc b/src/lib/content_factory.cc
index e5e73f890..8aa432b09 100644
--- a/src/lib/content_factory.cc
+++ b/src/lib/content_factory.cc
@@ -40,6 +40,8 @@
#include <dcp/smpte_subtitle_asset.h>
#include <boost/algorithm/string.hpp>
+#include "i18n.h"
+
using std::string;
using std::list;
using boost::shared_ptr;
@@ -97,6 +99,26 @@ content_factory (shared_ptr<const Film> film, cxml::NodePtr node, int version, l
content.reset (new AtmosMXFContent (film, node, version));
}
+ /* See if this content should be nudged to start on a video frame */
+ DCPTime const old_pos = content->position();
+ content->set_position(old_pos);
+ if (old_pos != content->position()) {
+ string note = _("Your project contains video content that was not aligned to a frame boundary.");
+ note += " ";
+ if (old_pos < content->position()) {
+ note += String::compose(
+ _("The file %1 has been moved %2 milliseconds later."),
+ content->path_summary(), DCPTime(content->position() - old_pos).seconds() * 1000
+ );
+ } else {
+ note += String::compose(
+ _("The file %1 has been moved %2 milliseconds earlier."),
+ content->path_summary(), DCPTime(content->position() - old_pos).seconds() * 1000
+ );
+ }
+ notes.push_back (note);
+ }
+
return content;
}