diff options
author | David Robillard <d@drobilla.net> | 2007-01-09 23:24:54 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2007-01-09 23:24:54 +0000 |
commit | 532f6aad4ac79ca15d69deccd18fca90e444c437 (patch) | |
tree | 0d4ca5449af8eb48ad56e163efcab42c4656e8de /libs/ardour/auditioner.cc | |
parent | ef6b25432d9c46d71b08c0f7d5f2686df428c4e8 (diff) |
Merged with trunk R1283.
NOTE: Compiles, but broken (crash on adding MIDI track).
git-svn-id: svn://localhost/ardour2/branches/midi@1292 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/auditioner.cc')
-rw-r--r-- | libs/ardour/auditioner.cc | 32 |
1 files changed, 29 insertions, 3 deletions
diff --git a/libs/ardour/auditioner.cc b/libs/ardour/auditioner.cc index 34cf5637b6..7bbc4cd0ba 100644 --- a/libs/ardour/auditioner.cc +++ b/libs/ardour/auditioner.cc @@ -24,6 +24,7 @@ #include <ardour/audio_diskstream.h> #include <ardour/audioregion.h> +#include <ardour/audioengine.h> #include <ardour/route.h> #include <ardour/session.h> #include <ardour/auditioner.h> @@ -43,8 +44,17 @@ Auditioner::Auditioner (Session& s) { string left = Config->get_auditioner_output_left(); string right = Config->get_auditioner_output_right(); + + if (left == "default") { + left = _session.engine().get_nth_physical_output (DataType::AUDIO, 0); + } + + if (right == "default") { + right = _session.engine().get_nth_physical_output (DataType::AUDIO, 1); + } if ((left.length() == 0) && (right.length() == 0)) { + warning << _("no outputs available for auditioner - manual connection required") << endmsg; return; } @@ -77,7 +87,7 @@ AudioPlaylist& Auditioner::prepare_playlist () { // FIXME auditioner is still audio-only - AudioPlaylist* const apl = dynamic_cast<AudioPlaylist*>(_diskstream->playlist()); + boost::shared_ptr<AudioPlaylist> apl = boost::dynamic_pointer_cast<AudioPlaylist>(_diskstream->playlist()); assert(apl); apl->clear (); @@ -184,18 +194,34 @@ Auditioner::play_audition (nframes_t nframes) void Auditioner::output_changed (IOChange change, void* src) { + string phys; + if (change & ConnectionsChanged) { const char ** connections; connections = output (0)->get_connections (); if (connections) { - Config->set_auditioner_output_left (connections[0]); + phys = _session.engine().get_nth_physical_output (DataType::AUDIO, 0); + if (phys != connections[0]) { + Config->set_auditioner_output_left (connections[0]); + } else { + Config->set_auditioner_output_left ("default"); + } free (connections); + } else { + Config->set_auditioner_output_left (""); } connections = output (1)->get_connections (); if (connections) { - Config->set_auditioner_output_right (connections[0]); + phys = _session.engine().get_nth_physical_output (DataType::AUDIO, 1); + if (phys != connections[0]) { + Config->set_auditioner_output_right (connections[0]); + } else { + Config->set_auditioner_output_right ("default"); + } free (connections); + } else { + Config->set_auditioner_output_right (""); } } } |