summaryrefslogtreecommitdiffstats
path: root/src/server/PortImpl.hpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2014-08-31 01:24:57 +0000
committerDavid Robillard <d@drobilla.net>2014-08-31 01:24:57 +0000
commita2792bd09212eed55bba1aa30dc09043a6955486 (patch)
treed4262f760d4522bc6f1c99778987aada332b9e7e /src/server/PortImpl.hpp
parente3ecb2b439bd03d27b5e11efe430c24f0ebe6283 (diff)
downloadingen-a2792bd09212eed55bba1aa30dc09043a6955486.tar.gz
ingen-a2792bd09212eed55bba1aa30dc09043a6955486.tar.bz2
ingen-a2792bd09212eed55bba1aa30dc09043a6955486.zip
Use float sequences for sample-accurate control ports.
git-svn-id: http://svn.drobilla.net/lad/trunk/ingen@5462 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/server/PortImpl.hpp')
-rw-r--r--src/server/PortImpl.hpp25
1 files changed, 24 insertions, 1 deletions
diff --git a/src/server/PortImpl.hpp b/src/server/PortImpl.hpp
index 4dd1afb3..ccefa0f1 100644
--- a/src/server/PortImpl.hpp
+++ b/src/server/PortImpl.hpp
@@ -48,6 +48,14 @@ public:
SetState() : state(State::SET), value(0), time(0) {}
+ void set(const Context& context, FrameTime t, Sample v) {
+ time = t;
+ value = v;
+ state = (time == context.start()
+ ? State::SET
+ : State::HALF_SET_CYCLE_1);
+ }
+
State state; ///< State of buffer for setting control value
Sample value; ///< Value currently being set
FrameTime time; ///< Time value was set
@@ -122,6 +130,7 @@ public:
/** Called once per process cycle */
virtual void pre_process(Context& context) = 0;
+ virtual void pre_run(Context& context) {}
virtual void post_process(Context& context) = 0;
/** Empty buffer contents completely (ie silence) */
@@ -150,7 +159,7 @@ public:
Resource::Properties& remove,
Resource::Properties& add) {}
- virtual void connect_buffers();
+ virtual void connect_buffers(SampleCount offset=0);
virtual void recycle_buffers();
virtual bool is_input() const = 0;
@@ -160,6 +169,8 @@ public:
inline bool is_a(PortType type) const { return _type == type; }
+ bool has_value() const;
+
PortType type() const { return _type; }
LV2_URID buffer_type() const { return _buffer_type; }
@@ -194,6 +205,17 @@ public:
BufferFactory& bufs() const { return _bufs; }
+ BufferRef value_buffer(uint32_t voice);
+
+ /** Return offset of the first value change after `offset`. */
+ virtual SampleCount next_value_offset(SampleCount offset,
+ SampleCount end) const;
+
+ /** Update value buffer to be current as of `offset`. */
+ virtual void update_values(SampleCount offset) = 0;
+
+ void force_monitor_update() { _force_monitor_update = true; }
+
void set_morphable(bool is_morph, bool is_auto_morph) {
_is_morph = is_morph;
_is_auto_morph = is_auto_morph;
@@ -235,6 +257,7 @@ protected:
Raul::Array<Voice>* _voices;
Raul::Array<Voice>* _prepared_voices;
bool _monitored;
+ bool _force_monitor_update;
bool _set_by_user;
bool _is_morph;
bool _is_auto_morph;