traverso-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Traverso-commit] traverso/src plugins/LV2/LV2Plugin.cpp plugins/...


From: Remon Sijrier
Subject: [Traverso-commit] traverso/src plugins/LV2/LV2Plugin.cpp plugins/...
Date: Fri, 20 Apr 2007 12:17:31 +0000

CVSROOT:        /sources/traverso
Module name:    traverso
Changes by:     Remon Sijrier <r_sijrier>       07/04/20 12:17:31

Modified files:
        src/plugins/LV2: LV2Plugin.cpp LV2Plugin.h 
        src/plugins    : PluginManager.cpp PluginManager.h 
        src/traverso/songcanvas: PluginChainView.cpp PluginView.cpp 

Log message:
        * merged Nicolas slv2 patch
        * updated patch to compile and work with latest slv2 
        * some minor plugin painting updates
        * download and compile the swh lv2 plugins, and have fun :)

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/traverso/src/plugins/LV2/LV2Plugin.cpp?cvsroot=traverso&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/traverso/src/plugins/LV2/LV2Plugin.h?cvsroot=traverso&r1=1.3&r2=1.4
http://cvs.savannah.gnu.org/viewcvs/traverso/src/plugins/PluginManager.cpp?cvsroot=traverso&r1=1.6&r2=1.7
http://cvs.savannah.gnu.org/viewcvs/traverso/src/plugins/PluginManager.h?cvsroot=traverso&r1=1.3&r2=1.4
http://cvs.savannah.gnu.org/viewcvs/traverso/src/traverso/songcanvas/PluginChainView.cpp?cvsroot=traverso&r1=1.8&r2=1.9
http://cvs.savannah.gnu.org/viewcvs/traverso/src/traverso/songcanvas/PluginView.cpp?cvsroot=traverso&r1=1.13&r2=1.14

Patches:
Index: plugins/LV2/LV2Plugin.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/plugins/LV2/LV2Plugin.cpp,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- plugins/LV2/LV2Plugin.cpp   19 Jan 2007 12:15:27 -0000      1.4
+++ plugins/LV2/LV2Plugin.cpp   20 Apr 2007 12:17:31 -0000      1.5
@@ -1,4 +1,4 @@
-/*Copyright (C) 2006 Remon Sijrier
+/*Copyright (C) 2006-2007 Remon Sijrier
 
 This file is part of Traverso
 
@@ -16,9 +16,6 @@
 along with this program; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
 
-$Id: LV2Plugin.cpp,v 1.4 2007/01/19 12:15:27 r_sijrier Exp $
-
-slv2 url: http://codeson.net/svn/libslv2/
 */
 
 
@@ -28,21 +25,27 @@
 #include <PluginManager.h>
 #include <AudioBus.h>
 #include <AudioDevice.h>
+#include <Utils.h>
+
 #include <Debugger.h>
 
-#define C_(x) x.toAscii().data()
 #define UC_(x) (const unsigned char* ) x.toAscii().data()
 
 
 
 LV2Plugin::LV2Plugin()
-       : Plugin(), m_instance(0), m_plugin(0)
+       : Plugin()
+       , m_instance(0)
+       , m_slv2plugin(0)
 {
 }
 
 
 LV2Plugin::LV2Plugin(char* pluginUri)
-       : Plugin(), m_pluginUri((char*) pluginUri), m_instance(0), m_plugin(0)
+       : Plugin()
+       , m_pluginUri((char*) pluginUri)
+       , m_instance(0)
+       , m_slv2plugin(0)
 {
 }
 
@@ -155,10 +158,10 @@
        }
 
        /* Create ports */
-       int numPorts  = slv2_plugin_get_num_ports(m_plugin);
-       printf("numports is %d\n", (int) numPorts);
+       m_portcount  = slv2_plugin_get_num_ports(m_slv2plugin);
+       printf("numports is %d\n", (int) m_portcount);
 
