Add option to limit automatable control parmaters
[ardour.git] / libs / ardour / audio_port.cc
index 797c8383ee4cb50432039382952390c0e1fe7003..1a6c30dcf25b5e6b07c66a27257603d59ad1d76c 100644 (file)
@@ -30,6 +30,7 @@
 using namespace ARDOUR;
 using namespace std;
 
+#define ENGINE AudioEngine::instance()
 #define port_engine AudioEngine::instance()->port_engine()
 
 AudioPort::AudioPort (const std::string& name, PortFlags flags)
@@ -68,11 +69,6 @@ AudioPort::cycle_start (pframes_t nframes)
                _src.set_rratio (_cycle_nframes / (double)nframes);
                _src.out_data  = _data;
                _src.process ();
-#ifndef NDEBUG
-               if (_src.inp_count != 0 || _src.out_count != 0) {
-                       printf ("AudioPort::cycle_start x-flow: %d/%d\n", _src.inp_count, _src.out_count);
-               }
-#endif
                while (_src.out_count > 0) {
                        *_src.out_data =  _src.out_data[-1];
                        ++_src.out_data;
@@ -108,11 +104,6 @@ AudioPort::cycle_end (pframes_t nframes)
                _src.inp_data  = _data;
                _src.out_data  = (float*)port_engine.get_buffer (_port_handle, nframes);
                _src.process ();
-#ifndef NDEBUG
-               if (_src.inp_count != 0 || _src.out_count != 0) {
-                       printf ("AudioPort::cycle_end x-flow: %d/%d\n", _src.inp_count, _src.out_count);
-               }
-#endif
                while (_src.out_count > 0) {
                        *_src.out_data =  _src.out_data[-1];
                        ++_src.out_data;
@@ -131,12 +122,18 @@ AudioPort::get_audio_buffer (pframes_t nframes)
 {
        /* caller must hold process lock */
        assert (_port_handle);
+
+       Sample* addr;
+
        if (!externally_connected ()) {
-               _buffer->set_data ((Sample *) port_engine.get_buffer (_port_handle, _cycle_nframes) +
-                               _global_port_buffer_offset, nframes);
+               addr = (Sample *) port_engine.get_buffer (_port_handle, nframes);
        } else {
-               _buffer->set_data (&_data[_global_port_buffer_offset], nframes);
+               /* _data was read and resampled as necessary in ::cycle_start */
+               addr = &_data[_global_port_buffer_offset];
        }
+
+       _buffer->set_data (addr, nframes);
+
        return *_buffer;
 }
 
@@ -145,5 +142,5 @@ AudioPort::engine_get_whole_audio_buffer ()
 {
        /* caller must hold process lock */
        assert (_port_handle);
-       return (Sample *) port_engine.get_buffer (_port_handle, _cycle_nframes);
+       return (Sample *) port_engine.get_buffer (_port_handle, ENGINE->samples_per_cycle());
 }