Remove Film pointer from clone().
authorCarl Hetherington <cth@carlh.net>
Wed, 21 Nov 2018 22:25:43 +0000 (22:25 +0000)
committerCarl Hetherington <cth@carlh.net>
Wed, 21 Nov 2018 22:25:43 +0000 (22:25 +0000)
src/lib/content.cc
src/lib/content.h
src/lib/content_factory.cc
src/lib/content_factory.h
src/lib/playlist.cc
src/tools/dcpomatic.cc
src/wx/controls.cc

index 5139eb4..11bf63f 100644 (file)
@@ -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
index c6fa2c9..47f29cb 100644 (file)
@@ -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);
 
index 934677c..30f0254 100644 (file)
@@ -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;
 }
 
index af77d93..2522ad0 100644 (file)
@@ -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);
index 0e64974..c10235f 100644 (file)
@@ -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);
                }
index 15c4363..1a87a28 100644 (file)
@@ -595,7 +595,7 @@ private:
        {
                ContentList const sel = _film_editor->content_panel()->selected();
                DCPOMATIC_ASSERT (sel.size() == 1);
-               _clipboard = sel.front()->clone(_film);
+               _clipboard = sel.front()->clone();
        }
 
        void edit_paste ()
index af1dbdf..0fa92b6 100644 (file)
@@ -214,7 +214,7 @@ Controls::Controls (wxWindow* parent, shared_ptr<FilmViewer> viewer, bool editor
 void
 Controls::add_clicked ()
 {
-       shared_ptr<Content> sel = selected_content()->clone(_film);
+       shared_ptr<Content> sel = selected_content()->clone();
        DCPOMATIC_ASSERT (sel);
        _film->examine_and_add_content (sel);
        bool const ok = display_progress (_("DCP-o-matic"), _("Loading DCP"));