summaryrefslogtreecommitdiff
path: root/libs/ardour/auditioner.cc
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2007-01-09 23:24:54 +0000
committerDavid Robillard <d@drobilla.net>2007-01-09 23:24:54 +0000
commit532f6aad4ac79ca15d69deccd18fca90e444c437 (patch)
tree0d4ca5449af8eb48ad56e163efcab42c4656e8de /libs/ardour/auditioner.cc
parentef6b25432d9c46d71b08c0f7d5f2686df428c4e8 (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.cc32
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 ("");
}
}
}