-       for (int i=0; i < numPorts; ++i) {
+       for (int i=0; i < m_portcount; ++i) {
                LV2ControlPort* port = create_port(i);
                if (port) {
                        m_controlPorts.append(port);
@@ -171,12 +174,12 @@
        slv2_instance_activate(m_instance);
        
        if (m_audioInputPorts.size() == 0) {
-               PERROR("Plugin %s has no audio input ports set!!", 
C_(get_name()));
+               PERROR("Plugin %s has no audio input ports set!!", 
QS_C(get_name()));
                return -1;
        }
 
        if (m_audioOutputPorts.size() == 0) {
-               PERROR("Plugin %s has no audio output ports set!!", 
C_(get_name()));
+               PERROR("Plugin %s has no audio output ports set!!", 
QS_C(get_name()));
                return -1;
        }
        
@@ -186,24 +189,24 @@
 
 int LV2Plugin::create_instance()
 {
-       printf("URI:\t%s\n", C_(m_pluginUri));
+       printf("URI:\t%s\n", QS_C(m_pluginUri));
 
-       m_plugin = 
slv2_list_get_plugin_by_uri(PluginManager::instance()->get_slv2_plugin_list(), 
C_(m_pluginUri));
+       m_slv2plugin = 
slv2_plugins_get_by_uri(PluginManager::instance()->get_slv2_plugin_list(), 
QS_C(m_pluginUri));
 
        
-       if (! m_plugin) {
-               fprintf(stderr, "Failed to find plugin %s.\n", C_(m_pluginUri));
+       if (! m_slv2plugin) {
+               fprintf(stderr, "Failed to find plugin %s.\n", 
QS_C(m_pluginUri));
                return -1;
        }
 
        /* Get the plugin's name */
-       char* name = slv2_plugin_get_name(m_plugin);
+       char* name = slv2_plugin_get_name(m_slv2plugin);
 
        printf("Name:\t%s\n", name);
 
        /* Instantiate the plugin */
        int samplerate = audiodevice().get_sample_rate();
-       m_instance = slv2_plugin_instantiate(m_plugin, samplerate, NULL);
+       m_instance = slv2_plugin_instantiate(m_slv2plugin, samplerate, NULL);
 
        if (! m_instance) {
                printf("Failed to instantiate plugin.\n");
@@ -222,57 +225,50 @@
                return;
        }
                        
-       /* Connect the AudioBus Channel buffers to the plugin instance */
-//     for (int index = 0; index < (int)bus->get_channel_count(); ++index) {
+       for (int i=0; i<m_audioInputPorts.size(); ++i) {
+               AudioInputPort* port = m_audioInputPorts.at(i);
+               int index = port->get_index();
+               slv2_instance_connect_port(m_instance, index, 
bus->get_buffer(i, (nframes_t)nframes));
+       }
        
-               slv2_instance_connect_port(m_instance, 1, bus->get_buffer(0, 
(nframes_t)nframes));
-               slv2_instance_connect_port(m_instance, 2, bus->get_buffer(0, 
(nframes_t)nframes));
-//     }
+       for (int i=0; i<m_audioOutputPorts.size(); ++i) {
+               AudioOutputPort* port = m_audioOutputPorts.at(i);
+               int index = port->get_index();
+               slv2_instance_connect_port(m_instance, index, 
bus->get_buffer(i, (nframes_t)nframes));
+       }
 
        /* Run plugin for this cycle */
        slv2_instance_run(m_instance, nframes);
-               
-               slv2_instance_connect_port(m_instance, 1, bus->get_buffer(1, 
(nframes_t)nframes));
-               slv2_instance_connect_port(m_instance, 2, bus->get_buffer(1, 
(nframes_t)nframes));
-       
-       slv2_instance_run(m_instance, nframes);
 }
 
 
 LV2ControlPort* LV2Plugin::create_port(int  portIndex)
 {
-       LV2ControlPort* port = (LV2ControlPort*) 0;
+       LV2ControlPort* ctrlport = (LV2ControlPort*) 0;
 
-       /* Make sure this is a float port */
-       char* type = (char*) slv2_port_get_data_type(m_plugin, portIndex);
-
-       if (strcmp(type, SLV2_DATA_TYPE_FLOAT)) {
-               PERROR("Unrecognized data type.");
-               return port;
-       }
 
-       free(type);
+       SLV2Port slvport = slv2_plugin_get_port_by_index(m_slv2plugin, 
portIndex);
 
        /* Get the port symbol (label) for console printing */
-       char* symbol = (char*) slv2_port_get_symbol(m_plugin, portIndex);
+       char* symbol = slv2_port_get_symbol(m_slv2plugin, slvport);
 
        /* Get the 'class' of the port (control input, audio output, etc) */
-       enum SLV2PortClass portClass = slv2_port_get_class(m_plugin, portIndex);
+       SLV2PortClass portClass = slv2_port_get_class(m_slv2plugin, slvport);
 
        /* Create the port based on it's 'class' */
        switch (portClass) {
-               case SLV2_CONTROL_RATE_INPUT:
-                       port = new LV2ControlPort(this, portIndex);
+               case SLV2_CONTROL_INPUT:
+                       ctrlport = new LV2ControlPort(this, portIndex, 
slv2_port_get_default_value(m_slv2plugin, slvport));
                        printf("Set %s to ", symbol);
                        break;
-               case SLV2_CONTROL_RATE_OUTPUT:
-                       port = new LV2ControlPort(this, portIndex);
+               case SLV2_CONTROL_OUTPUT:
+                       ctrlport = new LV2ControlPort(this, portIndex, 0);
                        printf("Set %s to ", symbol);
                        break;
-               case SLV2_AUDIO_RATE_INPUT:
+               case SLV2_AUDIO_INPUT:
                        m_audioInputPorts.append(new AudioInputPort(this, 
portIndex));
                        break;
-               case SLV2_AUDIO_RATE_OUTPUT:
+               case SLV2_AUDIO_OUTPUT:
                        m_audioOutputPorts.append(new AudioOutputPort(this, 
portIndex));
                        break;
                default:
@@ -281,32 +277,36 @@
 
        free(symbol);
 
-       return port;
+       return ctrlport;
 }
 
 QString LV2Plugin::get_name( )
 {
-       return QString( (char*) slv2_plugin_get_name(m_plugin));
+       return QString(slv2_plugin_get_name(m_slv2plugin));
 }
 
 
 
 
-LV2ControlPort::LV2ControlPort(LV2Plugin* plugin, int index)
-       : PluginPort(plugin, index), m_plugin(plugin)
-{
-       m_controlValue = 
slv2_port_get_default_value(m_plugin->get_slv2_plugin(), m_index);
-       slv2_instance_connect_port(m_plugin->get_instance(), m_index, 
&m_controlValue);
+/*********************************************************/
+/*             LV2 Control Port                         */
+/*********************************************************/
+
 
-       printf(" %f\n", m_controlValue);
+LV2ControlPort::LV2ControlPort(LV2Plugin* plugin, int index, float value)
+       : PluginPort(plugin, index)
+       , m_lv2plugin(plugin)
+       , m_controlValue(value)
+{
+       slv2_instance_connect_port(m_lv2plugin->get_instance(), m_index, 
&m_controlValue);
 }
 
 LV2ControlPort::LV2ControlPort( LV2Plugin * plugin, const QDomNode node )
-       : PluginPort(plugin), m_plugin(plugin)
+       : PluginPort(plugin), m_lv2plugin(plugin)
 {
        set_state(node);
        
-       slv2_instance_connect_port(m_plugin->get_instance(), m_index, 
&m_controlValue);
+       slv2_instance_connect_port(m_lv2plugin->get_instance(), m_index, 
&m_controlValue);
 }
 
 
@@ -332,29 +332,23 @@
 
 float LV2ControlPort::get_min_control_value()
 {
-       return slv2_port_get_minimum_value (m_plugin->get_slv2_plugin(), 
m_index);
+       SLV2Port port = 
slv2_plugin_get_port_by_index(m_lv2plugin->get_slv2_plugin(), m_index);
+       return slv2_port_get_minimum_value (m_lv2plugin->get_slv2_plugin(), 
port);
 }
 
 float LV2ControlPort::get_max_control_value()
 {
-       return slv2_port_get_maximum_value (m_plugin->get_slv2_plugin(), 
m_index);
+       SLV2Port port = 
slv2_plugin_get_port_by_index(m_lv2plugin->get_slv2_plugin(), m_index);
+       return slv2_port_get_maximum_value (m_lv2plugin->get_slv2_plugin(), 
port);
 
 }
 
 QString LV2ControlPort::get_description()
 {
-       SLV2Property prop = slv2_port_get_property(m_plugin->get_slv2_plugin(), 
m_index, "lv2:symbol");
-
-        if (prop && prop->num_values == 1) {
-               return QString((char*)prop->values[0]);
-       }
-       
-       return QString("no desc. avail.");
+       SLV2Port port = 
slv2_plugin_get_port_by_index(m_lv2plugin->get_slv2_plugin(), m_index);
+       return QString(slv2_port_get_symbol(m_lv2plugin->get_slv2_plugin(), 
port));
 }
 
-
-/******* SLOTS ********/
-
 void LV2ControlPort::set_control_value(float value)
 {
        m_controlValue = value;

Index: plugins/LV2/LV2Plugin.h
===================================================================
RCS file: /sources/traverso/traverso/src/plugins/LV2/LV2Plugin.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- plugins/LV2/LV2Plugin.h     19 Jan 2007 12:15:27 -0000      1.3
+++ plugins/LV2/LV2Plugin.h     20 Apr 2007 12:17:31 -0000      1.4
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2006 Remon Sijrier
+Copyright (C) 2006-2007 Remon Sijrier
 
 This file is part of Traverso
 
@@ -17,7 +17,6 @@
 along with this program; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
 
-$Id: LV2Plugin.h,v 1.3 2007/01/19 12:15:27 r_sijrier Exp $
 */
 
 
@@ -46,8 +45,8 @@
 
        void process(AudioBus* bus, unsigned long nframes);
 
-       SLV2Instance*  get_instance() const {return m_instance; }
-       SLV2Plugin* get_slv2_plugin() const {return m_plugin; }
+       SLV2Instance  get_instance() const {return m_instance; }
+       SLV2Plugin get_slv2_plugin() const {return m_slv2plugin; }
 
        QList<LV2ControlPort* > get_control_ports() const { return 
m_controlPorts; }
 
@@ -59,8 +58,9 @@
 
 private:
        QString         m_pluginUri;
-       SLV2Instance*   m_instance;    /**< Plugin "instance" (loaded shared 
lib) */
-       SLV2Plugin*     m_plugin;      /**< Plugin "class" (actually just a few 
strings) */
+       SLV2Instance    m_instance;
+       SLV2Plugin      m_slv2plugin;
+       int             m_portcount;
        
        QList<LV2ControlPort* >         m_controlPorts;
        QList<AudioInputPort* >         m_audioInputPorts;
@@ -77,7 +77,7 @@
        Q_OBJECT
 
 public:
-       LV2ControlPort(LV2Plugin* plugin, int index);
+       LV2ControlPort(LV2Plugin* plugin, int index, float value);
        LV2ControlPort(LV2Plugin* plugin, const QDomNode node);
        ~LV2ControlPort(){};
 
@@ -89,7 +89,7 @@
        QString get_description();
 
 private:
-       LV2Plugin*              m_plugin;
+       LV2Plugin*      m_lv2plugin;
        float                   m_controlValue;
 
        int set_state( const QDomNode & node );

Index: plugins/PluginManager.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/plugins/PluginManager.cpp,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -b -r1.6 -r1.7
--- plugins/PluginManager.cpp   1 Feb 2007 15:45:29 -0000       1.6
+++ plugins/PluginManager.cpp   20 Apr 2007 12:17:31 -0000      1.7
@@ -16,7 +16,7 @@
 along with this program; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
 
-$Id: PluginManager.cpp,v 1.6 2007/02/01 15:45:29 r_sijrier Exp $
+$Id: PluginManager.cpp,v 1.7 2007/04/20 12:17:31 r_sijrier Exp $
 
 slv2 url: http://codeson.net/svn/libslv2/
 */
@@ -43,7 +43,7 @@
 PluginManager::~PluginManager()
 {
 #if defined (LV2_SUPPORT)
-       slv2_list_free(slv2PluginList);
+       slv2_world_free(m_slv2World);
 #endif
 }
 
@@ -62,8 +62,9 @@
 {
 #if defined (LV2_SUPPORT)
 // LV2 part:
-       slv2PluginList  = slv2_list_new();
-       slv2_list_load_all(slv2PluginList);
+       m_slv2World = slv2_world_new();
+       slv2_world_load_all(m_slv2World);
+       m_slv2Plugins = slv2_world_get_all_plugins(m_slv2World);
 #endif
 }
 
@@ -108,9 +109,9 @@
 
 #if defined (LV2_SUPPORT)
 
-SLV2List PluginManager::get_slv2_plugin_list()
+SLV2Plugins PluginManager::get_slv2_plugin_list()
 {
-       return slv2PluginList;
+       return m_slv2Plugins;
 }
 #endif
 

Index: plugins/PluginManager.h
===================================================================
RCS file: /sources/traverso/traverso/src/plugins/PluginManager.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- plugins/PluginManager.h     31 Jan 2007 11:59:11 -0000      1.3
+++ plugins/PluginManager.h     20 Apr 2007 12:17:31 -0000      1.4
@@ -17,7 +17,7 @@
 along with this program; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
 
-$Id: PluginManager.h,v 1.3 2007/01/31 11:59:11 r_sijrier Exp $
+$Id: PluginManager.h,v 1.4 2007/04/20 12:17:31 r_sijrier Exp $
 */
 
 
@@ -43,7 +43,7 @@
        Plugin* get_plugin(const QDomNode node);
 
 #if defined (LV2_SUPPORT)
-       SLV2List get_slv2_plugin_list();
+       SLV2Plugins get_slv2_plugin_list();
 #endif
 
 private:
@@ -51,7 +51,8 @@
 
        static PluginManager* m_instance;
 #if defined (LV2_SUPPORT)
-       SLV2List        slv2PluginList;
+       SLV2World       m_slv2World;
+       SLV2Plugins     m_slv2Plugins;
 #endif
        void init();
 };

Index: traverso/songcanvas/PluginChainView.cpp
===================================================================
RCS file: 
/sources/traverso/traverso/src/traverso/songcanvas/PluginChainView.cpp,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -b -r1.8 -r1.9
--- traverso/songcanvas/PluginChainView.cpp     23 Feb 2007 13:52:38 -0000      
1.8
+++ traverso/songcanvas/PluginChainView.cpp     20 Apr 2007 12:17:31 -0000      
1.9
@@ -17,7 +17,7 @@
     along with this program; if not, write to the Free Software
     Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
 
-    $Id: PluginChainView.cpp,v 1.8 2007/02/23 13:52:38 r_sijrier Exp $
+    $Id: PluginChainView.cpp,v 1.9 2007/04/20 12:17:31 r_sijrier Exp $
 */
 
 #include "PluginChainView.h"
@@ -72,16 +72,22 @@
 void PluginChainView::add_new_pluginview( Plugin * plugin )
 {
        PluginView* view = new PluginView(m_trackView, plugin, 
m_pluginViews.size());
-       m_pluginViews.append(view);
        scene()->addItem(view);
-       view->setPos( ( m_pluginViews.size() -1 )* 120, m_boundingRect.height() 
- view->boundingRect().height());
+       
+       int x = 6;
+       foreach(PluginView* view, m_pluginViews) {
+               x += view->boundingRect().width() + 6;
+       }
+       
+       view->setPos(x, m_boundingRect.height() - 
view->boundingRect().height());
+       
+       m_pluginViews.append(view);
 }
 
 void PluginChainView::remove_pluginview( Plugin * plugin )
 {
        foreach(PluginView* view, m_pluginViews) {
                if (view->get_plugin() == plugin) {
-                       printf("Removing pluginview\n");
                        m_pluginViews.removeAll(view);
                        delete view;
                }

Index: traverso/songcanvas/PluginView.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/traverso/songcanvas/PluginView.cpp,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -b -r1.13 -r1.14
--- traverso/songcanvas/PluginView.cpp  17 Apr 2007 11:51:20 -0000      1.13
+++ traverso/songcanvas/PluginView.cpp  20 Apr 2007 12:17:31 -0000      1.14
@@ -54,10 +54,16 @@
        
        m_track = m_trackView->get_track();
        m_name = plugin->get_name();
-       m_boundingRect = QRectF(0, 0, 100, 25);
+       
+       QFontMetrics fm(themer()->get_font("Plugin:name"));
+       int fontwidth = fm.width(m_name);
+       
+       m_boundingRect = QRectF(0, 0, fontwidth + 8, 25);
        
        setAcceptsHoverEvents(true);
        setCursor(themer()->get_cursor("Plugin"));
+       
+       connect(m_plugin, SIGNAL(bypassChanged()), this, SLOT(repaint()));
 }
 
 PluginView::~PluginView( )
@@ -77,28 +83,27 @@
        
        QColor color;
        if (m_plugin->is_bypassed()) {
-               color.setRgb(230, 0, 230, 80);
+               color = themer()->get_color("Plugin:background:bypassed");
        } else {
-               color.setRgb(230, 0, 230, 170);
+               color = themer()->get_color("Plugin:background");
        }
 
        int height, width;
        if (option->state & QStyle::State_MouseOver) {
                height = 21;
-               width = 101;
+               width = m_boundingRect.width() + 1;
                color = color.light(120);
        } else {
                height = 20;
-               width = 100;
+               width = m_boundingRect.width();
        }
        
        QBrush brush(color);
        QRect rect(0, 0, width, height); 
        painter->fillRect(rect, brush);
-       painter->setPen(QColor(Qt::white));
+       painter->setPen(themer()->get_color("Plugin:text"));
+       painter->setFont(themer()->get_font("Plugin:name"));
        painter->drawText(rect, Qt::AlignCenter, m_name);
-       
-       connect(m_plugin, SIGNAL(bypassChanged()), this, SLOT(repaint()));
 }
 
 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]