diff options
| author | Carl Hetherington <cth@carlh.net> | 2019-01-08 23:34:04 +0000 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2019-01-08 23:34:04 +0000 |
| commit | 4df42c81390ed61aecbcc5bf0ad380937c26eaef (patch) | |
| tree | f8cc92b821e668153300004e88405adb05566ba4 /src | |
| parent | 3a323ff8e8921c737f6d250a744ba5f13ad2e255 (diff) | |
Make sure audio analysis is re-run even if there's an existing job for the same playlist (but with different settings) (fixed #1257).
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/analyse_audio_job.cc | 3 | ||||
| -rw-r--r-- | src/lib/analyse_audio_job.h | 6 | ||||
| -rw-r--r-- | src/lib/job_manager.cc | 2 | ||||
| -rw-r--r-- | src/wx/audio_dialog.cc | 7 |
4 files changed, 14 insertions, 4 deletions
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<const Film> film, shared_ptr<const Playlist> 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<const Playlist> playlist () const { - return _playlist; + boost::filesystem::path path () const { + return _path; } private: void analyse (boost::shared_ptr<const AudioBuffers>, DCPTime time); boost::shared_ptr<const Playlist> _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<Job> i, _jobs) { shared_ptr<AnalyseAudioJob> a = dynamic_pointer_cast<AnalyseAudioJob> (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<AudioAnalysis> ()); _analysis.reset (); + + BOOST_FOREACH (shared_ptr<Job> i, JobManager::instance()->get()) { + if (dynamic_pointer_cast<AnalyseAudioJob>(i)) { + i->cancel (); + } + } + JobManager::instance()->analyse_audio ( film, _playlist, !static_cast<bool>(check), _analysis_finished_connection, bind (&AudioDialog::analysis_finished, this) ); |
