*/
-#include "plugin_eq_gui.h"
-#include "fft.h"
+#include <math.h>
+#include <iostream>
+
+#ifdef COMPILER_MSVC
+#include <float.h>
+/* isinf() & isnan() are C99 standards, which older MSVC doesn't provide */
+#define ISINF(val) !((bool)_finite((double)val))
+#define ISNAN(val) (bool)_isnan((double)val)
+#else
+#define ISINF(val) std::isinf((val))
+#define ISNAN(val) std::isnan((val))
+#endif
+
+#include <gtkmm/box.h>
+#include <gtkmm/button.h>
+#include <gtkmm/checkbutton.h>
-#include "ardour_ui.h"
-#include "gui_thread.h"
#include "ardour/audio_buffer.h"
#include "ardour/data_type.h"
#include "ardour/chan_mapping.h"
+#include "ardour/plugin_insert.h"
#include "ardour/session.h"
-#include <gtkmm/box.h>
-#include <gtkmm/button.h>
-#include <gtkmm/checkbutton.h>
+#include "plugin_eq_gui.h"
+#include "fft.h"
+#include "ardour_ui.h"
+#include "gui_thread.h"
-#include <iostream>
-#include <cmath>
+#include "i18n.h"
using namespace ARDOUR;
// dB selection
dBScaleModel = Gtk::ListStore::create(dBColumns);
- /* this grotty-looking cast allows compilation against gtkmm 2.24.0, which
- added a new ComboBox constructor.
- */
- dBScaleCombo = new Gtk::ComboBox ((Glib::RefPtr<Gtk::TreeModel> &) dBScaleModel);
+ dBScaleCombo = new Gtk::ComboBox (dBScaleModel, false);
dBScaleCombo->set_title (_("dB scale"));
#define ADD_DB_ROW(MIN,MAX,STEP,NAME) \
_plugin->activate();
set_buffer_size(4096, 16384);
// Connect the realtime signal collection callback
- _plugin_insert->AnalysisDataGathered.connect (analysis_connection, invalidator (*this), ui_bind (&PluginEqGui::signal_collect_callback, this, _1, _2), gui_context());
+ _plugin_insert->AnalysisDataGathered.connect (analysis_connection, invalidator (*this), boost::bind (&PluginEqGui::signal_collect_callback, this, _1, _2), gui_context());
}
void
if (!_window_unmap_connection.connected()) {
_window_unmap_connection = toplevel->signal_unmap().connect( sigc::mem_fun(this, &PluginEqGui::stop_updating));
}
-
+
if (!_window_map_connection.connected()) {
_window_map_connection = toplevel->signal_map().connect( sigc::mem_fun(this, &PluginEqGui::start_updating));
}
void
PluginEqGui::run_impulse_analysis()
{
+ /* Allocate some thread-local buffers so that Plugin::connect_and_run can use them */
+ ARDOUR_UI::instance()->get_process_buffers ();
+
uint32_t inputs = _plugin->get_info()->n_inputs.n_audio();
uint32_t outputs = _plugin->get_info()->n_outputs.n_audio();
ARDOUR::ChanMapping in_map(_plugin->get_info()->n_inputs);
ARDOUR::ChanMapping out_map(_plugin->get_info()->n_outputs);
+ _plugin->set_block_size (_buffer_size);
_plugin->connect_and_run(_bufferset, in_map, out_map, _buffer_size, 0);
framecnt_t f = _plugin->signal_latency ();
// Adding user_latency() could be interesting
// This signals calls expose_analysis_area()
_analysis_area->queue_draw();
+
+ ARDOUR_UI::instance()->drop_process_buffers ();
}
bool
}
*/
- if (std::isinf(power)) {
+ if (ISINF(power)) {
if (power < 0) {
power = _min_dB - 1.0;
} else {
power = _max_dB - 1.0;
}
- } else if (std::isnan(power)) {
+ } else if (ISNAN(power)) {
power = _min_dB - 1.0;
}