LADSPA port default value loading (engine side)

git-svn-id: http://svn.drobilla.net/lad@77 a436a847-0d15-0410-975c-d299462d15a1
This commit is contained in:
dave 2006-06-22 07:38:52 +00:00
parent e689045616
commit a9c2f87953
8 changed files with 23 additions and 86 deletions

View File

@ -57,8 +57,6 @@ public:
void process(samplecount nframes); void process(samplecount nframes);
//void tie(OutputPort<T>* const port);
bool is_connected() const { return (m_connections.size() > 0); } bool is_connected() const { return (m_connections.size() > 0); }
bool is_connected_to(const OutputPort<T>* const port) const; bool is_connected_to(const OutputPort<T>* const port) const;
@ -75,8 +73,6 @@ private:
List<TypedConnection<T>*> m_connections; List<TypedConnection<T>*> m_connections;
// This is just stupid... // This is just stupid...
//using TypedPort<T>::m_is_tied;
//using TypedPort<T>::m_tied_port;
using TypedPort<T>::m_buffers; using TypedPort<T>::m_buffers;
using TypedPort<T>::_poly; using TypedPort<T>::_poly;
using TypedPort<T>::_index; using TypedPort<T>::_index;

View File

@ -114,10 +114,11 @@ LADSPANode::instantiate()
sample default_val = default_port_value(j); sample default_val = default_port_value(j);
// Set default control val // Set default control val
if (port->buffer_size() == 1) if (port->buffer_size() == 1) {
((TypedPort<sample>*)port)->set_value(default_val, 0); ((TypedPort<sample>*)port)->set_value(default_val, 0);
else } else {
((TypedPort<sample>*)port)->set_value(0.0f, 0); ((TypedPort<sample>*)port)->set_value(0.0f, 0);
}
} }
return true; return true;
@ -144,10 +145,10 @@ LADSPANode::activate()
for (unsigned long j=0; j < _descriptor->PortCount; ++j) { for (unsigned long j=0; j < _descriptor->PortCount; ++j) {
port = static_cast<TypedPort<sample>*>(_ports->at(j)); port = static_cast<TypedPort<sample>*>(_ports->at(j));
set_port_buffer(i, j, ((TypedPort<sample>*)_ports->at(j))->buffer(i)->data()); set_port_buffer(i, j, ((TypedPort<sample>*)_ports->at(j))->buffer(i)->data());
if (port->type() == DataType::FLOAT && port->buffer_size() == 1) /* if (port->type() == DataType::FLOAT && port->buffer_size() == 1)
port->set_value(0.0f, 0); // FIXME port->set_value(0.0f, 0); // FIXME
else if (port->type() == DataType::FLOAT && port->buffer_size() > 1) else if (port->type() == DataType::FLOAT && port->buffer_size() > 1)
port->set_value(0.0f, 0); port->set_value(0.0f, 0);*/
} }
if (_descriptor->activate != NULL) if (_descriptor->activate != NULL)
_descriptor->activate(_instances[i]); _descriptor->activate(_instances[i]);
@ -328,6 +329,7 @@ LADSPANode::default_port_value(ulong port_index)
} }
} }
cerr << path() << " Port " << port_index << " LADSPA Default value: " << normal << endl;
// FIXME: set min/max as metadata // FIXME: set min/max as metadata
return normal; return normal;
} }

View File

@ -46,7 +46,6 @@ libingen_la_SOURCES = \
InputPort.h \ InputPort.h \
InputPort.cpp \ InputPort.cpp \
OutputPort.h \ OutputPort.h \
OutputPort.cpp \
DuplexPort.h \ DuplexPort.h \
DuplexPort.cpp \ DuplexPort.cpp \
MidiMessage.h \ MidiMessage.h \

View File

