WS: crash bugfix related to missing strip panner
Surface made Ardour crash when a client connected and some session track was not a VCA nor had a panner, like MIDI strips.
This commit is contained in:
parent
7a9d4b1f64
commit
9c08c058a3
@ -65,19 +65,16 @@ WebsocketsDispatcher::update_all_nodes (Client client)
|
|||||||
|
|
||||||
ValueVector strip_desc = ValueVector ();
|
ValueVector strip_desc = ValueVector ();
|
||||||
strip_desc.push_back (strip.name ());
|
strip_desc.push_back (strip.name ());
|
||||||
strip_desc.push_back (strip.is_vca ());
|
strip_desc.push_back (strip.has_pan ());
|
||||||
|
|
||||||
update (client, Node::strip_description, strip_addr, strip_desc);
|
update (client, Node::strip_description, strip_addr, strip_desc);
|
||||||
|
|
||||||
update (client, Node::strip_gain, strip_id, strip.gain ());
|
update (client, Node::strip_gain, strip_id, strip.gain ());
|
||||||
update (client, Node::strip_mute, strip_id, strip.mute ());
|
update (client, Node::strip_mute, strip_id, strip.mute ());
|
||||||
|
|
||||||
// Pan and plugins not available in VCAs
|
if (strip.has_pan ()) {
|
||||||
if (strip.is_vca ()) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
update (client, Node::strip_pan, strip_id, strip.pan ());
|
update (client, Node::strip_pan, strip_id, strip.pan ());
|
||||||
|
}
|
||||||
|
|
||||||
for (ArdourMixerStrip::PluginMap::iterator it = strip.plugins ().begin (); it != strip.plugins ().end (); ++it) {
|
for (ArdourMixerStrip::PluginMap::iterator it = strip.plugins ().begin (); it != strip.plugins ().end (); ++it) {
|
||||||
uint32_t plugin_id = it->first;
|
uint32_t plugin_id = it->first;
|
||||||
|
@ -121,11 +121,6 @@ ArdourMixerPlugin::param_value (boost::shared_ptr<ARDOUR::AutomationControl> con
|
|||||||
ArdourMixerStrip::ArdourMixerStrip (boost::shared_ptr<ARDOUR::Stripable> stripable, PBD::EventLoop* event_loop)
|
ArdourMixerStrip::ArdourMixerStrip (boost::shared_ptr<ARDOUR::Stripable> stripable, PBD::EventLoop* event_loop)
|
||||||
: _stripable (stripable)
|
: _stripable (stripable)
|
||||||
{
|
{
|
||||||
if (is_vca ()) {
|
|
||||||
/* no plugins to handle */
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
boost::shared_ptr<Route> route = boost::dynamic_pointer_cast<Route> (_stripable);
|
boost::shared_ptr<Route> route = boost::dynamic_pointer_cast<Route> (_stripable);
|
||||||
|
|
||||||
if (!route) {
|
if (!route) {
|
||||||
@ -188,6 +183,12 @@ ArdourMixerStrip::set_gain (double db)
|
|||||||
_stripable->gain_control ()->set_value (from_db (db), PBD::Controllable::NoGroup);
|
_stripable->gain_control ()->set_value (from_db (db), PBD::Controllable::NoGroup);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
ArdourMixerStrip::has_pan () const
|
||||||
|
{
|
||||||
|
return _stripable->pan_azimuth_control () != 0;
|
||||||
|
}
|
||||||
|
|
||||||
double
|
double
|
||||||
ArdourMixerStrip::pan () const
|
ArdourMixerStrip::pan () const
|
||||||
{
|
{
|
||||||
@ -224,12 +225,6 @@ ArdourMixerStrip::set_mute (bool mute)
|
|||||||
_stripable->mute_control ()->set_value (mute ? 1.0 : 0.0, PBD::Controllable::NoGroup);
|
_stripable->mute_control ()->set_value (mute ? 1.0 : 0.0, PBD::Controllable::NoGroup);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
|
||||||
ArdourMixerStrip::is_vca () const
|
|
||||||
{
|
|
||||||
return _stripable->presentation_info ().flags () & ARDOUR::PresentationInfo::VCA;
|
|
||||||
}
|
|
||||||
|
|
||||||
float
|
float
|
||||||
ArdourMixerStrip::meter_level_db () const
|
ArdourMixerStrip::meter_level_db () const
|
||||||
{
|
{
|
||||||
|
@ -83,14 +83,13 @@ public:
|
|||||||
double gain () const;
|
double gain () const;
|
||||||
void set_gain (double);
|
void set_gain (double);
|
||||||
|
|
||||||
|
bool has_pan () const;
|
||||||
double pan () const;
|
double pan () const;
|
||||||
void set_pan (double);
|
void set_pan (double);
|
||||||
|
|
||||||
bool mute () const;
|
bool mute () const;
|
||||||
void set_mute (bool);
|
void set_mute (bool);
|
||||||
|
|
||||||
bool is_vca () const;
|
|
||||||
|
|
||||||
std::string name () const;
|
std::string name () const;
|
||||||
|
|
||||||
float meter_level_db () const;
|
float meter_level_db () const;
|
||||||
|
@ -88,8 +88,9 @@ import { createRootContainer, Container, Dialog, Label, Button, Toggle,
|
|||||||
plugins.classList.add('strip-plugins');
|
plugins.classList.add('strip-plugins');
|
||||||
plugins.appendTo(container);
|
plugins.appendTo(container);
|
||||||
|
|
||||||
if (strip.isVca || (strip.plugins.length == 0)) {
|
if (strip.plugins.length == 0) {
|
||||||
plugins.classList.add('disabled');
|
plugins.classList.add('disabled');
|
||||||
|
plugins.element.style.visibility = 'hidden';
|
||||||
} else {
|
} else {
|
||||||
plugins.callback = () => openPlugins (strip);
|
plugins.callback = () => openPlugins (strip);
|
||||||
}
|
}
|
||||||
@ -97,8 +98,10 @@ import { createRootContainer, Container, Dialog, Label, Button, Toggle,
|
|||||||
const pan = new PanKnob();
|
const pan = new PanKnob();
|
||||||
pan.appendTo(container);
|
pan.appendTo(container);
|
||||||
|
|
||||||
if (!strip.isVca) {
|
if (strip.hasPan) {
|
||||||
pan.bindTo(strip, 'pan');
|
pan.bindTo(strip, 'pan');
|
||||||
|
} else {
|
||||||
|
pan.element.style.visibility = 'hidden';
|
||||||
}
|
}
|
||||||
|
|
||||||
const mute = new Toggle();
|
const mute = new Toggle();
|
||||||
@ -123,12 +126,6 @@ import { createRootContainer, Container, Dialog, Label, Button, Toggle,
|
|||||||
label.text = strip.name;
|
label.text = strip.name;
|
||||||
label.classList.add('strip-label');
|
label.classList.add('strip-label');
|
||||||
label.appendTo(container);
|
label.appendTo(container);
|
||||||
|
|
||||||
if (strip.isVca) {
|
|
||||||
// hide plugins and pan keeping layout
|
|
||||||
pan.element.style.visibility = 'hidden';
|
|
||||||
plugins.element.style.visibility = 'hidden';
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function openPlugins (strip) {
|
function openPlugins (strip) {
|
||||||
|
@ -33,7 +33,7 @@ export default class Strip extends AddressableComponent {
|
|||||||
super(parent, addr);
|
super(parent, addr);
|
||||||
this._plugins = {};
|
this._plugins = {};
|
||||||
this._name = desc[0];
|
this._name = desc[0];
|
||||||
this._isVca = desc[1];
|
this._hasPan = desc[1];
|
||||||
this._meter = 0;
|
this._meter = 0;
|
||||||
this._gain = 0;
|
this._gain = 0;
|
||||||
this._pan = 0;
|
this._pan = 0;
|
||||||
@ -48,8 +48,8 @@ export default class Strip extends AddressableComponent {
|
|||||||
return this._name;
|
return this._name;
|
||||||
}
|
}
|
||||||
|
|
||||||
get isVca () {
|
get hasPan () {
|
||||||
return this._isVca;
|
return this._hasPan;
|
||||||
}
|
}
|
||||||
|
|
||||||
get meter () {
|
get meter () {
|
||||||
|
Loading…
Reference in New Issue
Block a user