Consolidate meter-type state and API

In theory different UIs can show different meter-types, so it
can make sense to maintain the type in different places.
MeterType is a bit-set and PeakMeter implementation provides for this.

However, this is not being used, and the current implementation
was rather fragmented, cross-connected signals to keep types in sync,
allowed inconsistent meter-types in GUI and backend.

MeterType is now kept by meter itself, however it is still
saved/restored as part of the Route state.

N.B. This change breaks the API, various methods have been renamed
for consistency.
This commit is contained in:
Robin Gareus 2019-06-09 17:47:21 +02:00
parent 1cec6d1250
commit cd5b0819bf
Signed by: rgareus
GPG Key ID: A090BCE02CF57F04
5 changed files with 35 additions and 22 deletions

View File

@ -74,11 +74,11 @@ public:
float meter_level (uint32_t n, MeterType type);
void set_type(MeterType t);
MeterType get_type() { return _meter_type; }
void set_meter_type (MeterType t);
MeterType meter_type () const { return _meter_type; }
PBD::Signal1<void, MeterType> TypeChanged;
PBD::Signal1<void, MeterType> MeterTypeChanged;
protected:
XMLNode& state ();

View File

@ -193,8 +193,8 @@ public:
void emit_pending_signals ();
MeterPoint meter_point() const { return _pending_meter_point; }
void set_meter_type (MeterType t) { _meter_type = t; }
MeterType meter_type() const { return _meter_type; }
void set_meter_type (MeterType t);
MeterType meter_type () const;
void set_disk_io_point (DiskIOPoint);
DiskIOPoint disk_io_point() const { return _disk_io_point; }
@ -659,7 +659,6 @@ protected:
MeterPoint _meter_point;
MeterPoint _pending_meter_point;
MeterType _meter_type;
bool _denormal_protection;

View File

@ -1554,7 +1554,8 @@ LuaBindings::common (lua_State* L)
.deriveWSPtrClass <PeakMeter, Processor> ("PeakMeter")
.addFunction ("meter_level", &PeakMeter::meter_level)
.addFunction ("set_type", &PeakMeter::set_type)
.addFunction ("set_meter_type", &PeakMeter::set_meter_type)
.addFunction ("meter_type", &PeakMeter::meter_type)
.addFunction ("reset_max", &PeakMeter::reset_max)
.endClass ()

View File

@ -403,7 +403,7 @@ PeakMeter::meter_level(uint32_t n, MeterType type) {
}
void
PeakMeter::set_type(MeterType t)
PeakMeter::set_meter_type (MeterType t)
{
if (t == _meter_type) {
return;
@ -436,7 +436,7 @@ PeakMeter::set_type(MeterType t)
}
}
TypeChanged(t);
MeterTypeChanged (t); /* EMIT SIGNAL */
}
XMLNode&

View File

@ -103,7 +103,6 @@ Route::Route (Session& sess, string name, PresentationInfo::Flag flag, DataType
, _pending_signals (0)
, _meter_point (MeterPostFader)
, _pending_meter_point (MeterPostFader)
, _meter_type (MeterPeak)
, _denormal_protection (false)
, _recordable (true)
, _have_internal_generator (false)
@ -129,16 +128,6 @@ Route::weakroute () {
int
Route::init ()
{
/* set default meter type */
if (is_master()) {
_meter_type = Config->get_meter_type_master ();
}
else if (dynamic_cast<Track*>(this)) {
_meter_type = Config->get_meter_type_track ();
} else {
_meter_type = Config->get_meter_type_bus ();
}
/* add standard controls */
_gain_control.reset (new GainControl (_session, GainAutomation));
@ -227,6 +216,15 @@ Route::init ()
_meter->set_display_to_user (false);
_meter->activate ();
/* set default meter type */
if (is_master()) {
set_meter_type (Config->get_meter_type_master ());
} else if (dynamic_cast<Track*>(this)) {
set_meter_type (Config->get_meter_type_track ());
} else {
set_meter_type (Config->get_meter_type_bus ());
}
_main_outs.reset (new Delivery (_session, _output, _pannable, _mute_master, _name, Delivery::Main));
_main_outs->activate ();
@ -2457,7 +2455,7 @@ Route::state (bool save_template)
node->set_property (X_("meter-point"), _meter_point);
node->set_property (X_("disk-io-point"), _disk_io_point);
node->set_property (X_("meter-type"), _meter_type);
node->set_property (X_("meter-type"), _meter->meter_type ());
if (_route_group) {
node->set_property (X_("route-group"), _route_group->name());
@ -2626,7 +2624,10 @@ Route::set_state (const XMLNode& node, int version)
set_disk_io_point (diop);
}
node.get_property (X_("meter-type"), _meter_type);
MeterType meter_type;
if (node.get_property (X_("meter-type"), meter_type)) {
set_meter_type (meter_type);
}
_initial_io_setup = false;
@ -5959,6 +5960,18 @@ Route::slavables () const
return rv;
}
void
Route::set_meter_type (MeterType t)
{
_meter->set_meter_type (t);
}
MeterType
Route::meter_type () const
{
return _meter->meter_type ();
}
void
Route::set_disk_io_point (DiskIOPoint diop)
{