diff options
author | David Robillard <d@drobilla.net> | 2008-07-28 22:14:12 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2008-07-28 22:14:12 +0000 |
commit | 2fd41e8d03877f454bff4943901d5c1638aac9bb (patch) | |
tree | 12699bceae6b9bf2bf33059c133ec2b86ab738b7 /src/libs/engine/events/SetPortValueQueuedEvent.cpp | |
parent | a6fb6a0289ea47692d87f3e0200532a426f8e60d (diff) | |
download | ingen-2fd41e8d03877f454bff4943901d5c1638aac9bb.tar.gz ingen-2fd41e8d03877f454bff4943901d5c1638aac9bb.tar.bz2 ingen-2fd41e8d03877f454bff4943901d5c1638aac9bb.zip |
Remove near duplicate SetPortValueEvent and SetPortValueQueuedEvent classes.
git-svn-id: http://svn.drobilla.net/lad/ingen@1294 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/libs/engine/events/SetPortValueQueuedEvent.cpp')
-rw-r--r-- | src/libs/engine/events/SetPortValueQueuedEvent.cpp | 174 |
1 files changed, 0 insertions, 174 deletions
diff --git a/src/libs/engine/events/SetPortValueQueuedEvent.cpp b/src/libs/engine/events/SetPortValueQueuedEvent.cpp deleted file mode 100644 index 14060134..00000000 --- a/src/libs/engine/events/SetPortValueQueuedEvent.cpp +++ /dev/null @@ -1,174 +0,0 @@ -/* This file is part of Ingen. - * Copyright (C) 2007 Dave Robillard <http://drobilla.net> - * - * Ingen is free software; you can redistribute it and/or modify it under the - * terms of the GNU General Public License as published by the Free Software - * Foundation; either version 2 of the License, or (at your option) any later - * version. - * - * Ingen is distributed in the hope that it will be useful, but WITHOUT ANY - * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU General Public License for details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include <sstream> -#include <iostream> -#include "SetPortValueQueuedEvent.hpp" -#include "Responder.hpp" -#include "Engine.hpp" -#include "PortImpl.hpp" -#include "ClientBroadcaster.hpp" -#include "PluginImpl.hpp" -#include "NodeImpl.hpp" -#include "ObjectStore.hpp" -#include "AudioBuffer.hpp" -#include "EventBuffer.hpp" -#include "ProcessContext.hpp" - -using namespace std; - -namespace Ingen { - - -/** Omni (all voices) control setting */ -SetPortValueQueuedEvent::SetPortValueQueuedEvent(Engine& engine, - SharedPtr<Responder> responder, - SampleCount timestamp, - const string& port_path, - const string& data_type, - uint32_t data_size, - const void* data) - : QueuedEvent(engine, responder, timestamp) - , _omni(true) - , _voice_num(0) - , _port_path(port_path) - , _data_type(data_type) - , _data_size(data_size) - , _data(malloc(data_size)) - , _port(NULL) - , _error(NO_ERROR) -{ - memcpy(_data, data, data_size); -} - - -/** Voice-specific control setting */ -SetPortValueQueuedEvent::SetPortValueQueuedEvent(Engine& engine, - SharedPtr<Responder> responder, - SampleCount timestamp, - uint32_t voice_num, - const string& port_path, - const string& data_type, - uint32_t data_size, - const void* data) - : QueuedEvent(engine, responder, timestamp) - , _omni(false) - , _voice_num(voice_num) - , _port_path(port_path) - , _data_type(data_type) - , _data_size(data_size) - , _data(malloc(data_size)) - , _port(NULL) - , _error(NO_ERROR) -{ - memcpy(_data, data, data_size); -} - - -void -SetPortValueQueuedEvent::pre_process() -{ - if (_port == NULL) - _port = _engine.object_store()->find_port(_port_path); - - if (_port == NULL) { - _error = PORT_NOT_FOUND; -/* } else if (_port->buffer_size() < _data_size) { - _error = NO_SPACE;*/ - } - - QueuedEvent::pre_process(); -} - - -void -SetPortValueQueuedEvent::execute(ProcessContext& context) -{ - QueuedEvent::execute(context); - assert(_time >= context.start() && _time <= context.end()); - - if (_error == NO_ERROR) { - assert(_port); - - Buffer* const buf = _port->buffer(0); - AudioBuffer* const abuf = dynamic_cast<AudioBuffer*>(buf); - if (abuf) { - const uint32_t offset = (buf->size() == 1) ? 0 : _time - context.start(); - - if (_omni) - for (uint32_t i=0; i < _port->poly(); ++i) - ((AudioBuffer*)_port->buffer(i))->set(*(float*)_data, offset); - else - ((AudioBuffer*)_port->buffer(_voice_num))->set(*(float*)_data, offset); - - return; - } - - EventBuffer* const ebuf = dynamic_cast<EventBuffer*>(buf); - // FIXME: eliminate string comparisons - if (ebuf && _data_type == "lv2_midi:MidiEvent") { - const LV2Features::Feature* f = _engine.world()->lv2_features->feature(LV2_URI_MAP_URI); - LV2URIMap* map = (LV2URIMap*)f->controller; - const uint32_t type_id = map->uri_to_id(NULL, "http://lv2plug.in/ns/ext/midi#MidiEvent"); - const uint32_t frames = std::max((uint32_t)(_time - context.start()), ebuf->latest_frames()); - ebuf->prepare_write(context.nframes()); - // FIXME: how should this work? binary over OSC, ick - // Message is an event: - ebuf->append(frames, 0, type_id, _data_size, (const unsigned char*)_data); - // Message is an event buffer: - //ebuf->append((LV2_Event_Buffer*)_data); - _port->raise_set_by_user_flag(); - return; - } - - cerr << "WARNING: Unknown value type " << _data_type << ", ignoring" << endl; - } -} - - -void -SetPortValueQueuedEvent::post_process() -{ - if (_error == NO_ERROR) { - assert(_port != NULL); - - _responder->respond_ok(); - _engine.broadcaster()->send_control_change(_port_path, *(float*)_data); - - // Send patch port control change, if this is a bridge port - /*Port* parent_port = _port->parent_node()->as_port(); - if (parent_port != NULL) { - assert(parent_port->type() == DataType::FLOAT); - _engine.broadcaster()->send_control_change(parent_port->path(), _val); - }*/ - - } else if (_error == PORT_NOT_FOUND) { - string msg = "Unable to find port "; - msg.append(_port_path).append(" for set_port_value_slow"); - _responder->respond_error(msg); - - } else if (_error == NO_SPACE) { - std::ostringstream msg("Attempt to write "); - msg << _data_size << " bytes to " << _port_path << ", with capacity " - << _port->buffer_size() << std::endl; - _responder->respond_error(msg.str()); - } -} - - -} // namespace Ingen - |