From: Carl Hetherington Date: Tue, 25 Sep 2012 00:36:53 +0000 (+0100) Subject: Re-transcode and re-check J2Ks after a bad one is found. X-Git-Tag: v2.0.48~1720^2~11 X-Git-Url: https://main.carlh.net/gitweb/?p=dcpomatic.git;a=commitdiff_plain;h=922361469072474da4294a90f1436cd0117cb90f Re-transcode and re-check J2Ks after a bad one is found. --- diff --git a/src/lib/check_hashes_job.cc b/src/lib/check_hashes_job.cc index 87eb40d14..5a927f752 100644 --- a/src/lib/check_hashes_job.cc +++ b/src/lib/check_hashes_job.cc @@ -24,6 +24,9 @@ #include "film_state.h" #include "options.h" #include "log.h" +#include "job_manager.h" +#include "ab_transcode_job.h" +#include "transcode_job.h" using namespace std; using namespace boost; @@ -66,6 +69,19 @@ CheckHashesJob::run () set_progress (float (i) / _fs->length); } + if (_bad) { + shared_ptr tc; + + if (_fs->dcp_ab) { + tc.reset (new ABTranscodeJob (_fs, _opt, _log)); + } else { + tc.reset (new TranscodeJob (_fs, _opt, _log)); + } + + JobManager::instance()->add_after (shared_from_this(), tc); + JobManager::instance()->add_after (tc, shared_ptr (new CheckHashesJob (_fs, _opt, _log))); + } + set_progress (1); set_state (FINISHED_OK); } @@ -74,6 +90,15 @@ string CheckHashesJob::status () const { stringstream s; - s << Job::status () << "; " << _bad << " bad frames found"; + s << Job::status (); + if (overall_progress() > 0) { + if (_bad == 0) { + s << "; no bad frames found"; + } else if (_bad == 1) { + s << "; 1 bad frame found"; + } else { + s << "; " << _bad << " bad frames found"; + } + } return s.str (); } diff --git a/src/lib/job.h b/src/lib/job.h index fee887b42..b39130479 100644 --- a/src/lib/job.h +++ b/src/lib/job.h @@ -26,6 +26,7 @@ #include #include +#include #include class Log; @@ -35,7 +36,7 @@ class Options; /** @class Job * @brief A parent class to represent long-running tasks which are run in their own thread. */ -class Job +class Job : public boost::enable_shared_from_this { public: Job (boost::shared_ptr s, boost::shared_ptr o, Log* l); diff --git a/src/lib/job_manager.cc b/src/lib/job_manager.cc index 93fdbd27a..a166b5924 100644 --- a/src/lib/job_manager.cc +++ b/src/lib/job_manager.cc @@ -41,15 +41,23 @@ void JobManager::add (shared_ptr j) { boost::mutex::scoped_lock lm (_mutex); - _jobs.push_back (j); } +void +JobManager::add_after (shared_ptr after, shared_ptr j) +{ + boost::mutex::scoped_lock lm (_mutex); + list >::iterator i = find (_jobs.begin(), _jobs.end(), after); + assert (i != _jobs.end ()); + ++i; + _jobs.insert (i, j); +} + list > JobManager::get () const { boost::mutex::scoped_lock lm (_mutex); - return _jobs; } diff --git a/src/lib/job_manager.h b/src/lib/job_manager.h index f2f5e0057..d1d33cfc2 100644 --- a/src/lib/job_manager.h +++ b/src/lib/job_manager.h @@ -38,6 +38,7 @@ class JobManager public: void add (boost::shared_ptr); + void add_after (boost::shared_ptr after, boost::shared_ptr j); std::list > get () const; bool work_to_do () const; diff --git a/src/lib/transcode_job.cc b/src/lib/transcode_job.cc index 2de6e90ca..9113593f0 100644 --- a/src/lib/transcode_job.cc +++ b/src/lib/transcode_job.cc @@ -89,7 +89,7 @@ TranscodeJob::status () const } if (_encoder->skipping () && !finished ()) { - return "skipping frames already encoded"; + return "skipping already-encoded frames"; }