Hand-apply c7ce6fcf9bc6b5b1f6d823b7df256f43fefd660c; add a note to the
[dcpomatic.git] / src / lib / film.cc
index a8e05b751c267ea6eb3800a4829abdd674d49aaa..0b48bf7b12d34eefcd280c06add697e1b56aecd9 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2012-2014 Carl Hetherington <cth@carlh.net>
+    Copyright (C) 2012-2015 Carl Hetherington <cth@carlh.net>
 
     This program is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
 
 */
 
+/** @file  src/film.cc
+ *  @brief A representation of some audio and video content, and details of
+ *  how they should be presented in a DCP.
+ */
+
 #include "film.h"
 #include "job.h"
 #include "util.h"
@@ -28,7 +33,6 @@
 #include "examine_content_job.h"
 #include "scaler.h"
 #include "config.h"
-#include "version.h"
 #include "ui_signaller.h"
 #include "playlist.h"
 #include "player.h"
@@ -37,6 +41,7 @@
 #include "cross.h"
 #include "cinema.h"
 #include "safe_stringstream.h"
+#include "environment_info.h"
 #include <libcxml/cxml.h>
 #include <dcp/cpl.h>
 #include <dcp/signer.h>
@@ -131,8 +136,8 @@ Film::Film (boost::filesystem::path dir, bool log)
 {
        set_isdcf_date_today ();
 
-       _playlist->Changed.connect (bind (&Film::playlist_changed, this));
-       _playlist->ContentChanged.connect (bind (&Film::playlist_content_changed, this, _1, _2));
+       _playlist_changed_connection = _playlist->Changed.connect (bind (&Film::playlist_changed, this));
+       _playlist_content_changed_connection = _playlist->ContentChanged.connect (bind (&Film::playlist_content_changed, this, _1, _2));
        
        /* Make state.directory a complete path without ..s (where possible)
           (Code swiped from Adam Bowen on stackoverflow)
@@ -162,6 +167,13 @@ Film::Film (boost::filesystem::path dir, bool log)
        _playlist->set_sequence_video (_sequence_video);
 }
 
+Film::~Film ()
+{
+       for (list<boost::signals2::connection>::const_iterator i = _job_connections.begin(); i != _job_connections.end(); ++i) {
+               i->disconnect ();
+       }
+}      
+
 string
 Film::video_identifier () const
 {
@@ -272,13 +284,7 @@ Film::make_dcp ()
                throw BadSettingError (_("name"), _("cannot contain slashes"));
        }
 
-       LOG_GENERAL ("DCP-o-matic %1 git %2 using %3", dcpomatic_version, dcpomatic_git_commit, dependency_version_summary());
-
-       {
-               char buffer[128];
-               gethostname (buffer, sizeof (buffer));
-               LOG_GENERAL ("Starting to make DCP on %1", buffer);
-       }
+       environment_info (log ());
 
        ContentList cl = content ();
        for (ContentList::const_iterator i = cl.begin(); i != cl.end(); ++i) {
@@ -287,29 +293,6 @@ Film::make_dcp ()
        LOG_GENERAL ("DCP video rate %1 fps", video_frame_rate());
        LOG_GENERAL ("%1 threads", Config::instance()->num_local_encoding_threads());
        LOG_GENERAL ("J2K bandwidth %1", j2k_bandwidth());
-#ifdef DCPOMATIC_DEBUG
-       LOG_GENERAL_NC ("DCP-o-matic built in debug mode.");
-#else
-       LOG_GENERAL_NC ("DCP-o-matic built in optimised mode.");
-#endif
-#ifdef LIBDCP_DEBUG
-       LOG_GENERAL_NC ("libdcp built in debug mode.");
-#else
-       LOG_GENERAL_NC ("libdcp built in optimised mode.");
-#endif
-
-#ifdef DCPOMATIC_WINDOWS
-       OSVERSIONINFO info;
-       info.dwOSVersionInfoSize = sizeof (info);
-       GetVersionEx (&info);
-       LOG_GENERAL ("Windows version %1.%2.%3 SP %4", info.dwMajorVersion, info.dwMinorVersion, info.dwBuildNumber, info.szCSDVersion);
-#endif 
-       
-       LOG_GENERAL ("CPU: %1, %2 processors", cpu_info(), boost::thread::hardware_concurrency ());
-       list<pair<string, string> > const m = mount_info ();
-       for (list<pair<string, string> >::const_iterator i = m.begin(); i != m.end(); ++i) {
-               LOG_GENERAL ("Mount: %1 %2", i->first, i->second);
-       }
        
        if (container() == 0) {
                throw MissingSettingError (_("container"));
@@ -947,21 +930,25 @@ Film::content () const
 }
 
 void
-Film::examine_content (shared_ptr<Content> c, bool calculate_digest)
+Film::examine_content (shared_ptr<Content> c)
 {
-       shared_ptr<Job> j (new ExamineContentJob (shared_from_this(), c, calculate_digest));
+       shared_ptr<Job> j (new ExamineContentJob (shared_from_this(), c));
        JobManager::instance()->add (j);
 }
 
 void
-Film::examine_and_add_content (shared_ptr<Content> c, bool calculate_digest)
+Film::examine_and_add_content (shared_ptr<Content> c)
 {
        if (dynamic_pointer_cast<FFmpegContent> (c)) {
                run_ffprobe (c->path(0), file ("ffprobe.log"), _log);
        }
                        
-       shared_ptr<Job> j (new ExamineContentJob (shared_from_this(), c, calculate_digest));
-       j->Finished.connect (bind (&Film::maybe_add_content, this, boost::weak_ptr<Job> (j), boost::weak_ptr<Content> (c)));
+       shared_ptr<Job> j (new ExamineContentJob (shared_from_this(), c));
+
+       _job_connections.push_back (
+               j->Finished.connect (bind (&Film::maybe_add_content, this, boost::weak_ptr<Job> (j), boost::weak_ptr<Content> (c)))
+               );
+       
        JobManager::instance()->add (j);
 }