X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fsurfaces%2Ffaderport%2Ffaderport.cc;h=72190c1e8a0370970723688de1d5f832d41ae39c;hb=ba5c14036d8a9ecb0b23400ce556612de2209149;hp=1b3e4a3ac8dd3e6db240d376c77a69a232636cd4;hpb=6fb91b1ac25bbeb282228822efbdc91b62941f6e;p=ardour.git diff --git a/libs/surfaces/faderport/faderport.cc b/libs/surfaces/faderport/faderport.cc index 1b3e4a3ac8..72190c1e8a 100644 --- a/libs/surfaces/faderport/faderport.cc +++ b/libs/surfaces/faderport/faderport.cc @@ -108,9 +108,6 @@ FaderPort::FaderPort (Session& s) session->engine().make_port_name_non_relative (outp->name()) ); - - StripableSelectionChanged.connect (selection_connection, MISSING_INVALIDATOR, boost::bind (&FaderPort::gui_track_selection_changed, this, _1), this); - /* Catch port connections and disconnections */ ARDOUR::AudioEngine::instance()->PortConnectedOrDisconnected.connect (port_connection, MISSING_INVALIDATOR, boost::bind (&FaderPort::connection_handler, this, _1, _2, _3, _4, _5), this); @@ -203,6 +200,7 @@ FaderPort::~FaderPort () if (_input_port) { DEBUG_TRACE (DEBUG::FaderPort, string_compose ("unregistering input port %1\n", boost::shared_ptr(_input_port)->name())); + Glib::Threads::Mutex::Lock em (AudioEngine::instance()->process_lock()); AudioEngine::instance()->unregister_port (_input_port); _input_port.reset (); } @@ -210,6 +208,7 @@ FaderPort::~FaderPort () if (_output_port) { _output_port->drain (10000, 250000); /* check every 10 msecs, wait up to 1/4 second for the port to drain */ DEBUG_TRACE (DEBUG::FaderPort, string_compose ("unregistering output port %1\n", boost::shared_ptr(_output_port)->name())); + Glib::Threads::Mutex::Lock em (AudioEngine::instance()->process_lock()); AudioEngine::instance()->unregister_port (_output_port); _output_port.reset (); } @@ -287,19 +286,12 @@ FaderPort::stop () void FaderPort::thread_init () { - struct sched_param rtparam; - pthread_set_name (event_loop_name().c_str()); PBD::notify_event_loops_about_thread_creation (pthread_self(), event_loop_name(), 2048); ARDOUR::SessionEvent::create_per_thread_pool (event_loop_name(), 128); - memset (&rtparam, 0, sizeof (rtparam)); - rtparam.sched_priority = 9; /* XXX should be relative to audio (JACK) thread */ - - if (pthread_setschedparam (pthread_self(), SCHED_FIFO, &rtparam) != 0) { - // do we care? not particularly. - } + set_thread_priority (); } void @@ -382,7 +374,7 @@ FaderPort::button_handler (MIDI::Parser &, MIDI::EventTwoBytes* tb) if (tb->value) { gain->start_touch (now); } else { - gain->stop_touch (true, now); + gain->stop_touch (now); } } } @@ -462,9 +454,9 @@ FaderPort::encoder_handler (MIDI::Parser &, MIDI::pitchbend_t pb) if ((button_state & trim_modifier) == trim_modifier ) { // mod+encoder = input trim boost::shared_ptr trim = _current_stripable->trim_control (); if (trim) { - float val = trim->get_user(); //for gain elements, the "user" value is in dB - val += delta; - trim->set_user(val); + float val = accurate_coefficient_to_dB (trim->get_value()); + val += delta * .5f; // use 1/2 dB Steps -20..+20 + trim->set_value (dB_to_coefficient (val), Controllable::UseGroup); } } else if (width_modifier && ((button_state & width_modifier) == width_modifier)) { ardour_pan_width (delta); @@ -835,11 +827,10 @@ FaderPort::set_state (const XMLNode& node, int version) for (XMLNodeList::const_iterator n = node.children().begin(); n != node.children().end(); ++n) { if ((*n)->name() == X_("Button")) { - XMLProperty const * prop = (*n)->property (X_("id")); - if (!prop) { + int32_t xid; + if (!(*n)->get_property (X_("id"), xid)) { continue; } - int xid = atoi (prop->value()); ButtonMap::iterator b = buttons.find (ButtonID (xid)); if (b == buttons.end()) { continue; @@ -1041,13 +1032,8 @@ FaderPort::Button::set_led_state (boost::shared_ptr port, bool onoff int FaderPort::Button::set_state (XMLNode const& node) { - const XMLProperty* prop = node.property ("id"); - if (!prop) { - return -1; - } - - int xid = atoi (prop->value()); - if (xid != id) { + int32_t xid; + if (!node.get_property ("id", xid) || xid != id) { return -1; } @@ -1059,16 +1045,16 @@ FaderPort::Button::set_state (XMLNode const& node) state_pairs.push_back (make_pair (string ("long"), LongPress)); for (vector::const_iterator sp = state_pairs.begin(); sp != state_pairs.end(); ++sp) { - string propname; - propname = sp->first + X_("-press"); - if ((prop = node.property (propname)) != 0) { - set_action (prop->value(), true, sp->second); + string propname = sp->first + X_("-press"); + string value; + if (node.get_property (propname.c_str(), value)) { + set_action (value, true, sp->second); } propname = sp->first + X_("-release"); - if ((prop = node.property (propname)) != 0) { - set_action (prop->value(), false, sp->second); + if (node.get_property (propname.c_str(), value)) { + set_action (value, false, sp->second); } } @@ -1079,10 +1065,8 @@ XMLNode& FaderPort::Button::get_state () const { XMLNode* node = new XMLNode (X_("Button")); - char buf[16]; - snprintf (buf, sizeof (buf), "%d", id); - node->add_property (X_("id"), buf); + node->set_property (X_("id"), to_string(id)); ToDoMap::const_iterator x; ToDo null; @@ -1098,13 +1082,13 @@ FaderPort::Button::get_state () const for (vector::const_iterator sp = state_pairs.begin(); sp != state_pairs.end(); ++sp) { if ((x = on_press.find (sp->second)) != on_press.end()) { if (x->second.type == NamedAction) { - node->add_property (string (sp->first + X_("-press")).c_str(), x->second.action_name); + node->set_property (string (sp->first + X_("-press")).c_str(), x->second.action_name); } } if ((x = on_release.find (sp->second)) != on_release.end()) { if (x->second.type == NamedAction) { - node->add_property (string (sp->first + X_("-release")).c_str(), x->second.action_name); + node->set_property (string (sp->first + X_("-release")).c_str(), x->second.action_name); } } } @@ -1113,14 +1097,9 @@ FaderPort::Button::get_state () const } void -FaderPort::gui_track_selection_changed (StripableNotificationListPtr stripables) +FaderPort::stripable_selection_changed () { - boost::shared_ptr s = ControlProtocol::first_selected_stripable(); - cerr << "Faderport: GUI track selection changed, first = " - << (s ? s->name() : " --none-- ") - << endl; - - set_current_stripable (s); + set_current_stripable (ControlProtocol::first_selected_stripable()); } void