fix merge with master
authorPaul Davis <paul@linuxaudiosystems.com>
Sat, 30 Nov 2013 03:31:29 +0000 (22:31 -0500)
committerPaul Davis <paul@linuxaudiosystems.com>
Sat, 30 Nov 2013 03:31:29 +0000 (22:31 -0500)
gtk2_ardour/engine_dialog.cc
gtk2_ardour/engine_dialog.h
gtk2_ardour/wscript
libs/ardour/ardour/audio_buffer.h
libs/ardour/ardour/buffer.h
libs/ardour/audio_buffer.cc
libs/ardour/audio_port.cc
libs/ardour/buffer_set.cc
libs/ardour/midi_buffer.cc
libs/ardour/thread_buffers.cc
libs/backends/jack/jack_audiobackend.cc

index 37c29f418788f4e351a47d4ca2f61f7b2b36b883..d438ff83270e5d2948ff53ed76564a63592fa1ec 100644 (file)
@@ -87,7 +87,6 @@ EngineControl::EngineControl ()
        , midi_refresh_button (_("Refresh list"))
        , ignore_changes (0)
        , _desired_sample_rate (0)
-       , no_push (true)
        , started_at_least_once (false)
 {
        using namespace Notebook_Helpers;
@@ -290,8 +289,6 @@ EngineControl::EngineControl ()
        output_channels.signal_changed().connect (sigc::mem_fun (*this, &EngineControl::parameter_changed));
 
        notebook.signal_switch_page().connect (sigc::mem_fun (*this, &EngineControl::on_switch_page));
-
-       no_push = false;
  }
 
  void
@@ -874,10 +871,6 @@ EngineControl::EngineControl ()
         /* pick up any saved state for this device */
 
         maybe_display_saved_state ();
-
-        /* and push it to the backend */
-
-        push_state_to_backend (false);
  }     
 
  string
@@ -1207,14 +1200,9 @@ EngineControl::EngineControl ()
         }
  }
 
