summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2019-01-08 23:34:04 +0000
committerCarl Hetherington <cth@carlh.net>2019-01-08 23:34:04 +0000
commit4df42c81390ed61aecbcc5bf0ad380937c26eaef (patch)
treef8cc92b821e668153300004e88405adb05566ba4 /src
parent3a323ff8e8921c737f6d250a744ba5f13ad2e255 (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.cc3
-rw-r--r--src/lib/analyse_audio_job.h6
-rw-r--r--src/lib/job_manager.cc2
-rw-r--r--src/wx/audio_dialog.cc7
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)
);