remove responsibility for starting AudioEngine from Session
This commit is contained in:
parent
1c672e5191
commit
789f08891b
@ -322,8 +322,6 @@ Session::Session (AudioEngine &eng,
|
|||||||
, _selection (new CoreSelection (*this))
|
, _selection (new CoreSelection (*this))
|
||||||
, _global_locate_pending (false)
|
, _global_locate_pending (false)
|
||||||
{
|
{
|
||||||
uint32_t sr = 0;
|
|
||||||
|
|
||||||
created_with = string_compose ("%1 %2", PROGRAM_NAME, revision);
|
created_with = string_compose ("%1 %2", PROGRAM_NAME, revision);
|
||||||
|
|
||||||
pthread_mutex_init (&_rt_emit_mutex, 0);
|
pthread_mutex_init (&_rt_emit_mutex, 0);
|
||||||
@ -339,20 +337,13 @@ Session::Session (AudioEngine &eng,
|
|||||||
|
|
||||||
setup_lua ();
|
setup_lua ();
|
||||||
|
|
||||||
|
assert (AudioEngine::instance()->running());
|
||||||
|
immediately_post_engine ();
|
||||||
|
|
||||||
if (_is_new) {
|
if (_is_new) {
|
||||||
|
|
||||||
Stateful::loading_state_version = CURRENT_SESSION_FILE_VERSION;
|
Stateful::loading_state_version = CURRENT_SESSION_FILE_VERSION;
|
||||||
|
|
||||||
if (ensure_engine (sr, true)) {
|
|
||||||
destroy ();
|
|
||||||
throw SessionException (_("Cannot connect to audio/midi engine"));
|
|
||||||
}
|
|
||||||
|
|
||||||
// set samplerate for plugins added early
|
|
||||||
// e.g from templates or MB channelstrip
|
|
||||||
set_block_size (_engine.samples_per_cycle());
|
|
||||||
set_sample_rate (_engine.sample_rate());
|
|
||||||
|
|
||||||
if (create (mix_template, bus_profile)) {
|
if (create (mix_template, bus_profile)) {
|
||||||
destroy ();
|
destroy ();
|
||||||
throw SessionException (_("Session initialization failed"));
|
throw SessionException (_("Session initialization failed"));
|
||||||
@ -388,27 +379,10 @@ Session::Session (AudioEngine &eng,
|
|||||||
if (load_state (_current_snapshot_name)) {
|
if (load_state (_current_snapshot_name)) {
|
||||||
throw SessionException (_("Failed to load state"));
|
throw SessionException (_("Failed to load state"));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* try to get sample rate from XML state so that we
|
|
||||||
* can influence the SR if we set up the audio
|
|
||||||
* engine.
|
|
||||||
*/
|
|
||||||
|
|
||||||
if (state_tree) {
|
|
||||||
XMLProperty const * prop;
|
|
||||||
XMLNode const * root (state_tree->root());
|
|
||||||
if ((prop = root->property (X_("sample-rate"))) != 0) {
|
|
||||||
sr = atoi (prop->value());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ensure_engine (sr, false)) {
|
|
||||||
destroy ();
|
|
||||||
throw SessionException (_("Cannot connect to audio/midi engine"));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int err = post_engine_init ();
|
int err = post_engine_init ();
|
||||||
|
|
||||||
if (err) {
|
if (err) {
|
||||||
destroy ();
|
destroy ();
|
||||||
switch (err) {
|
switch (err) {
|
||||||
@ -503,39 +477,6 @@ Session::init_name_id_counter (guint n)
|
|||||||
g_atomic_int_set (&_name_id_counter, n);
|
g_atomic_int_set (&_name_id_counter, n);
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
|
||||||
Session::ensure_engine (uint32_t desired_sample_rate, bool isnew)
|
|
||||||
{
|
|
||||||
if (_engine.current_backend() == 0) {
|
|
||||||
/* backend is unknown ... */
|
|
||||||
boost::optional<int> r = AudioEngineSetupRequired (desired_sample_rate);
|
|
||||||
if (r.get_value_or (-1) != 0) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
} else if (!isnew && _engine.running() && _engine.sample_rate () == desired_sample_rate) {
|
|
||||||
/* keep engine */
|
|
||||||
} else if (_engine.setup_required()) {
|
|
||||||
/* backend is known, but setup is needed */
|
|
||||||
boost::optional<int> r = AudioEngineSetupRequired (desired_sample_rate);
|
|
||||||
if (r.get_value_or (-1) != 0) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
} else if (!_engine.running()) {
|
|
||||||
if (_engine.start()) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* at this point the engine should be running */
|
|
||||||
|
|
||||||
if (!_engine.running()) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return immediately_post_engine ();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
int
|
||||||
Session::immediately_post_engine ()
|
Session::immediately_post_engine ()
|
||||||
{
|
{
|
||||||
@ -586,6 +527,11 @@ Session::immediately_post_engine ()
|
|||||||
* can we do that? */
|
* can we do that? */
|
||||||
_engine.PortRegisteredOrUnregistered.connect_same_thread (*this, boost::bind (&Session::setup_bundles, this));
|
_engine.PortRegisteredOrUnregistered.connect_same_thread (*this, boost::bind (&Session::setup_bundles, this));
|
||||||
|
|
||||||
|
// set samplerate for plugins added early
|
||||||
|
// e.g from templates or MB channelstrip
|
||||||
|
set_block_size (_engine.samples_per_cycle());
|
||||||
|
set_sample_rate (_engine.sample_rate());
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user