Stop infinite loop if audio analysis fails.
authorCarl Hetherington <cth@carlh.net>
Fri, 8 Mar 2013 22:51:39 +0000 (22:51 +0000)
committerCarl Hetherington <cth@carlh.net>
Fri, 8 Mar 2013 22:51:39 +0000 (22:51 +0000)
src/lib/analyse_audio_job.cc
src/lib/film.cc
src/lib/film.h
src/wx/audio_dialog.cc
src/wx/audio_dialog.h

index de2632b0a7cd2556aa46086d8860548f7a0c2e07..92c3cdd4e5a88709b94c285c91bc67b0659a2415 100644 (file)
@@ -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()));
index 8028f40ef0ee0bf6e849cd9798a43f3bed81b40e..46b48f51111ac837f706844049e9320305d0ae59 100644 (file)
@@ -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
index 2ab4a94509657d4b382bc16f093599016188e26d..150e384bc7aadb03c6c25b0c03c6c34c82a3fb20 100644 (file)
@@ -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;
index 5bac8eabeb76c21738c64990a5be38f5c29a23b3..ba7ddd8f788dacaede8d5fca5a0ea6b57bc1d7ce 100644 (file)
@@ -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())));
 }
index 16cb356fe4ad106b8c47782b79ab9295bf2c0df5..514faeea0e952ff83c716392d3aacf5a5514d2ee 100644 (file)
@@ -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;
 };