canvas HSV color serialization needs LocaleGuard
[ardour.git] / gtk2_ardour / plugin_eq_gui.cc
index bab2119f69515d605dd88b19c4a1f5c47f71ec01..b46f17f920f539b14dca0bdb935626124f2a5ca7 100644 (file)
 
 */
 
-#include "plugin_eq_gui.h"
-#include "fft.h"
+#include <math.h>
+#include <iostream>
 
-#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/session.h"
+#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 <iostream>
-#include <cmath>
+#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 "plugin_eq_gui.h"
+#include "fft.h"
+#include "ardour_ui.h"
+#include "gui_thread.h"
 
 #include "i18n.h"
 
@@ -43,6 +54,8 @@ PluginEqGui::PluginEqGui(boost::shared_ptr<ARDOUR::PluginInsert> pluginInsert)
        : _min_dB(-12.0)
        , _max_dB(+12.0)
        , _step_dB(3.0)
+       , _buffer_size(0)
+       , _signal_buffer_size(0)
        , _impulse_fft(0)
        , _signal_input_fft(0)
        , _signal_output_fft(0)
@@ -68,10 +81,7 @@ PluginEqGui::PluginEqGui(boost::shared_ptr<ARDOUR::PluginInsert> pluginInsert)
        // 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) \
@@ -141,7 +151,7 @@ PluginEqGui::start_listening ()
        _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
@@ -319,7 +329,7 @@ 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();
 
@@ -334,7 +344,8 @@ PluginEqGui::run_impulse_analysis()
        ARDOUR::ChanMapping in_map(_plugin->get_info()->n_inputs);
        ARDOUR::ChanMapping out_map(_plugin->get_info()->n_outputs);
 
-       _plugin->connect_and_run(_bufferset, in_map, out_map, _buffer_size, 0);
+       _plugin->set_block_size (_buffer_size);
+       _plugin->connect_and_run(_bufferset, 0, _buffer_size, 1.0, in_map, out_map, _buffer_size, 0);
        framecnt_t f = _plugin->signal_latency ();
        // Adding user_latency() could be interesting
 
@@ -393,7 +404,7 @@ PluginEqGui::run_impulse_analysis()
 
                                in_map  = ARDOUR::ChanMapping(_plugin->get_info()->n_inputs);
                                out_map = ARDOUR::ChanMapping(_plugin->get_info()->n_outputs);
-                               _plugin->connect_and_run(_bufferset, in_map, out_map, _buffer_size, 0);
+                               _plugin->connect_and_run (_bufferset, target_offset, target_offset + _buffer_size, 1.0, in_map, out_map, _buffer_size, 0);
                        }
                } while ( frames_left > 0);
 
@@ -765,13 +776,13 @@ PluginEqGui::plot_signal_amplitude_difference(Gtk::Widget *w, cairo_t *cr)
                }
                */
 
-               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;
                }