summaryrefslogtreecommitdiffstats
path: root/src/engine/PortImpl.cpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2008-11-27 22:50:32 +0000
committerDavid Robillard <d@drobilla.net>2008-11-27 22:50:32 +0000
commitc58f17efff27f959147dfd231a8b059950d06e69 (patch)
treef10dd950a9b1b15461a6200f9396a989b3e1ad9d /src/engine/PortImpl.cpp
parentcb1d3b65670febd0bd5c3ac7d128f45ef0a744a4 (diff)
downloadingen-c58f17efff27f959147dfd231a8b059950d06e69.tar.gz
ingen-c58f17efff27f959147dfd231a8b059950d06e69.tar.bz2
ingen-c58f17efff27f959147dfd231a8b059950d06e69.zip
MIDI learn for control node.
git-svn-id: http://svn.drobilla.net/lad/trunk/ingen@1806 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/engine/PortImpl.cpp')
-rw-r--r--src/engine/PortImpl.cpp34
1 files changed, 20 insertions, 14 deletions
diff --git a/src/engine/PortImpl.cpp b/src/engine/PortImpl.cpp
index b8c77f43..4669dba4 100644
--- a/src/engine/PortImpl.cpp
+++ b/src/engine/PortImpl.cpp
@@ -169,25 +169,31 @@ PortImpl::clear_buffers()
void
-PortImpl::broadcast(ProcessContext& context)
+PortImpl::broadcast_value(ProcessContext& context, bool force)
{
- if (_broadcast) {
- if (_type == DataType::CONTROL || _type == DataType::AUDIO) {
- const Sample value = ((AudioBuffer*)buffer(0))->value_at(0);
- if (value != _last_broadcasted_value) {
- const SendPortValueEvent ev(context.engine(), context.start(), this, false, 0, value);
- context.event_sink().write(sizeof(ev), &ev);
- _last_broadcasted_value = value;
- }
- } else if (_type == DataType::EVENT) {
- if (((EventBuffer*)buffer(0))->event_count() > 0) {
- const SendPortActivityEvent ev(context.engine(), context.start(), this);
- context.event_sink().write(sizeof(ev), &ev);
- }
+ if (_type == DataType::CONTROL || _type == DataType::AUDIO) {
+ const Sample value = ((AudioBuffer*)buffer(0))->value_at(0);
+ if (force || value != _last_broadcasted_value) {
+ const SendPortValueEvent ev(context.engine(), context.start(), this, false, 0, value);
+ context.event_sink().write(sizeof(ev), &ev);
+ _last_broadcasted_value = value;
+ }
+ } else if (_type == DataType::EVENT) {
+ if (((EventBuffer*)buffer(0))->event_count() > 0) {
+ const SendPortActivityEvent ev(context.engine(), context.start(), this);
+ context.event_sink().write(sizeof(ev), &ev);
}
}
}
+void
+PortImpl::broadcast(ProcessContext& context)
+{
+ if (_broadcast)
+ broadcast_value(context);
+}
+
+
} // namespace Ingen