#include <sigc++/signal.h>
#include <jack/jack.h>
-#include <pbd/lockmonitor.h>
+#include <glibmm/thread.h>
+
#include <pbd/fastlog.h>
#include <pbd/undo.h>
-#include <pbd/atomic.h>
+
#include <midi++/controllable.h>
#include <ardour/ardour.h>
/* Peak metering */
float peak_input_power (uint32_t n) {
- if (n < std::max(_ninputs, _noutputs)) {
- float x = _stored_peak_power[n];
- if(x > 0.0) {
- return 20 * fast_log10(x);
- } else {
- return minus_infinity();
- }
+ if (n < std::max (_ninputs, _noutputs)) {
+ return _visible_peak_power[n];
} else {
return minus_infinity();
}
}
- static sigc::signal<void> GrabPeakPower;
+ static void update_meters();
+
+private:
+
+ static sigc::signal<void> Meter;
+ static Glib::StaticMutex m_meter_signal_lock;
+ sigc::connection m_meter_connection;
+
+public:
/* automation */
int ports_became_legal ();
private:
- mutable PBD::Lock io_lock;
+ mutable Glib::Mutex io_lock;
protected:
Session& _session;
gain_t _gain;
gain_t _effective_gain;
gain_t _desired_gain;
- PBD::NonBlockingLock declick_lock;
+ Glib::Mutex declick_lock;
vector<Port*> _outputs;
vector<Port*> _inputs;
vector<float> _peak_power;
- vector<float> _stored_peak_power;
+ vector<float> _visible_peak_power;
string _name;
Connection* _input_connection;
Connection* _output_connection;
Change restore_state (State&);
StateManager::State* state_factory (std::string why) const;
- void send_state_changed();
bool get_midi_node_info (XMLNode * node, MIDI::eventType & ev, MIDI::channel_t & chan, MIDI::byte & additional);
bool set_midi_node_info (XMLNode * node, MIDI::eventType ev, MIDI::channel_t chan, MIDI::byte additional);
jack_nframes_t last_automation_snapshot;
static jack_nframes_t _automation_interval;
- AutoState _gain_automation_state;
+ AutoState _gain_automation_state;
AutoStyle _gain_automation_style;
bool apply_gain_automation;
int save_automation (const string&);
int load_automation (const string&);
- PBD::NonBlockingLock automation_lock;
+ Glib::Mutex automation_lock;
/* AudioTrack::deprecated_use_diskstream_connections() needs these */
int make_connections (const XMLNode&);
void setup_peak_meters ();
- void grab_peak_power ();
+ void meter ();
bool ensure_inputs_locked (uint32_t, bool clear, void *src);
bool ensure_outputs_locked (uint32_t, bool clear, void *src);