From 4df42c81390ed61aecbcc5bf0ad380937c26eaef Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Tue, 8 Jan 2019 23:34:04 +0000 Subject: Make sure audio analysis is re-run even if there's an existing job for the same playlist (but with different settings) (fixed #1257). --- src/lib/analyse_audio_job.cc | 3 ++- src/lib/analyse_audio_job.h | 6 ++++-- src/lib/job_manager.cc | 2 +- src/wx/audio_dialog.cc | 7 +++++++ 4 files changed, 14 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/lib/analyse_audio_job.cc b/src/lib/analyse_audio_job.cc index ad2606d84..e4a100c4a 100644 --- a/src/lib/analyse_audio_job.cc +++ b/src/lib/analyse_audio_job.cc @@ -54,6 +54,7 @@ int const AnalyseAudioJob::_num_points = 1024; AnalyseAudioJob::AnalyseAudioJob (shared_ptr film, shared_ptr playlist, bool from_zero) : Job (film) , _playlist (playlist) + , _path (film->audio_analysis_path(playlist)) , _from_zero (from_zero) , _done (0) , _samples_per_point (1) @@ -166,7 +167,7 @@ AnalyseAudioJob::run () _analysis->set_samples_per_point (_samples_per_point); _analysis->set_sample_rate (_film->audio_frame_rate ()); - _analysis->write (_film->audio_analysis_path (_playlist)); + _analysis->write (_path); set_progress (1); set_state (FINISHED_OK); diff --git a/src/lib/analyse_audio_job.h b/src/lib/analyse_audio_job.h index d8dcda2f1..b88d6c2bf 100644 --- a/src/lib/analyse_audio_job.h +++ b/src/lib/analyse_audio_job.h @@ -51,14 +51,16 @@ public: std::string json_name () const; void run (); - boost::shared_ptr playlist () const { - return _playlist; + boost::filesystem::path path () const { + return _path; } private: void analyse (boost::shared_ptr, DCPTime time); boost::shared_ptr _playlist; + /** playlist's audio analysis path when the job was created */ + boost::filesystem::path _path; DCPTime _start; bool _from_zero; diff --git a/src/lib/job_manager.cc b/src/lib/job_manager.cc index e2302a215..26e2d2897 100644 --- a/src/lib/job_manager.cc +++ b/src/lib/job_manager.cc @@ -233,7 +233,7 @@ JobManager::analyse_audio ( BOOST_FOREACH (shared_ptr i, _jobs) { shared_ptr a = dynamic_pointer_cast (i); - if (a && a->playlist () == playlist) { + if (a && a->path() == film->audio_analysis_path(playlist)) { i->when_finished (connection, ready); return; } diff --git a/src/wx/audio_dialog.cc b/src/wx/audio_dialog.cc index 81687ca80..f3f7c1f8c 100644 --- a/src/wx/audio_dialog.cc +++ b/src/wx/audio_dialog.cc @@ -182,6 +182,13 @@ AudioDialog::try_to_load_analysis () if (!boost::filesystem::exists (path)) { _plot->set_analysis (shared_ptr ()); _analysis.reset (); + + BOOST_FOREACH (shared_ptr i, JobManager::instance()->get()) { + if (dynamic_pointer_cast(i)) { + i->cancel (); + } + } + JobManager::instance()->analyse_audio ( film, _playlist, !static_cast(check), _analysis_finished_connection, bind (&AudioDialog::analysis_finished, this) ); -- cgit v1.2.3