13
0

fix crash #6161 - another throw w/o catch

The real problem is: libardourvampplugins:* cannot
be instantiated this remains to be fixed.
This commit is contained in:
Robin Gareus 2015-03-30 10:48:31 +02:00
parent d1b70b2e24
commit da42014c4d
2 changed files with 39 additions and 25 deletions

View File

@ -22,6 +22,10 @@
#include "ardour/session_event.h"
#include "ardour/transient_detector.h"
#include "pbd/compose.h"
#include "pbd/error.h"
#include "i18n.h"
using namespace std;
using namespace ARDOUR;
using namespace PBD;
@ -102,13 +106,16 @@ Analyser::analyse_audio_file_source (boost::shared_ptr<AudioFileSource> src)
{
AnalysisFeatureList results;
TransientDetector td (src->sample_rate());
if (td.run (src->get_transients_path(), src.get(), 0, results) == 0) {
src->set_been_analysed (true);
} else {
try {
TransientDetector td (src->sample_rate());
if (td.run (src->get_transients_path(), src.get(), 0, results) == 0) {
src->set_been_analysed (true);
} else {
src->set_been_analysed (false);
}
} catch (...) {
error << string_compose(_("Transient Analysis failed for %1."), _("Audio File Source")) << endmsg;;
src->set_been_analysed (false);
return;
}
}

View File

@ -1696,31 +1696,38 @@ in this and future transient-detection operations.\n\
}
}
TransientDetector t (pl->session().frame_rate());
bool existing_results = !results.empty();
_transients.clear ();
_valid_transients = false;
try {
for (uint32_t i = 0; i < n_channels(); ++i) {
TransientDetector t (pl->session().frame_rate());
AnalysisFeatureList these_results;
_transients.clear ();
_valid_transients = false;
t.reset ();
for (uint32_t i = 0; i < n_channels(); ++i) {
if (t.run ("", this, i, these_results)) {
return -1;
AnalysisFeatureList these_results;
t.reset ();
if (t.run ("", this, i, these_results)) {
return -1;
}
/* translate all transients to give absolute position */
for (AnalysisFeatureList::iterator i = these_results.begin(); i != these_results.end(); ++i) {
(*i) += _position;
}
/* merge */
_transients.insert (_transients.end(), these_results.begin(), these_results.end());
}
/* translate all transients to give absolute position */
for (AnalysisFeatureList::iterator i = these_results.begin(); i != these_results.end(); ++i) {
(*i) += _position;
}
/* merge */
_transients.insert (_transients.end(), these_results.begin(), these_results.end());
} catch (...) {
error << string_compose(_("Transient Analysis failed for %1."), _("Audio Region")) << endmsg;
return -1;
}
if (!results.empty()) {