copy plugin state to all instances when instantiating.
[ardour.git] / libs / ardour / session.cc
index edae568645e8e92634b445eb054a7567b76952e7..fec12290932d8e489d0f6d4422b600ee6b4487cd 100644 (file)
@@ -125,6 +125,7 @@ using namespace PBD;
 
 bool Session::_disable_all_loaded_plugins = false;
 bool Session::_bypass_all_loaded_plugins = false;
+guint Session::_name_id_counter = 0;
 
 PBD::Signal1<int,uint32_t> Session::AudioEngineSetupRequired;
 PBD::Signal1<void,std::string> Session::Dialog;
@@ -311,6 +312,8 @@ Session::Session (AudioEngine &eng,
        pthread_mutex_init (&_rt_emit_mutex, 0);
        pthread_cond_init (&_rt_emit_cond, 0);
 
+       init_name_id_counter (1); // reset for new sessions, start at 1
+
        pre_engine_init (fullpath);
 
        setup_lua ();
@@ -469,6 +472,24 @@ Session::~Session ()
        destroy ();
 }
 
+unsigned int
+Session::next_name_id ()
+{
+       return g_atomic_int_add (&_name_id_counter, 1);
+}
+
+unsigned int
+Session::name_id_counter ()
+{
+       return g_atomic_int_get (&_name_id_counter);
+}
+
+void
+Session::init_name_id_counter (guint n)
+{
+       g_atomic_int_set (&_name_id_counter, n);
+}
+
 int
 Session::ensure_engine (uint32_t desired_sample_rate)
 {
@@ -2363,6 +2384,10 @@ Session::new_midi_track (const ChanCount& input, const ChanCount& output, boost:
                                goto failed;
                        }
 
+                       if (Profile->get_mixbus ()) {
+                               track->set_strict_io (true);
+                       }
+
                        track->use_new_diskstream();
 
 #ifdef BOOST_SP_ENABLE_DEBUG_HOOKS
@@ -2458,6 +2483,10 @@ Session::new_midi_route (RouteGroup* route_group, uint32_t how_many, string name
                                goto failure;
                        }
 
+                       if (Profile->get_mixbus ()) {
+                               bus->set_strict_io (true);
+                       }
+
 #ifdef BOOST_SP_ENABLE_DEBUG_HOOKS
                        // boost_debug_shared_ptr_mark_interesting (bus.get(), "Route");
 #endif
@@ -2988,6 +3017,11 @@ Session::new_audio_track (int input_channels, int output_channels, TrackMode mod
                                goto failed;
                        }
 
+                       if (Profile->get_mixbus ()) {
+                               track->set_strict_io (true);
+                       }
+
+
                        if (ARDOUR::Profile->get_trx ()) {
                                // TRACKS considers it's not a USE CASE, it's
                                // a piece of behavior of the session model:
@@ -3097,6 +3131,10 @@ Session::new_audio_route (int input_channels, int output_channels, RouteGroup* r
                                goto failure;
                        }
 
+                       if (Profile->get_mixbus ()) {
+                               bus->set_strict_io (true);
+                       }
+
 #ifdef BOOST_SP_ENABLE_DEBUG_HOOKS
                        // boost_debug_shared_ptr_mark_interesting (bus.get(), "Route");
 #endif
@@ -5898,6 +5936,7 @@ Session::write_one_track (Track& track, framepos_t start, framepos_t end,
        }
 
        unblock_processing ();
+       itt.done = true;
 
        return result;
 }