summaryrefslogtreecommitdiff
path: root/libs/ardour/io.cc
diff options
context:
space:
mode:
Diffstat (limited to 'libs/ardour/io.cc')
-rw-r--r--libs/ardour/io.cc53
1 files changed, 20 insertions, 33 deletions
diff --git a/libs/ardour/io.cc b/libs/ardour/io.cc
index 5df8532959..3069123f16 100644
--- a/libs/ardour/io.cc
+++ b/libs/ardour/io.cc
@@ -98,12 +98,11 @@ static double direct_gain_to_control (gain_t gain) {
/** @param default_type The type of port that will be created by ensure_io
* and friends if no type is explicitly requested (to avoid breakage).
*/
-IO::IO (Session& s, string name,
+IO::IO (Session& s, const string& name,
int input_min, int input_max, int output_min, int output_max,
DataType default_type)
- : _session (s),
+ : SessionObject(s, name),
_output_buffers(new BufferSet()),
- _name (name),
_default_type(default_type),
_gain_control (X_("gaincontrol"), *this),
_gain_automation_curve (0.0, 2.0, 1.0),
@@ -158,7 +157,7 @@ IO::IO (Session& s, string name,
}
IO::IO (Session& s, const XMLNode& node, DataType dt)
- : _session (s),
+ : SessionObject(s, "unnamed io"),
_output_buffers(new BufferSet()),
_default_type (dt),
_gain_control (X_("gaincontrol"), *this),
@@ -324,7 +323,7 @@ IO::just_meter_input (nframes_t start_frame, nframes_t end_frame,
collect_input (bufs, nframes, offset);
- _meter->run(bufs, nframes);
+ _meter->run(bufs, start_frame, end_frame, nframes, offset);
}
void
@@ -1130,7 +1129,7 @@ IO::ensure_outputs (ChanCount count, bool clear, bool lockit, void* src)
gain_t
IO::effective_gain () const
{
- if (gain_automation_playback()) {
+ if (_gain_automation_curve.automation_playback()) {
return _effective_gain;
} else {
return _desired_gain;
@@ -1826,14 +1825,15 @@ IO::parse_gain_string (const string& str, vector<string>& ports)
return ports.size();
}
-int
-IO::set_name (string name, void* src)
+bool
+IO::set_name (const string& str)
{
- if (name == _name) {
- return 0;
+ if (str == _name) {
+ return true;
}
-
+
/* replace all colons in the name. i wish we didn't have to do this */
+ string name = str;
if (replace_all (name, ":", "-")) {
warning << _("you cannot use colons to name objects with I/O connections") << endmsg;
@@ -1851,10 +1851,7 @@ IO::set_name (string name, void* src)
i->set_name (current_name);
}
- _name = name;
- name_changed (src); /* EMIT SIGNAL */
-
- return 0;
+ return SessionObject::set_name(name);
}
void
@@ -2169,7 +2166,8 @@ IO::GainControllable::get_value (void) const
void
IO::setup_peak_meters()
{
- _meter->setup(std::max(_inputs.count(), _outputs.count()));
+ ChanCount max_streams = std::max(_inputs.count(), _outputs.count());
+ _meter->configure_io(max_streams, max_streams);
}
/**
@@ -2226,28 +2224,17 @@ IO::set_gain_automation_state (AutoState state)
if (changed) {
_session.set_dirty ();
- gain_automation_state_changed (); /* EMIT SIGNAL */
+ //gain_automation_state_changed (); /* EMIT SIGNAL */
}
}
void
IO::set_gain_automation_style (AutoStyle style)
{
- bool changed = false;
-
- {
- Glib::Mutex::Lock lm (automation_lock);
-
- if (style != _gain_automation_curve.automation_style()) {
- changed = true;
- _gain_automation_curve.set_automation_style (style);
- }
- }
-
- if (changed) {
- gain_automation_style_changed (); /* EMIT SIGNAL */
- }
+ Glib::Mutex::Lock lm (automation_lock);
+ _gain_automation_curve.set_automation_style (style);
}
+
void
IO::inc_gain (gain_t factor, void *src)
{
@@ -2276,7 +2263,7 @@ IO::set_gain (gain_t val, void *src)
gain_changed (src);
_gain_control.Changed (); /* EMIT SIGNAL */
- if (_session.transport_stopped() && src != 0 && src != this && gain_automation_recording()) {
+ if (_session.transport_stopped() && src != 0 && src != this && _gain_automation_curve.automation_write()) {
_gain_automation_curve.add (_session.transport_frame(), val);
}
@@ -2318,7 +2305,7 @@ IO::automation_snapshot (nframes_t now)
{
if (last_automation_snapshot > now || (now - last_automation_snapshot) > _automation_interval) {
- if (gain_automation_recording()) {
+ if (_gain_automation_curve.automation_write()) {
_gain_automation_curve.rt_add (now, gain());
}