diff options
Diffstat (limited to 'libs/ardour')
-rw-r--r-- | libs/ardour/ardour/audio_track.h | 1 | ||||
-rw-r--r-- | libs/ardour/ardour/midi_track.h | 1 | ||||
-rw-r--r-- | libs/ardour/ardour/route.h | 3 | ||||
-rw-r--r-- | libs/ardour/ardour/track.h | 4 | ||||
-rw-r--r-- | libs/ardour/audio_track.cc | 20 | ||||
-rw-r--r-- | libs/ardour/auditioner.cc | 18 | ||||
-rw-r--r-- | libs/ardour/midi_track.cc | 12 | ||||
-rw-r--r-- | libs/ardour/route.cc | 31 | ||||
-rw-r--r-- | libs/ardour/session_state.cc | 32 | ||||
-rw-r--r-- | libs/ardour/track.cc | 24 |
10 files changed, 80 insertions, 66 deletions
diff --git a/libs/ardour/ardour/audio_track.h b/libs/ardour/ardour/audio_track.h index be8d988a41..faae97d85a 100644 --- a/libs/ardour/ardour/audio_track.h +++ b/libs/ardour/ardour/audio_track.h @@ -33,7 +33,6 @@ class AudioTrack : public Track { public: AudioTrack (Session&, std::string name, Route::Flag f = Route::Flag (0), TrackMode m = Normal); - AudioTrack (Session&, const XMLNode&, int); ~AudioTrack (); int set_mode (TrackMode m); diff --git a/libs/ardour/ardour/midi_track.h b/libs/ardour/ardour/midi_track.h index 6f8fda78da..1d77889d39 100644 --- a/libs/ardour/ardour/midi_track.h +++ b/libs/ardour/ardour/midi_track.h @@ -36,7 +36,6 @@ class MidiTrack : public Track { public: MidiTrack (Session&, string name, Route::Flag f = Route::Flag (0), TrackMode m = Normal); - MidiTrack (Session&, const XMLNode&, int); ~MidiTrack (); int roll (nframes_t nframes, sframes_t start_frame, sframes_t end_frame, diff --git a/libs/ardour/ardour/route.h b/libs/ardour/ardour/route.h index 60e79a3a66..681d8b7681 100644 --- a/libs/ardour/ardour/route.h +++ b/libs/ardour/ardour/route.h @@ -69,7 +69,6 @@ class Route : public SessionObject, public AutomatableControls, public RouteGrou }; Route (Session&, std::string name, Flag flags = Flag(0), DataType default_type = DataType::AUDIO); - Route (Session&, const XMLNode&, DataType default_type = DataType::AUDIO); virtual ~Route(); boost::shared_ptr<IO> input() const { return _input; } @@ -391,6 +390,8 @@ class Route : public SessionObject, public AutomatableControls, public RouteGrou bool _solo_safe; DataType _default_type; + virtual ChanCount input_streams () const; + protected: virtual XMLNode& state(bool); diff --git a/libs/ardour/ardour/track.h b/libs/ardour/ardour/track.h index eee9f03fe5..2b6704a1cb 100644 --- a/libs/ardour/ardour/track.h +++ b/libs/ardour/ardour/track.h @@ -94,14 +94,14 @@ class Track : public Route PBD::Signal0<void> FreezeChange; protected: - Track (Session& sess, const XMLNode& node, DataType default_type = DataType::AUDIO); - virtual XMLNode& state (bool full) = 0; boost::shared_ptr<Diskstream> _diskstream; MeterPoint _saved_meter_point; TrackMode _mode; + ChanCount input_streams () const; + //private: (FIXME) struct FreezeRecordProcessorInfo { FreezeRecordProcessorInfo(XMLNode& st, boost::shared_ptr<Processor> proc) diff --git a/libs/ardour/audio_track.cc b/libs/ardour/audio_track.cc index 245b122c18..cbfef29b17 100644 --- a/libs/ardour/audio_track.cc +++ b/libs/ardour/audio_track.cc @@ -55,12 +55,6 @@ AudioTrack::AudioTrack (Session& sess, string name, Route::Flag flag, TrackMode use_new_diskstream (); } -AudioTrack::AudioTrack (Session& sess, const XMLNode& node, int /*version*/) - : Track (sess, node) -{ - _set_state (node, Stateful::loading_state_version, false); -} - AudioTrack::~AudioTrack () { } @@ -463,13 +457,12 @@ AudioTrack::roll (nframes_t nframes, sframes_t start_frame, sframes_t end_frame, } } - if (n_outputs().n_total() == 0 && _processors.empty()) { return 0; } if (!_active) { - silence (nframes); + silence (nframes); return 0; } @@ -523,9 +516,20 @@ AudioTrack::roll (nframes_t nframes, sframes_t start_frame, sframes_t end_frame, BufferSet& bufs = _session.get_scratch_buffers (); const size_t blimit = bufs.count().n_audio(); + if (limit == 0) { + /* no inputs, try for diskstream channel count */ + limit = diskstream->n_channels().n_audio(); + } + uint32_t n; uint32_t i; + cerr << _name << " Input = " << _input->n_ports() + << " Output " << _output->n_ports () + << " limit " << limit + << " blimit " << blimit + << endl; + if (limit > blimit) { /* example case: auditioner configured for stereo output, diff --git a/libs/ardour/auditioner.cc b/libs/ardour/auditioner.cc index c88eeedf1a..dec9452977 100644 --- a/libs/ardour/auditioner.cc +++ b/libs/ardour/auditioner.cc @@ -29,6 +29,7 @@ #include "ardour/session.h" #include "ardour/auditioner.h" #include "ardour/audioplaylist.h" +#include "ardour/audio_port.h" #include "ardour/panner.h" #include "ardour/data_type.h" #include "ardour/region_factory.h" @@ -46,11 +47,19 @@ Auditioner::Auditioner (Session& s) string right = _session.config.get_auditioner_output_right(); if (left == "default") { - left = _session.engine().get_nth_physical_output (DataType::AUDIO, 0); + if (_session.monitor_out()) { + left = _session.monitor_out()->input()->audio (0)->name(); + } else { + left = _session.engine().get_nth_physical_output (DataType::AUDIO, 0); + } } if (right == "default") { - right = _session.engine().get_nth_physical_output (DataType::AUDIO, 1); + if (_session.monitor_out()) { + right = _session.monitor_out()->input()->audio (1)->name(); + } else { + right = _session.engine().get_nth_physical_output (DataType::AUDIO, 1); + } } if ((left.length() == 0) && (right.length() == 0)) { @@ -60,6 +69,8 @@ Auditioner::Auditioner (Session& s) _main_outs->defer_pan_reset (); + cerr << "Aud connect " << left << " + " << right << endl; + if (left.length()) { _output->add_port (left, this, DataType::AUDIO); } @@ -183,7 +194,10 @@ Auditioner::play_audition (nframes_t nframes) _diskstream->prepare (); + cerr << "Auditioner rolls, gain = " << gain_control()->get_value() << endl; + if ((ret = roll (this_nframes, current_frame, current_frame + nframes, false, false, false)) != 0) { + cerr << "\troll failed\n"; silence (nframes); return ret; } diff --git a/libs/ardour/midi_track.cc b/libs/ardour/midi_track.cc index 9409e9f143..8d04610d0a 100644 --- a/libs/ardour/midi_track.cc +++ b/libs/ardour/midi_track.cc @@ -65,18 +65,6 @@ MidiTrack::MidiTrack (Session& sess, string name, Route::Flag flag, TrackMode mo _mode = mode; } -MidiTrack::MidiTrack (Session& sess, const XMLNode& node, int /*version*/) - : Track (sess, node, DataType::MIDI) - , _immediate_events(1024) // FIXME: size? - , _step_edit_ring_buffer(64) // FIXME: size? - , _note_mode(Sustained) - , _step_editing (false) - , _default_channel (0) - , _midi_thru (true) -{ - _set_state (node, Stateful::loading_state_version, false); -} - MidiTrack::~MidiTrack () { } diff --git a/libs/ardour/route.cc b/libs/ardour/route.cc index 31fc966278..2199c71caa 100644 --- a/libs/ardour/route.cc +++ b/libs/ardour/route.cc @@ -121,23 +121,6 @@ Route::Route (Session& sess, string name, Flag flg, DataType default_type) Metering::Meter.connect_same_thread (*this, (boost::bind (&Route::meter, this))); } -Route::Route (Session& sess, const XMLNode& node, DataType default_type) - : SessionObject (sess, "toBeReset") - , AutomatableControls (sess) - , _solo_control (new SoloControllable (X_("solo"), *this)) - , _mute_control (new MuteControllable (X_("mute"), *this)) - , _mute_master (new MuteMaster (sess, "toBeReset")) - , _default_type (default_type) -{ - init (); - - _set_state (node, Stateful::loading_state_version, false); - - /* now that we have _meter, its safe to connect to this */ - - Metering::Meter.connect_same_thread (*this, (boost::bind (&Route::meter, this))); -} - void Route::init () { @@ -472,6 +455,8 @@ Route::process_output_buffers (BufferSet& bufs, << endl; } assert (bufs.count() == (*i)->input_streams()); + + cerr << _name << " run processor " << (*i)->name() << " with " << bufs.count() << endl; (*i)->run (bufs, start_frame, end_frame, nframes, *i != _processors.back()); bufs.set_count ((*i)->output_streams()); @@ -1515,6 +1500,13 @@ Route::configure_processors (ProcessorStreams* err) return 0; } +ChanCount +Route::input_streams () const +{ + cerr << "!!!!!!!!!" << _name << " ::input_streams()\n"; + return _input->n_ports (); +} + /** Configure the input/output configuration of each processor in the processors list. * Return 0 on success, otherwise configuration is impossible. */ @@ -1528,7 +1520,10 @@ Route::configure_processors_unlocked (ProcessorStreams* err) _in_configure_processors = true; // Check each processor in order to see if we can configure as requested - ChanCount in = _input->n_ports (); + if (_name == "auditioner") { + cerr << "AUD conf\n"; + } + ChanCount in = input_streams (); ChanCount out; list< pair<ChanCount,ChanCount> > configuration; uint32_t index = 0; diff --git a/libs/ardour/session_state.cc b/libs/ardour/session_state.cc index e5e75d6550..40cbe53389 100644 --- a/libs/ardour/session_state.cc +++ b/libs/ardour/session_state.cc @@ -1419,35 +1419,43 @@ Session::load_routes (const XMLNode& node, int version) boost::shared_ptr<Route> Session::XMLRouteFactory (const XMLNode& node, int version) { + boost::shared_ptr<Route> ret; + if (node.name() != "Route") { - return boost::shared_ptr<Route> ((Route*) 0); + return ret; } bool has_diskstream = (node.property ("diskstream") != 0 || node.property ("diskstream-id") != 0); DataType type = DataType::AUDIO; const XMLProperty* prop = node.property("default-type"); - boost::shared_ptr<Route> ret; if (prop) { - type = DataType(prop->value()); + type = DataType (prop->value()); } - assert(type != DataType::NIL); + assert (type != DataType::NIL); if (has_diskstream) { if (type == DataType::AUDIO) { - AudioTrack* at = new AudioTrack (*this, node, version); - boost_debug_shared_ptr_mark_interesting (at, "Track"); - ret.reset (at); - + AudioTrack* at = new AudioTrack (*this, X_("toBeResetFroXML")); + if (at->set_state (node, version) == 0) { + boost_debug_shared_ptr_mark_interesting (at, "Track"); + ret.reset (at); + } + } else { - ret.reset (new MidiTrack (*this, node, version)); + MidiTrack* mt = new MidiTrack (*this, X_("toBeResetFroXML")); + if (mt->set_state (node, version) == 0) { + ret.reset (mt); + } } } else { - Route* rt = new Route (*this, node); - boost_debug_shared_ptr_mark_interesting (rt, "Route"); - ret.reset (rt); + Route* rt = new Route (*this, X_("toBeResetFroXML")); + if (rt->set_state (node, version) == 0) { + boost_debug_shared_ptr_mark_interesting (rt, "Route"); + ret.reset (rt); + } } return ret; diff --git a/libs/ardour/track.cc b/libs/ardour/track.cc index 8ad3650343..92b776f7f2 100644 --- a/libs/ardour/track.cc +++ b/libs/ardour/track.cc @@ -49,15 +49,6 @@ Track::Track (Session& sess, string name, Route::Flag flag, TrackMode mode, Data _mode = mode; } -Track::Track (Session& sess, const XMLNode& node, DataType default_type) - : Route (sess, node, default_type) - , _rec_enable_control (new RecEnableControllable(*this)) -{ - _freeze_record.state = NoFreeze; - _declickable = true; - _saved_meter_point = _meter_point; -} - Track::~Track () { DEBUG_TRACE (DEBUG::Destruction, string_compose ("track %1 destructor\n", _name)); @@ -348,3 +339,18 @@ Track::silent_roll (nframes_t nframes, sframes_t /*start_frame*/, sframes_t /*en return diskstream()->process (_session.transport_frame(), nframes, can_record, rec_monitors_input); } + +ChanCount +Track::input_streams () const +{ + ChanCount cc = _input->n_ports (); + + cerr << "**************" << _name << " IS = " << cc << endl; + + if (cc.n_total() == 0 && _diskstream) { + cerr << "*******" << _name << " use diskstream channel count\n"; + return cc = _diskstream->n_channels(); + } + + return cc; +} |