summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2013-03-08 22:51:39 +0000
committerCarl Hetherington <cth@carlh.net>2013-03-08 22:51:39 +0000
commit031a4066190454b1a4d933b74e86a053673a5e43 (patch)
tree640d54bffea6d4ac536dbaf643d32e6cc061ebe4 /src
parent7339bd0457584dc8996a472ee7264a59a779c68e (diff)
Stop infinite loop if audio analysis fails.
Diffstat (limited to 'src')
-rw-r--r--src/lib/analyse_audio_job.cc3
-rw-r--r--src/lib/film.cc7
-rw-r--r--src/lib/film.h2
-rw-r--r--src/wx/audio_dialog.cc4
-rw-r--r--src/wx/audio_dialog.h2
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<void (Property)> Changed;
- boost::signals2::signal<void ()> AudioAnalysisFinished;
+ boost::signals2::signal<void ()> 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<Film> 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<Film> 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;
};