summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2018-11-21 22:25:43 +0000
committerCarl Hetherington <cth@carlh.net>2018-11-21 22:25:43 +0000
commitfe8251bb73765b459042b0fa841dae2d440487fd (patch)
tree9a8cbd162915c2e6e4cf868cfc0321bfb1a44ffd /src/lib
parentf67bc45820b4e56f90eecb97ba3b7762c119f9b5 (diff)
Remove Film pointer from clone().
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/content.cc4
-rw-r--r--src/lib/content.h2
-rw-r--r--src/lib/content_factory.cc42
-rw-r--r--src/lib/content_factory.h2
-rw-r--r--src/lib/playlist.cc47
5 files changed, 50 insertions, 47 deletions
diff --git a/src/lib/content.cc b/src/lib/content.cc
index 5139eb4cc..11bf63f11 100644
--- a/src/lib/content.cc
+++ b/src/lib/content.cc
@@ -270,7 +270,7 @@ Content::set_trim_end (ContentTime t)
shared_ptr<Content>
-Content::clone (shared_ptr<const Film> film) const
+Content::clone () const
{
/* This is a bit naughty, but I can't think of a compelling reason not to do it ... */
xmlpp::Document doc;
@@ -279,7 +279,7 @@ Content::clone (shared_ptr<const Film> film) const
/* notes is unused here (we assume) */
list<string> notes;
- return content_factory (film, cxml::NodePtr(new cxml::Node(node)), Film::current_state_version, notes);
+ return content_factory (cxml::NodePtr(new cxml::Node(node)), Film::current_state_version, notes);
}
string
diff --git a/src/lib/content.h b/src/lib/content.h
index c6fa2c9f4..47f29cb79 100644
--- a/src/lib/content.h
+++ b/src/lib/content.h
@@ -97,7 +97,7 @@ public:
*/
virtual std::list<DCPTime> reel_split_points () const;
- boost::shared_ptr<Content> clone (boost::shared_ptr<const Film> film) const;
+ boost::shared_ptr<Content> clone () const;
void set_paths (std::vector<boost::filesystem::path> paths);
diff --git a/src/lib/content_factory.cc b/src/lib/content_factory.cc
index 934677c66..30f02546c 100644
--- a/src/lib/content_factory.cc
+++ b/src/lib/content_factory.cc
@@ -56,7 +56,7 @@ using boost::optional;
* @return Content object, or 0 if no content was recognised in the XML.
*/
shared_ptr<Content>
-content_factory (shared_ptr<const Film> film, cxml::ConstNodePtr node, int version, list<string>& notes)
+content_factory (cxml::ConstNodePtr node, int version, list<string>& notes)
{
string const type = node->string_child ("Type");
@@ -98,46 +98,6 @@ content_factory (shared_ptr<const Film> film, cxml::ConstNodePtr node, int versi
content.reset (new AtmosMXFContent (node, version));
}
- /* See if this content should be nudged to start on a video frame */
- DCPTime const old_pos = content->position();
- content->set_position(film, 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);
- }
-
- /* ...or have a start trim which is an integer number of frames */
- ContentTime const old_trim = content->trim_start();
- content->set_trim_start(old_trim);
- if (old_trim != content->trim_start()) {
- string note = _("Your project contains video content whose trim was not aligned to a frame boundary.");
- note += " ";
- if (old_trim < content->trim_start()) {
- note += String::compose(
- _("The file %1 has been trimmed by %2 milliseconds more."),
- content->path_summary(), ContentTime(content->trim_start() - old_trim).seconds() * 1000
- );
- } else {
- note += String::compose(
- _("The file %1 has been trimmed by %2 milliseconds less."),
- content->path_summary(), ContentTime(old_trim - content->trim_start()).seconds() * 1000
- );
- }
- notes.push_back (note);
- }
-
return content;
}
diff --git a/src/lib/content_factory.h b/src/lib/content_factory.h
index af77d9358..2522ad017 100644
--- a/src/lib/content_factory.h
+++ b/src/lib/content_factory.h
@@ -28,5 +28,5 @@
class Film;
class Content;
-extern boost::shared_ptr<Content> content_factory (boost::shared_ptr<const Film>, cxml::ConstNodePtr, int, std::list<std::string> &);
+extern boost::shared_ptr<Content> content_factory (cxml::ConstNodePtr, int, std::list<std::string> &);
extern std::list<boost::shared_ptr<Content> > content_factory (boost::filesystem::path);
diff --git a/src/lib/playlist.cc b/src/lib/playlist.cc
index 0e6497495..c10235f9b 100644
--- a/src/lib/playlist.cc
+++ b/src/lib/playlist.cc
@@ -31,6 +31,7 @@
#include "config.h"
#include "util.h"
#include "digester.h"
+#include "compose.hpp"
#include <libcxml/cxml.h>
#include <libxml++/libxml++.h>
#include <boost/shared_ptr.hpp>
@@ -185,7 +186,49 @@ void
Playlist::set_from_xml (shared_ptr<const Film> film, cxml::ConstNodePtr node, int version, list<string>& notes)
{
BOOST_FOREACH (cxml::NodePtr i, node->node_children ("Content")) {
- _content.push_back (content_factory (film, i, version, notes));
+ shared_ptr<Content> content = content_factory (i, version, notes);
+
+ /* See if this content should be nudged to start on a video frame */
+ DCPTime const old_pos = content->position();
+ content->set_position(film, 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);
+ }
+
+ /* ...or have a start trim which is an integer number of frames */
+ ContentTime const old_trim = content->trim_start();
+ content->set_trim_start(old_trim);
+ if (old_trim != content->trim_start()) {
+ string note = _("Your project contains video content whose trim was not aligned to a frame boundary.");
+ note += " ";
+ if (old_trim < content->trim_start()) {
+ note += String::compose(
+ _("The file %1 has been trimmed by %2 milliseconds more."),
+ content->path_summary(), ContentTime(content->trim_start() - old_trim).seconds() * 1000
+ );
+ } else {
+ note += String::compose(
+ _("The file %1 has been trimmed by %2 milliseconds less."),
+ content->path_summary(), ContentTime(old_trim - content->trim_start()).seconds() * 1000
+ );
+ }
+ notes.push_back (note);
+ }
+
+ _content.push_back (content);
}
/* This shouldn't be necessary but better safe than sorry (there could be old files) */
@@ -470,7 +513,7 @@ Playlist::repeat (shared_ptr<const Film> film, ContentList c, int n)
DCPTime pos = range.second;
for (int i = 0; i < n; ++i) {
BOOST_FOREACH (shared_ptr<Content> j, c) {
- shared_ptr<Content> copy = j->clone (film);
+ shared_ptr<Content> copy = j->clone ();
copy->set_position (film, pos + copy->position() - range.first);
_content.push_back (copy);
}