diff options
| author | Carl Hetherington <cth@carlh.net> | 2018-11-21 22:25:43 +0000 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2018-11-21 22:25:43 +0000 |
| commit | fe8251bb73765b459042b0fa841dae2d440487fd (patch) | |
| tree | 9a8cbd162915c2e6e4cf868cfc0321bfb1a44ffd /src/lib | |
| parent | f67bc45820b4e56f90eecb97ba3b7762c119f9b5 (diff) | |
Remove Film pointer from clone().
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/content.cc | 4 | ||||
| -rw-r--r-- | src/lib/content.h | 2 | ||||
| -rw-r--r-- | src/lib/content_factory.cc | 42 | ||||
| -rw-r--r-- | src/lib/content_factory.h | 2 | ||||
| -rw-r--r-- | src/lib/playlist.cc | 47 |
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); } |