@ -88,17 +88,6 @@ ObjectSender::send_patch(ClientInterface* client, const Patch* patch)
void void
ObjectSender::send_node(ClientInterface* client, const Node* node) ObjectSender::send_node(ClientInterface* client, const Node* node)
{ {
// Don't send node notification for bridge nodes, from the client's
// perspective they don't even exist (just the ports they represent)
// FIXME: hack, these nodes probably shouldn't even exist in the
// engine anymore
/*if (const_cast<Node*>(node)->as_port()) { // bridge node if as_port() returns non-NULL
// FIXME: remove this whole thing. shouldn't be any bridge nodes anymore
assert(false);
send_port(client, const_cast<Node*>(node)->as_port());
return;
}*/
const Plugin* const plugin = node->plugin(); const Plugin* const plugin = node->plugin();
int polyphonic = int polyphonic =
@ -163,9 +152,12 @@ ObjectSender::send_port(ClientInterface* client, const Port* port)
client->new_port(port->path(), type, port->is_output()); client->new_port(port->path(), type, port->is_output());
// Send control value // Send control value
if (port->type() == DataType::FLOAT && port->buffer_size() == 1) if (port->type() == DataType::FLOAT && port->buffer_size() == 1) {
client->control_change(port->path(), sample default_value = dynamic_cast<const TypedPort<sample>*>(
dynamic_cast<const TypedPort<sample>*>(port)->buffer(0)->value_at(0)); port)->buffer(0)->value_at(0);
cerr << port->path() << " sending default value " << default_value << endl;
client->control_change(port->path(), default_value);
}
// Send metadata // Send metadata
const map<string, string>& data = port->metadata(); const map<string, string>& data = port->metadata();

View File

@ -1,49 +0,0 @@
/* This file is part of Ingen. Copyright (C) 2006 Dave Robillard.
*
* Om 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.
*
* Om 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 "OutputPort.h"
#include "InputPort.h"
#include <cassert>
namespace Om {
template<typename T>
OutputPort<T>::OutputPort(Node* parent, const string& name, size_t index, size_t poly, DataType type, size_t buffer_size)
: TypedPort<T>(parent, name, index, poly, type, buffer_size)
{
}
template OutputPort<sample>::OutputPort(Node* parent, const string& name, size_t index, size_t poly, DataType type, size_t buffer_size);
template OutputPort<MidiMessage>::OutputPort(Node* parent, const string& name, size_t index, size_t poly, DataType type, size_t buffer_size);
#if 0
template<typename T>
void
OutputPort<T>::set_tied_port(InputPort<T>* port)
{
//assert(!m_is_tied);
//assert(m_tied_port == NULL);
assert(static_cast<TypedPort<T>*>(port) != static_cast<TypedPort<T>*>(this));
assert(port != NULL);
//m_is_tied = true;
//m_tied_port = (TypedPort<T>*)port;
}
template void OutputPort<sample>::set_tied_port(InputPort<sample>* port);
template void OutputPort<MidiMessage>::set_tied_port(InputPort<MidiMessage>* port);
#endif
} // namespace Om

View File

@ -42,11 +42,14 @@ template <typename T>
class OutputPort : virtual public TypedPort<T> class OutputPort : virtual public TypedPort<T>
{ {
public: public:
OutputPort(Node* parent, const string& name, size_t index, size_t poly, DataType type, size_t buffer_size); OutputPort(Node* parent, const string& name,
size_t index, size_t poly,
DataType type, size_t buffer_size)
: TypedPort<T>(parent, name, index, poly, type, buffer_size)
{}
virtual ~OutputPort() {} virtual ~OutputPort() {}
//void set_tied_port(InputPort<T>* port);
bool is_input() const { return false; } bool is_input() const { return false; }
bool is_output() const { return true; } bool is_output() const { return true; }
@ -54,9 +57,6 @@ private:
// Prevent copies (undefined) // Prevent copies (undefined)
OutputPort(const OutputPort& copy); OutputPort(const OutputPort& copy);
OutputPort<T>& operator=(const OutputPort<T>&); OutputPort<T>& operator=(const OutputPort<T>&);
//using TypedPort<T>::m_is_tied;
//using TypedPort<T>::m_tied_port;
}; };

View File

@ -33,8 +33,6 @@ template <typename T>
TypedPort<T>::TypedPort(Node* parent, const string& name, size_t index, size_t poly, DataType type, size_t buffer_size) TypedPort<T>::TypedPort(Node* parent, const string& name, size_t index, size_t poly, DataType type, size_t buffer_size)
: Port(parent, name, index, poly, type, buffer_size) : Port(parent, name, index, poly, type, buffer_size)
, m_fixed_buffers(false) , m_fixed_buffers(false)
/*, m_is_tied(false)
, m_tied_port(NULL)*/
{ {
allocate_buffers(); allocate_buffers();
clear_buffers(); clear_buffers();
@ -66,6 +64,8 @@ TypedPort<sample>::set_value(sample val, size_t offset)
if (offset >= _buffer_size) if (offset >= _buffer_size)
offset = 0; offset = 0;
assert(offset < _buffer_size); assert(offset < _buffer_size);
cerr << path() << " setting value " << val << endl;
for (size_t v=0; v < _poly; ++v) for (size_t v=0; v < _poly; ++v)
m_buffers.at(v)->set(val, offset); m_buffers.at(v)->set(val, offset);
@ -80,6 +80,8 @@ TypedPort<sample>::set_value(size_t voice, sample val, size_t offset)
if (offset >= _buffer_size) if (offset >= _buffer_size)
offset = 0; offset = 0;
assert(offset < _buffer_size); assert(offset < _buffer_size);
cerr << path() << " setting voice value " << val << endl;
m_buffers.at(voice)->set(val, offset); m_buffers.at(voice)->set(val, offset);
} }

View File

@ -52,9 +52,6 @@ public:
virtual void process(samplecount nframes); virtual void process(samplecount nframes);
virtual void clear_buffers(); virtual void clear_buffers();
//TypedPort* tied_port() const { return m_tied_port; }
//void untie() { m_is_tied = false; m_tied_port = NULL; }
/** Used by drivers to prevent port from changing buffers */ /** Used by drivers to prevent port from changing buffers */
void fixed_buffers(bool b) { m_fixed_buffers = b; } void fixed_buffers(bool b) { m_fixed_buffers = b; }
bool fixed_buffers() { return m_fixed_buffers; } bool fixed_buffers() { return m_fixed_buffers; }
@ -68,9 +65,7 @@ protected:
void allocate_buffers(); void allocate_buffers();
bool m_fixed_buffers; bool m_fixed_buffers;
//bool m_is_tied;
//TypedPort* m_tied_port;
Array<Buffer<T>*> m_buffers; Array<Buffer<T>*> m_buffers;
}; };