X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Faudio_port.cc;h=2fecbf9392c1f5b9600da044f0678c9315164d0d;hb=c35e94a3c83028220f6eb494fdfe9c1960aaf751;hp=a75f7d7a09163058b624bcaf6788763b687331ac;hpb=bb9cc45cd22af67ac275a5e73accbe14fee664d8;p=ardour.git diff --git a/libs/ardour/audio_port.cc b/libs/ardour/audio_port.cc index a75f7d7a09..2fecbf9392 100644 --- a/libs/ardour/audio_port.cc +++ b/libs/ardour/audio_port.cc @@ -17,15 +17,21 @@ */ #include -#include "ardour/audio_port.h" + +#include "pbd/stacktrace.h" + +#include "ardour/audio_buffer.h" #include "ardour/audioengine.h" +#include "ardour/audio_port.h" #include "ardour/data_type.h" -#include "ardour/audio_buffer.h" +#include "ardour/port_engine.h" using namespace ARDOUR; using namespace std; -AudioPort::AudioPort (const std::string& name, Flags flags) +#define port_engine AudioEngine::instance()->port_engine() + +AudioPort::AudioPort (const std::string& name, PortFlags flags) : Port (name, DataType::AUDIO, flags) , _buffer (new AudioBuffer (0)) { @@ -38,35 +44,24 @@ AudioPort::~AudioPort () } void -AudioPort::cycle_start (nframes_t nframes) +AudioPort::cycle_start (pframes_t nframes) { /* caller must hold process lock */ - /* get_buffer() must only be run on outputs here in cycle_start(). - - Inputs must be done in the correct processing order, which - requires interleaving with route processing. that will - happen when Port::get_buffer() is called. - */ + Port::cycle_start (nframes); if (sends_output()) { - - /* Notice that cycle_start() is always run with the *entire* process cycle frame count, - so we do not bother to apply _port_offset here - we always want the address of the - entire JACK port buffer. We are not collecting data here - just noting the - address where we will write data later in the process cycle. - */ - - _buffer->set_data ((Sample *) jack_port_get_buffer (_jack_port, nframes), nframes); _buffer->prepare (); } } void -AudioPort::cycle_end (nframes_t nframes) +AudioPort::cycle_end (pframes_t nframes) { - if (sends_output() && !_buffer->written()) { - _buffer->silence (nframes); + if (sends_output() && !_buffer->written()) { + if (_buffer->capacity() >= nframes) { + _buffer->silence (nframes); + } } } @@ -76,30 +71,21 @@ AudioPort::cycle_split () } AudioBuffer& -AudioPort::get_audio_buffer (nframes_t nframes, nframes_t offset) +AudioPort::get_audio_buffer (pframes_t nframes) { /* caller must hold process lock */ - - if (receives_input ()) { - - /* Get a pointer to the audio data @ offset + _port_offset within the JACK port buffer and store - it in our _buffer member. - - Note that offset is expected to be zero in almost all cases. - */ - - _buffer->set_data ((Sample *) jack_port_get_buffer (_jack_port, nframes) + offset + _port_offset, nframes); - } - - /* output ports set their _buffer data information during ::cycle_start() - */ - + _buffer->set_data ((Sample *) port_engine.get_buffer (_port_handle, _cycle_nframes) + + _global_port_buffer_offset + _port_buffer_offset, nframes); return *_buffer; } -size_t -AudioPort::raw_buffer_size(nframes_t nframes) const +Sample* +AudioPort::engine_get_whole_audio_buffer () { - return nframes * sizeof(float); + /* caller must hold process lock */ + return (Sample *) port_engine.get_buffer (_port_handle, _cycle_nframes); } + + +