diff options
| author | Carl Hetherington <cth@carlh.net> | 2012-10-24 23:58:26 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2012-10-24 23:58:26 +0100 |
| commit | 110d7d4e111c2db31489296587d855328c5d8b34 (patch) | |
| tree | afe1f5f8912cb292f51d5f07b5947c291fbb7da4 /src/lib | |
| parent | 165edfe3bb8afd0531729f732701756d711dde16 (diff) | |
Fix shared_ptr for Film.
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/film.cc | 4 | ||||
| -rw-r--r-- | src/lib/format.cc | 12 | ||||
| -rw-r--r-- | src/lib/format.h | 14 | ||||
| -rw-r--r-- | src/lib/job_manager.cc | 15 | ||||
| -rw-r--r-- | src/lib/job_manager.h | 5 |
5 files changed, 36 insertions, 14 deletions
diff --git a/src/lib/film.cc b/src/lib/film.cc index 0104f5a16..72da570f0 100644 --- a/src/lib/film.cc +++ b/src/lib/film.cc @@ -266,8 +266,8 @@ Film::make_dcp (bool transcode) } } - o->padding = format()->dcp_padding (this); - o->ratio = format()->ratio_as_float (this); + o->padding = format()->dcp_padding (shared_from_this ()); + o->ratio = format()->ratio_as_float (shared_from_this ()); o->decode_subtitles = with_subtitles (); shared_ptr<Job> r; diff --git a/src/lib/format.cc b/src/lib/format.cc index 2eb4990da..eb42593fe 100644 --- a/src/lib/format.cc +++ b/src/lib/format.cc @@ -30,7 +30,11 @@ #include "format.h" #include "film.h" -using namespace std; +using std::string; +using std::setprecision; +using std::stringstream; +using std::vector; +using boost::shared_ptr; vector<Format const *> Format::_formats; @@ -143,7 +147,7 @@ FixedFormat::FixedFormat (int r, Size dcp, string id, string n, string d) } int -Format::dcp_padding (Film const * f) const +Format::dcp_padding (shared_ptr<const Film> f) const { int p = rint ((_dcp_size.width - (_dcp_size.height * ratio_as_integer(f) / 100.0)) / 2.0); @@ -162,13 +166,13 @@ VariableFormat::VariableFormat (Size dcp, string id, string n, string d) } int -VariableFormat::ratio_as_integer (Film const * f) const +VariableFormat::ratio_as_integer (shared_ptr<const Film> f) const { return rint (ratio_as_float (f) * 100); } float -VariableFormat::ratio_as_float (Film const * f) const +VariableFormat::ratio_as_float (shared_ptr<const Film> f) const { return float (f->size().width) / f->size().height; } diff --git a/src/lib/format.h b/src/lib/format.h index 35dd4fb85..2118237a4 100644 --- a/src/lib/format.h +++ b/src/lib/format.h @@ -41,12 +41,12 @@ public: /** @return the aspect ratio multiplied by 100 * (e.g. 239 for Cinemascope 2.39:1) */ - virtual int ratio_as_integer (Film const * f) const = 0; + virtual int ratio_as_integer (boost::shared_ptr<const Film> f) const = 0; /** @return the ratio as a floating point number */ - virtual float ratio_as_float (Film const * f) const = 0; + virtual float ratio_as_float (boost::shared_ptr<const Film> f) const = 0; - int dcp_padding (Film const * f) const; + int dcp_padding (boost::shared_ptr<const Film> f) const; /** @return size in pixels of the images that we should * put in a DCP for this ratio. This size will not correspond @@ -106,11 +106,11 @@ class FixedFormat : public Format public: FixedFormat (int, Size, std::string, std::string, std::string); - int ratio_as_integer (Film const *) const { + int ratio_as_integer (boost::shared_ptr<const Film>) const { return _ratio; } - float ratio_as_float (Film const *) const { + float ratio_as_float (boost::shared_ptr<const Film>) const { return _ratio / 100.0; } @@ -127,8 +127,8 @@ class VariableFormat : public Format public: VariableFormat (Size, std::string, std::string, std::string); - int ratio_as_integer (Film const * f) const; - float ratio_as_float (Film const * f) const; + int ratio_as_integer (boost::shared_ptr<const Film> f) const; + float ratio_as_float (boost::shared_ptr<const Film> f) const; std::string name () const; }; diff --git a/src/lib/job_manager.cc b/src/lib/job_manager.cc index 5cc340357..1fae17965 100644 --- a/src/lib/job_manager.cc +++ b/src/lib/job_manager.cc @@ -26,6 +26,7 @@ #include "job_manager.h" #include "job.h" #include "cross.h" +#include "ui_signaller.h" using std::string; using std::list; @@ -34,6 +35,7 @@ using boost::shared_ptr; JobManager* JobManager::_instance = 0; JobManager::JobManager () + : _last_active_jobs (false) { boost::thread (boost::bind (&JobManager::scheduler, this)); } @@ -88,11 +90,13 @@ JobManager::errors () const return false; } - void JobManager::scheduler () { while (1) { + + bool active_jobs = false; + { boost::mutex::scoped_lock lm (_mutex); for (list<shared_ptr<Job> >::iterator i = _jobs.begin(); i != _jobs.end(); ++i) { @@ -110,9 +114,18 @@ JobManager::scheduler () break; } } + + if (!(*i)->finished ()) { + active_jobs = true; + } } } + if (active_jobs != _last_active_jobs) { + _last_active_jobs = active_jobs; + ui_signaller->emit (boost::bind (boost::ref (ActiveJobsChanged), active_jobs)); + } + dvdomatic_sleep (1); } } diff --git a/src/lib/job_manager.h b/src/lib/job_manager.h index 4b70738f0..cc1c1d28f 100644 --- a/src/lib/job_manager.h +++ b/src/lib/job_manager.h @@ -23,6 +23,7 @@ #include <list> #include <boost/thread/mutex.hpp> +#include <boost/signals2.hpp> class Job; @@ -39,6 +40,8 @@ public: bool work_to_do () const; bool errors () const; + boost::signals2::signal<void (bool)> ActiveJobsChanged; + static JobManager* instance (); private: @@ -48,5 +51,7 @@ private: mutable boost::mutex _mutex; std::list<boost::shared_ptr<Job> > _jobs; + bool _last_active_jobs; + static JobManager* _instance; }; |
