mirror of
https://github.com/Ardour/ardour.git
synced 2026-01-06 21:55:43 +01:00
OSC: make sure initialization is complete before we allow periodic to run
This commit is contained in:
parent
07e869fda8
commit
f1632fcfd2
9 changed files with 43 additions and 18 deletions
|
|
@ -1596,7 +1596,7 @@ OSC::set_surface (uint32_t b_size, uint32_t strips, uint32_t fb, uint32_t gm, ui
|
|||
// set bank and strip feedback
|
||||
set_bank(s->bank, msg);
|
||||
|
||||
global_feedback (s->feedback, get_address (msg), s->gainmode);
|
||||
global_feedback (*s, get_address (msg));
|
||||
sel_send_pagesize (se_size, msg);
|
||||
sel_plug_pagesize (pi_size, msg);
|
||||
return 0;
|
||||
|
|
@ -1640,7 +1640,7 @@ OSC::set_surface_feedback (uint32_t fb, lo_message msg)
|
|||
set_bank(s->bank, msg);
|
||||
|
||||
// Set global/master feedback
|
||||
global_feedback (s->feedback, get_address (msg), s->gainmode);
|
||||
global_feedback (*s, get_address (msg));
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -1654,7 +1654,7 @@ OSC::set_surface_gainmode (uint32_t gm, lo_message msg)
|
|||
set_bank(s->bank, msg);
|
||||
|
||||
// Set global/master feedback
|
||||
global_feedback (s->feedback, get_address (msg), s->gainmode);
|
||||
global_feedback (*s, get_address (msg));
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -1729,24 +1729,24 @@ OSC::get_surface (lo_address addr)
|
|||
_set_bank(s.bank, addr);
|
||||
|
||||
// Set global/master feedback
|
||||
global_feedback (s.feedback, addr, s.gainmode);
|
||||
global_feedback (s, addr);
|
||||
|
||||
return &_surface[_surface.size() - 1];
|
||||
}
|
||||
|
||||
// setup global feedback for a surface
|
||||
void
|
||||
OSC::global_feedback (bitset<32> feedback, lo_address addr, uint32_t gainmode)
|
||||
OSC::global_feedback (OSCSurface sur, lo_address addr)
|
||||
{
|
||||
// first destroy global observer for this surface
|
||||
GlobalObservers::iterator x;
|
||||
for (x = global_observers.begin(); x != global_observers.end();) {
|
||||
|
||||
OSCGlobalObserver* ro;
|
||||
OSCGlobalObserver* go;
|
||||
|
||||
if ((ro = dynamic_cast<OSCGlobalObserver*>(*x)) != 0) {
|
||||
if ((go = dynamic_cast<OSCGlobalObserver*>(*x)) != 0) {
|
||||
|
||||
int res = strcmp(lo_address_get_url(ro->address()), lo_address_get_url(addr));
|
||||
int res = strcmp(lo_address_get_url(go->address()), lo_address_get_url(addr));
|
||||
|
||||
if (res == 0) {
|
||||
delete *x;
|
||||
|
|
@ -1758,9 +1758,10 @@ OSC::global_feedback (bitset<32> feedback, lo_address addr, uint32_t gainmode)
|
|||
++x;
|
||||
}
|
||||
}
|
||||
std::bitset<32> feedback = sur.feedback;
|
||||
if (feedback[4] || feedback[3] || feedback[5] || feedback[6]) {
|
||||
// create a new Global Observer for this surface
|
||||
OSCGlobalObserver* o = new OSCGlobalObserver (*session, addr, gainmode, /*s->*/feedback);
|
||||
OSCGlobalObserver* o = new OSCGlobalObserver (*session, &sur);
|
||||
global_observers.push_back (o);
|
||||
}
|
||||
}
|
||||
|
|
@ -4784,7 +4785,7 @@ OSC::periodic (void)
|
|||
for (uint32_t it = 0; it < _surface.size(); it++) {
|
||||
OSCSurface* sur = &_surface[it];
|
||||
lo_address addr = lo_address_new_from_url (sur->remote_url.c_str());
|
||||
global_feedback (sur->feedback, addr, sur->gainmode);
|
||||
global_feedback (*sur, addr);
|
||||
}
|
||||
global_init = false;
|
||||
tick = true;
|
||||
|
|
|
|||
|
|
@ -240,7 +240,7 @@ class OSC : public ARDOUR::ControlProtocol, public AbstractUI<OSCUIRequest>
|
|||
int check_surface (lo_message msg);
|
||||
uint32_t get_sid (boost::shared_ptr<ARDOUR::Stripable> strip, lo_address addr);
|
||||
boost::shared_ptr<ARDOUR::Stripable> get_strip (uint32_t ssid, lo_address addr);
|
||||
void global_feedback (std::bitset<32> feedback, lo_address addr, uint32_t gainmode);
|
||||
void global_feedback (OSCSurface sur, lo_address addr);
|
||||
|
||||
void send_current_value (const char* path, lo_arg** argv, int argc, lo_message msg);
|
||||
void current_value_query (const char* path, size_t len, lo_arg **argv, int argc, lo_message msg);
|
||||
|
|
|
|||
|
|
@ -60,6 +60,7 @@ OSCCueObserver::OSCCueObserver (boost::shared_ptr<Stripable> s, std::vector<boos
|
|||
|
||||
OSCCueObserver::~OSCCueObserver ()
|
||||
{
|
||||
tick_enable = false;
|
||||
|
||||
strip_connections.drop_connections ();
|
||||
send_end ();
|
||||
|
|
|
|||
|
|
@ -36,12 +36,15 @@ using namespace PBD;
|
|||
using namespace ARDOUR;
|
||||
using namespace ArdourSurface;
|
||||
|
||||
OSCGlobalObserver::OSCGlobalObserver (Session& s, lo_address a, uint32_t gm, std::bitset<32> fb)
|
||||
: gainmode (gm)
|
||||
,feedback (fb)
|
||||
OSCGlobalObserver::OSCGlobalObserver (Session& s, ArdourSurface::OSC::OSCSurface* su)
|
||||
: sur (su)
|
||||
,_init (true)
|
||||
{
|
||||
addr = lo_address_new (lo_address_get_hostname(a) , lo_address_get_port(a));
|
||||
addr = lo_address_new_from_url (sur->remote_url.c_str());
|
||||
//addr = lo_address_new (lo_address_get_hostname(a) , lo_address_get_port(a));
|
||||
session = &s;
|
||||
gainmode = sur->gainmode;
|
||||
feedback = sur->feedback;
|
||||
_last_frame = -1;
|
||||
if (feedback[4]) {
|
||||
|
||||
|
|
@ -117,10 +120,12 @@ OSCGlobalObserver::OSCGlobalObserver (Session& s, lo_address a, uint32_t gm, std
|
|||
* Maybe (many) more
|
||||
*/
|
||||
}
|
||||
_init = false;
|
||||
}
|
||||
|
||||
OSCGlobalObserver::~OSCGlobalObserver ()
|
||||
{
|
||||
_init = true;
|
||||
|
||||
// need to add general zero everything messages
|
||||
strip_connections.drop_connections ();
|
||||
|
|
@ -132,6 +137,9 @@ OSCGlobalObserver::~OSCGlobalObserver ()
|
|||
void
|
||||
OSCGlobalObserver::tick ()
|
||||
{
|
||||
if (_init) {
|
||||
return;
|
||||
}
|
||||
framepos_t now_frame = session->transport_frame();
|
||||
if (now_frame != _last_frame) {
|
||||
if (feedback[6]) { // timecode enabled
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@ class OSCGlobalObserver
|
|||
{
|
||||
|
||||
public:
|
||||
OSCGlobalObserver (ARDOUR::Session& s, lo_address addr, uint32_t gainmode, std::bitset<32> feedback);
|
||||
OSCGlobalObserver (ARDOUR::Session& s, ArdourSurface::OSC::OSCSurface* su);
|
||||
~OSCGlobalObserver ();
|
||||
|
||||
lo_address address() const { return addr; };
|
||||
|
|
@ -49,7 +49,8 @@ class OSCGlobalObserver
|
|||
Monitor,
|
||||
};
|
||||
|
||||
|
||||
ArdourSurface::OSC::OSCSurface* sur;
|
||||
bool _init;
|
||||
lo_address addr;
|
||||
std::string path;
|
||||
uint32_t gainmode;
|
||||
|
|
|
|||
|
|
@ -43,6 +43,7 @@ OSCRouteObserver::OSCRouteObserver (boost::shared_ptr<Stripable> s, uint32_t ss,
|
|||
,ssid (ss)
|
||||
,sur (su)
|
||||
,_last_gain (0.0)
|
||||
,_init (true)
|
||||
{
|
||||
addr = lo_address_new_from_url (sur->remote_url.c_str());
|
||||
gainmode = sur->gainmode;
|
||||
|
|
@ -109,11 +110,13 @@ OSCRouteObserver::OSCRouteObserver (boost::shared_ptr<Stripable> s, uint32_t ss,
|
|||
send_change_message ("/strip/pan_stereo_position", _strip->pan_azimuth_control());
|
||||
}
|
||||
}
|
||||
_init = false;
|
||||
tick();
|
||||
}
|
||||
|
||||
OSCRouteObserver::~OSCRouteObserver ()
|
||||
{
|
||||
_init = true;
|
||||
|
||||
strip_connections.drop_connections ();
|
||||
if (sur->no_clear) {
|
||||
|
|
@ -163,6 +166,9 @@ OSCRouteObserver::~OSCRouteObserver ()
|
|||
void
|
||||
OSCRouteObserver::tick ()
|
||||
{
|
||||
if (_init) {
|
||||
return;
|
||||
}
|
||||
if (feedback[7] || feedback[8] || feedback[9]) { // meters enabled
|
||||
// the only meter here is master
|
||||
float now_meter;
|
||||
|
|
|
|||
|
|
@ -59,6 +59,7 @@ class OSCRouteObserver
|
|||
uint32_t gain_timeout;
|
||||
uint32_t trim_timeout;
|
||||
float _last_gain;
|
||||
bool _init;
|
||||
ARDOUR::AutoState as;
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -54,8 +54,9 @@ OSCSelectObserver::OSCSelectObserver (boost::shared_ptr<Stripable> s, lo_address
|
|||
,sur (su)
|
||||
,nsends (0)
|
||||
,_last_gain (0.0)
|
||||
,_init (true)
|
||||
{
|
||||
addr = lo_address_new (lo_address_get_hostname(a) , lo_address_get_port(a));
|
||||
addr = lo_address_new_from_url (sur->remote_url.c_str());
|
||||
gainmode = sur->gainmode;
|
||||
feedback = sur->feedback;
|
||||
as = ARDOUR::Off;
|
||||
|
|
@ -173,12 +174,14 @@ OSCSelectObserver::OSCSelectObserver (boost::shared_ptr<Stripable> s, lo_address
|
|||
change_message ("/select/comp_makeup", _strip->comp_makeup_controllable());
|
||||
}
|
||||
|
||||
_init = false;
|
||||
|
||||
tick();
|
||||
}
|
||||
|
||||
OSCSelectObserver::~OSCSelectObserver ()
|
||||
{
|
||||
_init = true;
|
||||
strip_connections.drop_connections ();
|
||||
// all strip buttons should be off and faders 0 and etc.
|
||||
send_float ("/select/expand", 0);
|
||||
|
|
@ -427,6 +430,9 @@ OSCSelectObserver::plugin_end ()
|
|||
void
|
||||
OSCSelectObserver::tick ()
|
||||
{
|
||||
if (_init) {
|
||||
return;
|
||||
}
|
||||
if (feedback[7] || feedback[8] || feedback[9]) { // meters enabled
|
||||
float now_meter;
|
||||
if (_strip->peak_meter()) {
|
||||
|
|
|
|||
|
|
@ -66,6 +66,7 @@ class OSCSelectObserver
|
|||
float _last_meter;
|
||||
uint32_t nsends;
|
||||
float _last_gain;
|
||||
bool _init;
|
||||
float _comp_redux;
|
||||
ARDOUR::AutoState as;
|
||||
uint32_t send_size;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue