#include "ardour/meter.h"
#include "ardour/playlist_factory.h"
#include "ardour/processor.h"
+#include "ardour/profile.h"
#include "ardour/region.h"
#include "ardour/region_factory.h"
#include "ardour/session.h"
{
AudioDiskstream::Flag dflags = AudioDiskstream::Flag (AudioDiskstream::Recordable);
- if (_mode == Destructive) {
+ if (_mode == Destructive && !Profile->get_trx()) {
dflags = AudioDiskstream::Flag (dflags | AudioDiskstream::Destructive);
} else if (_mode == NonLayered){
dflags = AudioDiskstream::Flag(dflags | AudioDiskstream::NonLayered);
Track::set_diskstream (ds);
_diskstream->set_track (this);
- _diskstream->set_destructive (_mode == Destructive);
+ if (Profile->get_trx()) {
+ _diskstream->set_destructive (false);
+ } else {
+ _diskstream->set_destructive (_mode == Destructive);
+ }
_diskstream->set_non_layered (_mode == NonLayered);
if (audio_diskstream()->deprecated_io_node) {
{
if (m != _mode) {
- if (_diskstream->set_destructive (m == Destructive)) {
+ if (!Profile->get_trx() && _diskstream->set_destructive (m == Destructive)) {
return -1;
}
return true;
case Destructive:
+ if (Profile->get_trx()) {
+ return false;
+ } else {
+ return _diskstream->can_become_destructive (bounce_required);
+ }
+ break;
+
default:
- return _diskstream->can_become_destructive (bounce_required);
+ return false;
}
}
{
const XMLProperty *prop;
- if (Track::set_state (node, version)) {
- return -1;
- }
-
if ((prop = node.property (X_("mode"))) != 0) {
_mode = TrackMode (string_2_enum (prop->value(), _mode));
} else {
_mode = Normal;
}
+ if (Profile->get_trx() && _mode == Destructive) {
+ /* Tracks does not support destructive tracks and trying to
+ handle it as a normal track would be wrong.
+ */
+ error << string_compose (_("%1: this session uses destructive tracks, which are not supported"), PROGRAM_NAME) << endmsg;
+ return -1;
+ }
+
+ if (Track::set_state (node, version)) {
+ return -1;
+ }
+
pending_state = const_cast<XMLNode*> (&node);
if (_session.state_of_the_state() & Session::Loading) {
if (!lm.locked()) {
boost::shared_ptr<AudioDiskstream> diskstream = audio_diskstream();
framecnt_t playback_distance = diskstream->calculate_playback_distance(nframes);
- if (can_internal_playback_seek(llabs(playback_distance))) {
+ if (can_internal_playback_seek(::llabs(playback_distance))) {
/* TODO should declick */
internal_playback_seek(playback_distance);
}
int dret;
framecnt_t playback_distance;
-
+
if ((nframes = check_initial_delay (nframes, transport_frame)) == 0) {
/* need to do this so that the diskstream sets its
BufferSet& bufs = _session.get_route_buffers (n_process_buffers ());
fill_buffers_with_input (bufs, _input, nframes);
-
+
if (_meter_point == MeterInput && (_monitoring & MonitorInput || _diskstream->record_enabled())) {
_meter->run (bufs, start_frame, end_frame, nframes, true);
}
/* does the output from the last considered processor match the
* input to this one?
*/
-
+
if (naudio != (*r)->input_streams().n_audio()) {
return false;
}
- /* we're including the endpoint - if we just hit it,
+ /* we're including the endpoint - if we just hit it,
then stop.
*/
return true;
}
- /* save outputs of this processor to test against inputs
+ /* save outputs of this processor to test against inputs
of the next one.
*/
(*r)->deactivate ();
}
}
-
+
_session.set_dirty ();
}
}