X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fardour%2Fdelayline.h;h=6ac4561e5d540ac5e52932de4c674e58e9bf8755;hb=06abdee652d69a22ad7573d2392148c6fbe6d968;hp=56a6de0c638c891cb08d453dd1436ca6b49fc4a1;hpb=ad017365f7a73f8ba57f667cc1aa36478b48c50e;p=ardour.git diff --git a/libs/ardour/ardour/delayline.h b/libs/ardour/ardour/delayline.h index 56a6de0c63..6ac4561e5d 100644 --- a/libs/ardour/ardour/delayline.h +++ b/libs/ardour/ardour/delayline.h @@ -20,6 +20,9 @@ #ifndef __ardour_delayline_h__ #define __ardour_delayline_h__ +#include +#include + #include "ardour/types.h" #include "ardour/processor.h" @@ -37,31 +40,42 @@ public: DelayLine (Session& s, const std::string& name); ~DelayLine (); - bool display_to_user() const { return false; } - - void run (BufferSet&, framepos_t, framepos_t, pframes_t, bool); - void set_delay(framecnt_t signal_delay); - framecnt_t get_delay() { return _pending_delay; } + bool set_name (const std::string& str); + bool set_delay (samplecnt_t signal_delay); + samplecnt_t delay () { return _pending_delay; } + /* processor interface */ + bool display_to_user () const { return false; } + void run (BufferSet&, samplepos_t, samplepos_t, double, pframes_t, bool); bool configure_io (ChanCount in, ChanCount out); bool can_support_io_configuration (const ChanCount& in, ChanCount& out); + void flush (); - void flush(); - void realtime_handle_transport_stopped () { flush(); } - void realtime_locate () { flush(); } - void monitoring_changed() { flush(); } - - XMLNode& state (bool full); +protected: + XMLNode& state (); private: + void allocate_pending_buffers (samplecnt_t, ChanCount const&); + + void write_to_rb (Sample* rb, Sample* src, samplecnt_t); // honor _woff, _bsiz. + void read_from_rb (Sample* rb, Sample* dst, samplecnt_t); // honor _roff, _bsiz + friend class IO; - framecnt_t _delay, _pending_delay; - framecnt_t _bsiz, _pending_bsiz; - frameoffset_t _roff, _woff; - boost::shared_ptr _buf; - boost::shared_ptr _pending_buf; + + samplecnt_t _bsiz; + samplecnt_t _delay, _pending_delay; + sampleoffset_t _roff, _woff; + bool _pending_flush; + + typedef std::vector > AudioDlyBuf; + typedef std::vector > MidiDlyBuf; + + AudioDlyBuf _buf; boost::shared_ptr _midi_buf; - bool _pending_flush; + +#ifndef NDEBUG + Glib::Threads::Mutex _set_delay_mutex; +#endif }; } // namespace ARDOUR