X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=libs%2Fardour%2Faudio_port.cc;h=1a6c30dcf25b5e6b07c66a27257603d59ad1d76c;hb=244098cb400da1666147363d6959eeee3f6595bf;hp=797c8383ee4cb50432039382952390c0e1fe7003;hpb=db674ac8b676bb3412422bb784abd35ca9a19930;p=ardour.git diff --git a/libs/ardour/audio_port.cc b/libs/ardour/audio_port.cc index 797c8383ee..1a6c30dcf2 100644 --- a/libs/ardour/audio_port.cc +++ b/libs/ardour/audio_port.cc @@ -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()); }