Tracks does not (want to) support destructive tracks
authorPaul Davis <paul@linuxaudiosystems.com>
Tue, 12 May 2015 14:12:41 +0000 (10:12 -0400)
committerPaul Davis <paul@linuxaudiosystems.com>
Mon, 29 Jun 2015 18:18:12 +0000 (14:18 -0400)
libs/ardour/audio_diskstream.cc
libs/ardour/audio_track.cc
libs/ardour/auditioner.cc
libs/ardour/diskstream.cc
libs/ardour/midi_track.cc
libs/ardour/session.cc
libs/ardour/source.cc

index 00e1f9298f29065493c6b1b2f2b27e8acf3dc874..7a30e191d58641f78b4af4d05d6bacf28d51551f 100644 (file)
@@ -46,6 +46,7 @@
 #include "ardour/debug.h"
 #include "ardour/io.h"
 #include "ardour/playlist_factory.h"
+#include "ardour/profile.h"
 #include "ardour/region_factory.h"
 #include "ardour/session.h"
 #include "ardour/session_playlists.h"
@@ -2362,6 +2363,10 @@ AudioDiskstream::set_destructive (bool yn)
 bool
 AudioDiskstream::can_become_destructive (bool& requires_bounce) const
 {
+       if (Profile->get_trx()) {
+               return false;
+       }
+       
        if (!_playlist) {
                requires_bounce = false;
                return false;
index c056763efc57ee8fbaa4d133ce474329f6e351db..e864df83c300eec7db9d2cc5756376dae80e60e8 100644 (file)
@@ -35,6 +35,7 @@
 #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"
@@ -62,7 +63,7 @@ AudioTrack::create_diskstream ()
 {
        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);
@@ -77,7 +78,11 @@ AudioTrack::set_diskstream (boost::shared_ptr<Diskstream> ds)
        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) {
@@ -106,7 +111,7 @@ AudioTrack::set_mode (TrackMode m)
 {
        if (m != _mode) {
 
-               if (_diskstream->set_destructive (m == Destructive)) {
+               if (!Profile->get_trx() && _diskstream->set_destructive (m == Destructive)) {
                        return -1;
                }
 
@@ -129,8 +134,15 @@ AudioTrack::can_use_mode (TrackMode m, bool& bounce_required)
                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;
        }
 }
 
@@ -193,6 +205,14 @@ AudioTrack::set_state (const XMLNode& node, int version)
                _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;
        }
index 30a354aa95210da6db4f9cc6be783d7b1f2d4c1d..3242346e96d094db54ef11a80d07b531c8f83408 100644 (file)
@@ -34,6 +34,7 @@
 #include "ardour/midi_region.h"
 #include "ardour/plugin.h"
 #include "ardour/plugin_insert.h"
+#include "ardour/profile.h"
 #include "ardour/region_factory.h"
 #include "ardour/route.h"
 #include "ardour/session.h"
@@ -327,7 +328,11 @@ Auditioner::set_diskstream (boost::shared_ptr<Diskstream> ds)
        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);
        _diskstream->set_record_enabled (false);
        _diskstream->request_input_monitoring (false);
index 9f3322dadee4f0120cecfa4030198f57b5a75ce6..5a8f26f17d696ded6808f9731573f7a86981fac8 100644 (file)
@@ -42,6 +42,7 @@
 #include "ardour/diskstream.h"
 #include "ardour/io.h"
 #include "ardour/pannable.h"
+#include "ardour/profile.h"
 #include "ardour/playlist.h"
 #include "ardour/session.h"
 #include "ardour/track.h"
@@ -498,6 +499,11 @@ Diskstream::set_state (const XMLNode& node, int /*version*/)
                _flags = Flag (string_2_enum (prop->value(), _flags));
        }
 
+       if (Profile->get_trx() && (_flags & Destructive)) {
+               error << string_compose (_("%1: this session uses destructive tracks, which are not supported"), PROGRAM_NAME) << endmsg;
+               return -1;
+       }
+       
         if ((prop = node.property (X_("capture-alignment"))) != 0) {
                 set_align_choice (AlignChoice (string_2_enum (prop->value(), _alignment_choice)), true);
         } else {
index 487eb2025c37657fcf23a457ed9271e9e2fa8d1a..4883e8a7812552d43a840d87ba660c3b286fca04 100644 (file)
@@ -47,6 +47,7 @@
 #include "ardour/parameter_types.h"
 #include "ardour/port.h"
 #include "ardour/processor.h"
+#include "ardour/profile.h"
 #include "ardour/session.h"
 #include "ardour/session_playlists.h"
 #include "ardour/utils.h"
@@ -135,7 +136,11 @@ MidiTrack::set_diskstream (boost::shared_ptr<Diskstream> ds)
        mds->reset_tracker ();  
 
        _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_record_enabled (false);
 
        _diskstream_data_recorded_connection.disconnect ();
index ac86a3612412f4a63cb06f8f9d1dae67e8eb6b81..d88b3b8408f8b91818376bd738f8de2378562e50 100644 (file)
@@ -4359,7 +4359,7 @@ Session::format_audio_source_name (const string& legalized_base, uint32_t nchan,
        ostringstream sstr;
        const string ext = native_header_format_extension (config.get_native_file_header_format(), DataType::AUDIO);
        
-       if (destructive) {
+       if (Profile->get_trx() && destructive) {
                sstr << 'T';
                sstr << setfill ('0') << setw (4) << cnt;
                sstr << legalized_base;
index 03039fea5baf5f9abc8205132e821f51fb4645ec..ef0538b4d79e7cd061c83360199709eb7cb631ab 100644 (file)
@@ -35,6 +35,7 @@
 #include "pbd/enumwriter.h"
 
 #include "ardour/debug.h"
+#include "ardour/profile.h"
 #include "ardour/session.h"
 #include "ardour/source.h"
 #include "ardour/transient_detector.h"
@@ -144,6 +145,11 @@ Source::set_state (const XMLNode& node, int version)
                _flags = Flag (_flags | Destructive);
        }
 
+       if (Profile->get_trx() && (_flags & Destructive)) {
+               error << string_compose (_("%1: this session uses destructive tracks, which are not supported"), PROGRAM_NAME) << endmsg;
+               return -1;
+       }
+       
        if (version < 3000) {
                /* a source with an XML node must necessarily already exist,
                   and therefore cannot be removable/writable etc. etc.; 2.X