From 031a4066190454b1a4d933b74e86a053673a5e43 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Fri, 8 Mar 2013 22:51:39 +0000 Subject: [PATCH] Stop infinite loop if audio analysis fails. --- src/lib/analyse_audio_job.cc | 3 ++- src/lib/film.cc | 7 +++++-- src/lib/film.h | 2 +- src/wx/audio_dialog.cc | 4 ++-- src/wx/audio_dialog.h | 2 +- 5 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/lib/analyse_audio_job.cc b/src/lib/analyse_audio_job.cc index de2632b0a..92c3cdd4e 100644 --- a/src/lib/analyse_audio_job.cc +++ b/src/lib/analyse_audio_job.cc @@ -29,6 +29,7 @@ using std::string; using std::max; +using std::min; using std::cout; using boost::shared_ptr; @@ -67,7 +68,7 @@ AnalyseAudioJob::run () decoders.audio->Audio.connect (bind (&AnalyseAudioJob::audio, this, _1)); int64_t total_audio_frames = video_frames_to_audio_frames (_film->length().get(), _film->audio_stream()->sample_rate(), _film->source_frame_rate()); - _samples_per_point = min (1, total_audio_frames / _num_points); + _samples_per_point = max (1L, total_audio_frames / _num_points); _current.resize (_film->audio_stream()->channels ()); _analysis.reset (new AudioAnalysis (_film->audio_stream()->channels())); diff --git a/src/lib/film.cc b/src/lib/film.cc index 8028f40ef..46b48f511 100644 --- a/src/lib/film.cc +++ b/src/lib/film.cc @@ -351,9 +351,12 @@ void Film::analyse_audio_finished () { ensure_ui_thread (); - _analyse_audio_job.reset (); - AudioAnalysisFinished (); + if (_analyse_audio_job->finished_ok ()) { + AudioAnalysisSucceeded (); + } + + _analyse_audio_job.reset (); } void diff --git a/src/lib/film.h b/src/lib/film.h index 2ab4a9450..150e384bc 100644 --- a/src/lib/film.h +++ b/src/lib/film.h @@ -374,7 +374,7 @@ public: /** Emitted when some property has changed */ mutable boost::signals2::signal Changed; - boost::signals2::signal AudioAnalysisFinished; + boost::signals2::signal AudioAnalysisSucceeded; /** Current version number of the state file */ static int const state_version; diff --git a/src/wx/audio_dialog.cc b/src/wx/audio_dialog.cc index 5bac8eabe..ba7ddd8f7 100644 --- a/src/wx/audio_dialog.cc +++ b/src/wx/audio_dialog.cc @@ -87,7 +87,7 @@ void AudioDialog::set_film (boost::shared_ptr f) { _film_changed_connection.disconnect (); - _film_audio_analysis_finished_connection.disconnect (); + _film_audio_analysis_succeeded_connection.disconnect (); _film = f; @@ -96,7 +96,7 @@ AudioDialog::set_film (boost::shared_ptr f) _plot->set_gain (_film->audio_gain ()); _film_changed_connection = _film->Changed.connect (bind (&AudioDialog::film_changed, this, _1)); - _film_audio_analysis_finished_connection = _film->AudioAnalysisFinished.connect (bind (&AudioDialog::try_to_load_analysis, this)); + _film_audio_analysis_succeeded_connection = _film->AudioAnalysisSucceeded.connect (bind (&AudioDialog::try_to_load_analysis, this)); SetTitle (std_to_wx (String::compose (wx_to_std (_("DVD-o-matic audio - %1")), _film->name()))); } diff --git a/src/wx/audio_dialog.h b/src/wx/audio_dialog.h index 16cb356fe..514faeea0 100644 --- a/src/wx/audio_dialog.h +++ b/src/wx/audio_dialog.h @@ -47,5 +47,5 @@ private: wxCheckBox* _type_checkbox[AudioPoint::COUNT]; wxSlider* _smoothing; boost::signals2::scoped_connection _film_changed_connection; - boost::signals2::scoped_connection _film_audio_analysis_finished_connection; + boost::signals2::scoped_connection _film_audio_analysis_succeeded_connection; }; -- 2.30.2