remove pointless version of Stripable::set_presentation_order()
[ardour.git] / libs / ardour / session.cc
index 677aca249e01d21545492539483c130e98e8c07c..043d72d1283bed0edb34d445094a579f4ce5d25f 100644 (file)
@@ -148,7 +148,6 @@ PBD::Signal0<void> Session::Quit;
 PBD::Signal0<void> Session::FeedbackDetected;
 PBD::Signal0<void> Session::SuccessfulGraphSort;
 PBD::Signal2<void,std::string,std::string> Session::VersionMismatch;
-PBD::Signal0<void> Session::EditorMixerChanged;
 
 const framecnt_t Session::bounce_chunk_size = 8192;
 static void clean_up_session_event (SessionEvent* ev) { delete ev; }
@@ -214,6 +213,7 @@ Session::Session (AudioEngine &eng,
        , _exporting (false)
        , _export_rolling (false)
        , _export_preroll (0)
+       , _export_latency (0)
        , _pre_export_mmc_enabled (false)
        , _name (snapshot_name)
        , _is_new (true)
@@ -250,6 +250,7 @@ Session::Session (AudioEngine &eng,
        , _rt_thread_active (false)
        , _rt_emit_pending (false)
        , _ac_thread_active (false)
+       , _latency_recompute_pending (0)
        , step_speed (0)
        , outbound_mtc_timecode_frame (0)
        , next_quarter_frame_to_send (-1)
@@ -2581,6 +2582,7 @@ Session::new_midi_route (RouteGroup* route_group, uint32_t how_many, string name
                                route_group->add (bus);
                        }
 
+                       bus->add_internal_return ();
                        ret.push_back (bus);
                }
 
@@ -3418,6 +3420,7 @@ Session::add_routes_inner (RouteList& new_routes, bool input_auto_connect, bool
 
                r->output()->changed.connect_same_thread (*this, boost::bind (&Session::set_worst_io_latencies_x, this, _1, _2));
                r->processors_changed.connect_same_thread (*this, boost::bind (&Session::route_processors_changed, this, _1));
+               r->processor_latency_changed.connect_same_thread (*this, boost::bind (&Session::queue_latency_recompute, this));
 
                if (r->is_master()) {
                        _master_out = r;
@@ -3450,7 +3453,7 @@ Session::add_routes_inner (RouteList& new_routes, bool input_auto_connect, bool
 
                                if (order == PresentationInfo::max_order) {
                                        /* just add to the end */
-                                       r->set_presentation_order_explicit (n_routes + added);
+                                       r->set_presentation_order (n_routes + added, false);
                                        DEBUG_TRACE (DEBUG::OrderKeys, string_compose ("group order not set, set to NR %1 + %2 = %3\n", n_routes, added, n_routes + added));
                                } else {
                                        r->set_presentation_order (order + added);
@@ -6838,6 +6841,16 @@ Session::auto_connect_route (boost::shared_ptr<Route> route, bool connect_inputs
        }
 }
 
+void
+Session::queue_latency_recompute ()
+{
+       g_atomic_int_inc (&_latency_recompute_pending);
+       if (pthread_mutex_trylock (&_auto_connect_mutex) == 0) {
+               pthread_cond_signal (&_auto_connect_cond);
+               pthread_mutex_unlock (&_auto_connect_mutex);
+       }
+}
+
 void
 Session::auto_connect (const AutoConnectRequest& ar)
 {
@@ -7003,59 +7016,21 @@ Session::auto_connect_thread_run ()
                        }
                }
 
-               pthread_cond_wait (&_auto_connect_cond, &_auto_connect_mutex);
-       }
-       pthread_mutex_unlock (&_auto_connect_mutex);
-}
-
-void
-Session::clear_stripable_selection ()
-{
-       StripableList sl;
-       get_stripables (sl);
-
-       for (StripableList::iterator si = sl.begin(); si != sl.end(); ++si) {
-               (*si)->presentation_info().set_selected (false);
-       }
-
-}
-
-void
-Session::toggle_stripable_selection (boost::shared_ptr<Stripable> s)
-{
-       s->presentation_info().set_selected (!s->presentation_info().selected());
-}
-
-void
-Session::add_stripable_selection (boost::shared_ptr<Stripable> s)
-{
-       if (!s->presentation_info().selected ()) {
-               s->presentation_info().set_selected (true);
-       }
-}
-
-void
-Session::set_stripable_selection (boost::shared_ptr<Stripable> s)
-{
-       StripableList sl;
-       bool change = false;
-
-       get_stripables (sl);
-
-       for (StripableList::iterator si = sl.begin(); si != sl.end(); ++si) {
-               if ((*si)->presentation_info().selected()) {
-                       change = true;
+               if (!actively_recording ()) { // might not be needed,
+                       /* this is only used for updating plugin latencies, the
+                        * graph does not change. so it's safe in general.
+                        * BUT..
+                        * .. update_latency_compensation () entails set_capture_offset()
+                        * which calls Diskstream::set_capture_offset () which
+                        * modifies the capture offset... which can be a proplem
+                        * in "prepare_to_stop"
+                        */
+                       while (g_atomic_int_and (&_latency_recompute_pending, 0)) {
+                               update_latency_compensation ();
+                       }
                }
 
-               (*si)->presentation_info().set_selected (false);
-       }
-
-       if (!s->presentation_info().selected()) {
-               change = true;
-               s->presentation_info().set_selected (true);
-       }
-
-       if (change) {
-               // PresentationInfo::SelectionChange (); /* EMIT SIGNAL */
+               pthread_cond_wait (&_auto_connect_cond, &_auto_connect_mutex);
        }
+       pthread_mutex_unlock (&_auto_connect_mutex);
 }