-
  int
  EngineControl::push_state_to_backend (bool start)
  {
-        if (no_push) {
-                return 0;
-        }
-
         boost::shared_ptr<ARDOUR::AudioBackend> backend = ARDOUR::AudioEngine::instance()->current_backend();
 
         if (!backend) {
index 31648b6dbbbcd7b2740f1270e2012e4b36b3c3a9..6d10eb76ac7b7264d7b62009770ddb034e77338b 100644 (file)
@@ -114,7 +114,6 @@ class EngineControl : public ArdourDialog, public PBD::ScopedConnectionList {
     
     uint32_t ignore_changes;
     uint32_t _desired_sample_rate;
-    bool     no_push;
     bool     started_at_least_once;
 
     void driver_changed ();
index f4cb37dfc369139421a1128c055a00e716030c13..fc40276fac22a44bf363aa180e8b51327ef32aa1 100644 (file)
@@ -365,15 +365,14 @@ def build(bld):
                 ../libs/fst/vstwin.c
                 ../vst/winmain.c
         '''
-        obj.uselib = 'ALSA'
         obj.use          = [ 'libpbd',
                              'libmidipp',
-                             'libtaglib',
                              'libardour',
                              'libardour_cp',
+                             'libtimecode',
+                             'libmidipp',
                              'libgtk2_ardour',
                              'libgtkmm2ext',
-                             'libtaglib',
                              'libcanvas'
                              ]
         obj.target = 'ardour-' + bld.env['VERSION'] + '-vst.exe.so'
@@ -395,22 +394,23 @@ def build(bld):
         obj.source    = gtk2_ardour_sources
         obj.target = 'ardour-' + bld.env['VERSION']
         obj.includes = ['.']
+        obj.use      = [ 'libpbd',
+                         'libardour',
+                         'libardour_cp',
+                         'libtimecode',
+                         'libmidipp',
+                         'libgtk2_ardour',
+                         'libgtkmm2ext',
+                       ]
 
     # continue with setup of obj, which could be a shared library
     # or an executable.
 
     obj.install_path = os.path.join(bld.env['LIBDIR'], 'ardour3')
-
-    obj.uselib       = 'UUID FLAC FONTCONFIG GLIBMM GTHREAD GTK OGG ALSA CURL DL'
+    obj.uselib       = 'UUID FLAC FONTCONFIG GLIBMM GTHREAD GTK OGG CURL DL'
     obj.uselib       += ' GTKMM GNOMECANVASMM GNOMECANVAS FFTW3F'
     obj.uselib       += ' AUDIOUNITS OSX GTKOSX LO '
-    obj.use          = [ 'libpbd',
-                         'libmidipp',
-                         'ardour',
-                         'libardour_cp',
-                         'libgtkmm2ext',
-                         'libcanvas'
-                         ]
+
     if bld.is_defined('USE_EXTERNAL_LIBS'):
         obj.uselib += ' TAGLIB'
     else:
index 42aba607f94b42d7029747fa61bcd43be08cae58..054a1f7b453f7aed074c0ed38ee6a37494664033 100644 (file)
@@ -207,7 +207,7 @@ public:
                return _data + offset;
        }
 
-    bool check_silence (pframes_t, pframes_t&) const;
+        bool check_silence (pframes_t, pframes_t&) const;
 
        void prepare () { _written = false; _silent = false; }
        bool written() const { return _written; }
index cbb92e7c4ab988b5f8ba5d2c5825cac36d0b99b3..4570a7a66330b1ceddbbcae46b2bbca86eb17396 100644 (file)
@@ -80,8 +80,8 @@ public:
        virtual void merge_from (const Buffer& src, framecnt_t len, framecnt_t dst_offset = 0, framecnt_t src_offset = 0) = 0;
 
   protected:
-       Buffer(DataType type, size_t capacity)
-               : _type(type), _capacity(capacity), _size(0), _silent(true)
+       Buffer(DataType type)
+               : _type(type), _capacity(0), _size(0), _silent (true)
        {}
 
        DataType  _type;
index 1fd0337dd12c3e8bcba9608e12834918ef4d868c..a36ad81c2ae118d39195a9e874e92e6eb1b38f67 100644 (file)
@@ -28,15 +28,15 @@ using namespace PBD;
 using namespace ARDOUR;
 
 AudioBuffer::AudioBuffer(size_t capacity)
-       : Buffer(DataType::AUDIO, capacity)
+       : Buffer (DataType::AUDIO)
        , _owns_data (false)
        , _data (0)
 {
-       if (_capacity > 0) {
+       if (capacity) {
                _owns_data = true; // prevent resize() from gagging
-               resize (_capacity);
+               resize (capacity);
                _silent = false; // force silence on the intial buffer state
-               silence (_capacity);
+               clear ();
        }
 }
 
@@ -50,21 +50,29 @@ void
 AudioBuffer::resize (size_t size)
 {
        if (!_owns_data) {
+               /* XXX how the hell is this enforced? */
+               _capacity = size;
                return;
        }
 
-       if (size < _capacity) {
-               _size = size;
+       if (_data && size < _capacity) {
+               /* buffer is already large enough */
+               
+               if (size < _size) {
+                       /* truncate */
+                       _size = size;
+               }
+
                return;
        }
 
        free (_data);
 
+       cache_aligned_malloc ((void**) &_data, sizeof (Sample) * size);
+
        _capacity = size;
-       _size = size;
+       _size = 0;
        _silent = false;
-
-       cache_aligned_malloc ((void**) &_data, sizeof (Sample) * _capacity);
 }
 
 bool
index 6a86360b6937522333d77d84daa0fe5c3f0322cb..2fecbf9392c1f5b9600da044f0678c9315164d0d 100644 (file)
@@ -56,14 +56,11 @@ AudioPort::cycle_start (pframes_t nframes)
 }
 
 void
-AudioPort::cycle_end (pframes_t)
+AudioPort::cycle_end (pframes_t nframes)
 {
         if (sends_output() && !_buffer->written()) {
-                /* we can't use nframes here because the current buffer capacity may
-                   be shorter than the full buffer size if we split the cycle.
-                */
-               if (_buffer->capacity () > 0) {
-                       _buffer->silence (_buffer->capacity());
+               if (_buffer->capacity() >= nframes) {
+                       _buffer->silence (nframes);
                }
        }
 }
index e67aee6be793c0491898a1e39482ba46d6c09ba3..227d7a1e9553ff4aa562d9344201d553472f1075 100644 (file)
@@ -167,7 +167,7 @@ BufferSet::ensure_buffers(DataType type, size_t num_buffers, size_t buffer_capac
        // If there's not enough or they're too small, just nuke the whole thing and
        // rebuild it (so I'm lazy..)
        if (bufs.size() < num_buffers
-                       || (bufs.size() > 0 && bufs[0]->capacity() < buffer_capacity)) {
+           || (bufs.size() > 0 && bufs[0]->capacity() < buffer_capacity)) {
 
                // Nuke it
                for (BufferVec::iterator i = bufs.begin(); i != bufs.end(); ++i) {
@@ -179,7 +179,7 @@ BufferSet::ensure_buffers(DataType type, size_t num_buffers, size_t buffer_capac
                for (size_t i = 0; i < num_buffers; ++i) {
                        bufs.push_back(Buffer::create(type, buffer_capacity));
                }
-
+               
                _available.set(type, num_buffers);
                _count.set (type, num_buffers);
        }
index d75b861ea17eabb5775605ff54a0d9f28804d094..1a6cb7fa2612d4fc461d8a3b28c88bce2b10728c 100644 (file)
@@ -33,12 +33,12 @@ using namespace PBD;
 
 // FIXME: mirroring for MIDI buffers?
 MidiBuffer::MidiBuffer(size_t capacity)
-       : Buffer(DataType::MIDI, capacity)
-       , _data(0)
+       : Buffer (DataType::MIDI)
+       , _data (0)
 {
        if (capacity) {
-               resize(_capacity);
-               silence(_capacity);
+               resize (capacity);
+               silence (capacity);
        }
 }
 
@@ -50,17 +50,22 @@ MidiBuffer::~MidiBuffer()
 void
 MidiBuffer::resize(size_t size)
 {
-       assert(size > 0);
+       if (_data && size < _capacity) {
+
+               if (_size < size) {
+                       /* truncate */
+                       _size = size;
+               }
 
-       if (size < _capacity) {
                return;
        }
 
-       free(_data);
+       free (_data);
+
+       cache_aligned_malloc ((void**) &_data, size);
 
        _size = 0;
        _capacity = size;
-       cache_aligned_malloc ((void**) &_data, _capacity);
 
        assert(_data);
 }
index fd3160bb15a81933b4dc291d084631f2bd571ca4..e469187ce9497709d8a54240a05aef9a3ed8757e 100644 (file)
@@ -60,7 +60,7 @@ ThreadBuffers::ensure_buffers (ChanCount howmany)
 
        for (DataType::iterator t = DataType::begin(); t != DataType::end(); ++t) {
                size_t count = std::max (scratch_buffers->available().get(*t), howmany.get(*t));
-               size_t size = _engine->raw_buffer_size (*t);
+               size_t size = _engine->raw_buffer_size (*t) / sizeof (Sample);
 
                scratch_buffers->ensure_buffers (*t, count, size);
                mix_buffers->ensure_buffers (*t, count, size);
@@ -68,12 +68,14 @@ ThreadBuffers::ensure_buffers (ChanCount howmany)
                route_buffers->ensure_buffers (*t, count, size);
        }
 
+       size_t audio_buffer_size = _engine->raw_buffer_size (DataType::AUDIO) / sizeof (Sample);
+
        delete [] gain_automation_buffer;
-       gain_automation_buffer = new gain_t[_engine->raw_buffer_size (DataType::AUDIO)];
+       gain_automation_buffer = new gain_t[audio_buffer_size];
        delete [] send_gain_automation_buffer;
-       send_gain_automation_buffer = new gain_t[_engine->raw_buffer_size (DataType::AUDIO)];
+       send_gain_automation_buffer = new gain_t[audio_buffer_size];
 
-       allocate_pan_automation_buffers (_engine->raw_buffer_size (DataType::AUDIO), howmany.n_audio(), false);
+       allocate_pan_automation_buffers (audio_buffer_size, howmany.n_audio(), false);
 }
 
 void
index ccd80e2e84e6bbb84fadd5075dcbde14507e01d9..df2fd3a11bf5c3760c111ce6bc894df1cc00fe4c 100644 (file)
@@ -155,11 +155,11 @@ JACKAudioBackend::enumerate_devices () const
 }
 
 vector<float>
-JACKAudioBackend::available_sample_rates (const string& /*device*/) const
+JACKAudioBackend::available_sample_rates (const string& device) const
 {
        vector<float> f;
        
-       if (available()) {
+       if (device == _target_device && available()) {
                f.push_back (sample_rate());
                return f;
        }
@@ -183,11 +183,11 @@ JACKAudioBackend::available_sample_rates (const string& /*device*/) const
 }
 
 vector<uint32_t>
-JACKAudioBackend::available_buffer_sizes (const string& /*device*/) const
+JACKAudioBackend::available_buffer_sizes (const string& device) const
 {
        vector<uint32_t> s;
-       
-       if (available()) {
+               
+       if (device == _target_device && available()) {
                s.push_back (buffer_size());
                return s;
        }