[SCM] lv2file/UPSTREAM.trunk: Ported to Lilv
jeremysalwen-guest at users.alioth.debian.org
jeremysalwen-guest at users.alioth.debian.org
Sat May 19 02:40:40 UTC 2012
The following commit has been merged in the UPSTREAM.trunk branch:
commit e80747b2bbb129e8bff95a8337b3f1fce444e1ee
Author: Jeremy Salwen <jeremysalwen at gmail.com>
Date: Fri May 18 16:23:54 2012 -0400
Ported to Lilv
diff --git a/Makefile b/Makefile
index 6d41eb1..29114bd 100644
--- a/Makefile
+++ b/Makefile
@@ -1,5 +1,5 @@
-CFLAGS = -O3 -Wall -Wextra --std=c99 `pkg-config --cflags argtable2 sndfile slv2`
-LDLIBS = `pkg-config --libs argtable2 sndfile slv2` -lm
+CFLAGS = -O3 -Wall -Wextra --std=c99 `pkg-config --cflags argtable2 sndfile lilv-0`
+LDLIBS = `pkg-config --libs argtable2 sndfile lilv-0` -lm
BINDIR = $(DESTDIR)/usr/bin
INSTALL_PROGRAM = install
diff --git a/lv2file.c b/lv2file.c
index c40cd14..64cdbfb 100644
--- a/lv2file.c
+++ b/lv2file.c
@@ -2,28 +2,40 @@
#include <stdlib.h>
#include <sndfile.h>
#include <argtable2.h>
-#include <slv2/slv2.h>
+#include <lilv/lilv.h>
#include <string.h>
#include <math.h>
#include <regex.h>
//From lv2_simple_jack_host in slv2 (GPL code)
-void list_plugins(SLV2Plugins list)
+void list_plugins(const LilvPlugins* list)
{
- for (unsigned int i=0; i < slv2_plugins_size(list); ++i) {
- SLV2Plugin p = slv2_plugins_get_at(list, i);
- printf("%d\t%s\n", i+1, slv2_value_as_uri(slv2_plugin_get_uri(p)));
+ int j=1;
+ LILV_FOREACH(plugins,i,list) {
+ const LilvPlugin* p=lilv_plugins_get(list,i);
+ printf("%d\t%s\n", j++, lilv_node_as_uri(lilv_plugin_get_uri(p)));
+
}
}
+const LilvPlugin* plugins_get_at(const LilvPlugins* plugins, unsigned int n) {
+ unsigned int j=0;
+ LILV_FOREACH(plugins,i,plugins) {
+ if(j==n) {
+ return lilv_plugins_get(plugins,i);
+ }
+ j++;
+ }
+ return NULL;
+}
-SLV2Plugin getplugin(const char* name, SLV2Plugins plugins, SLV2World slv2world) {
+const LilvPlugin* getplugin(const char* name, const LilvPlugins* plugins, LilvWorld* lilvworld) {
int index=atoi(name);
if(index!=0) {
- return slv2_plugins_get_at(plugins,index-1);
+ return plugins_get_at(plugins,index-1);
} else {
- SLV2Value plugin_uri = slv2_value_new_uri(slv2world, name);
- SLV2Plugin plugin = slv2_plugins_get_by_uri(plugins, plugin_uri);
- slv2_value_free(plugin_uri);
+ LilvNode* plugin_uri = lilv_new_uri(lilvworld, name);
+ const LilvPlugin* plugin = lilv_plugins_get_by_uri(plugins, plugin_uri);
+ lilv_node_free(plugin_uri);
return plugin;
}
}
@@ -35,6 +47,7 @@ unsigned int popcount(bool* connections, unsigned int numchannels) {
}
return result;
}
+
void mix(float* buffer, sf_count_t framesread,unsigned int numchannels, unsigned int numplugins, unsigned int numin, bool connections[numplugins][numin][numchannels], unsigned int blocksize, float pluginbuffers[numplugins][numin][blocksize]) {
for(unsigned int i=0; i<framesread; i++) {
for(unsigned int plugnum=0; plugnum<numplugins; plugnum++) {
@@ -89,7 +102,7 @@ inline char clipOutput(unsigned long size, float* buffer) {
char clipped=0;
for(unsigned int i=0; i<size; i++) {
if(buffer[i]>1) {
- clipped=1;
+ clipped=true;
buffer[i]=1;
}
}
@@ -101,6 +114,35 @@ inline char clipOutput(unsigned long size, float* buffer) {
}
return clipped;
}
+void list_names(LilvWorld* lilvworld, const LilvPlugins* plugins, const char* plugin_name) {
+ const LilvPlugin* plugin=getplugin(plugin_name,plugins,lilvworld);
+ if(!plugin) {
+ fprintf(stderr,"No such plugin %s\n",plugin_name);
+ return;
+ }
+ LilvNode* input_class = lilv_new_uri(lilvworld, LILV_URI_INPUT_PORT);
+ LilvNode* control_class = lilv_new_uri(lilvworld, LILV_URI_CONTROL_PORT);
+ LilvNode* audio_class = lilv_new_uri(lilvworld, LILV_URI_AUDIO_PORT);
+ uint32_t numports=lilv_plugin_get_num_ports(plugin);
+ printf("==Audio Ports==\n");
+ for(uint32_t port=0; port<numports; port++) {
+ const LilvPort* p=lilv_plugin_get_port_by_index(plugin,port);
+ if(lilv_port_is_a(plugin,p,input_class) && lilv_port_is_a(plugin,p,audio_class)) {
+ printf("%s: %s\n",lilv_node_as_string(lilv_port_get_symbol(plugin,p)),lilv_node_as_string(lilv_port_get_name(plugin,p)));
+ }
+ }
+ printf("==Control Ports==\n");
+ for(uint32_t port=0; port<numports; port++) {
+ const LilvPort* p=lilv_plugin_get_port_by_index(plugin,port);
+ if(lilv_port_is_a(plugin,p,input_class) && lilv_port_is_a(plugin,p,control_class)) {
+ printf("%s: %s\n",lilv_node_as_string(lilv_port_get_symbol(plugin,p)),lilv_node_as_string(lilv_port_get_name(plugin,p)));
+ }
+ }
+ lilv_node_free(audio_class);
+ lilv_node_free(input_class);
+ lilv_node_free(control_class);
+}
+
int main(int argc, char** argv) {
struct arg_lit *listopt=arg_lit1("l", "list","Lists all available LV2 plugins");
struct arg_end *listend = arg_end(20);
@@ -110,16 +152,16 @@ int main(int argc, char** argv) {
goto cleanup_listtable;
}
- SLV2World slv2world=slv2_world_new();
- if(slv2world==NULL) {
+ LilvWorld* lilvworld=lilv_world_new();
+ if(lilvworld==NULL) {
goto cleanup_listtable;
}
- slv2_world_load_all(slv2world);
- SLV2Plugins plugins=slv2_world_get_all_plugins(slv2world);
+ lilv_world_load_all(lilvworld);
+ const LilvPlugins* plugins=lilv_world_get_all_plugins(lilvworld);
if(!arg_parse(argc,argv,listtable)) {
list_plugins(plugins);
- goto cleanup_slv2world;
+ goto cleanup_lilvworld;
}
@@ -132,33 +174,7 @@ int main(int argc, char** argv) {
goto cleanup_listnamestable;
}
if(!arg_parse(argc,argv,listnamestable)) {
- SLV2Plugin plugin=getplugin(pluginname->sval[0],plugins,slv2world);
- slv2_plugins_free(slv2world,plugins);
- if(!plugin) {
- fprintf(stderr,"No such plugin %s\n",pluginname->sval[0]);
- goto cleanup_listnamestable;
- }
- SLV2Value input_class = slv2_value_new_uri(slv2world, SLV2_PORT_CLASS_INPUT);
- SLV2Value control_class = slv2_value_new_uri(slv2world, SLV2_PORT_CLASS_CONTROL);
- SLV2Value audio_class = slv2_value_new_uri(slv2world, SLV2_PORT_CLASS_AUDIO);
- uint32_t numports=slv2_plugin_get_num_ports(plugin);
- printf("==Audio Ports==\n");
- for(uint32_t port=0; port<numports; port++) {
- SLV2Port p=slv2_plugin_get_port_by_index(plugin,port);
- if(slv2_port_is_a(plugin,p,input_class) && slv2_port_is_a(plugin,p,audio_class)) {
- printf("%s: %s\n",slv2_value_as_string(slv2_port_get_symbol(plugin,p)),slv2_value_as_string(slv2_port_get_name(plugin,p)));
- }
- }
- printf("==Control Ports==\n");
- for(uint32_t port=0; port<numports; port++) {
- SLV2Port p=slv2_plugin_get_port_by_index(plugin,port);
- if(slv2_port_is_a(plugin,p,input_class) && slv2_port_is_a(plugin,p,control_class)) {
- printf("%s: %s\n",slv2_value_as_string(slv2_port_get_symbol(plugin,p)),slv2_value_as_string(slv2_port_get_name(plugin,p)));
- }
- }
- slv2_value_free(audio_class);
- slv2_value_free(input_class);
- slv2_value_free(control_class);
+ list_names(lilvworld,plugins,pluginname->sval[0]);
goto cleanup_listnamestable;
}
@@ -191,10 +207,9 @@ int main(int argc, char** argv) {
bool mixdown=mono->count;
- SLV2Plugin plugin=getplugin(pluginname->sval[0],plugins,slv2world);
- slv2_plugins_free(slv2world,plugins);
+ const LilvPlugin* plugin=getplugin(pluginname->sval[0],plugins,lilvworld);
if(!plugin) {
- fprintf(stderr,"No such plugin %s\n",pluginname->sval[0]);
+ fprintf(stderr,"No such plugin %s\n", pluginname->sval[0]);
goto cleanup_argtable;
}
SF_INFO formatinfo;
@@ -209,16 +224,16 @@ int main(int argc, char** argv) {
unsigned int numchannels=formatinfo.channels;
unsigned int blocksize=blksize->ival[0];
- SLV2Value input_class = slv2_value_new_uri(slv2world, SLV2_PORT_CLASS_INPUT);
- SLV2Value output_class = slv2_value_new_uri(slv2world, SLV2_PORT_CLASS_OUTPUT);
- SLV2Value control_class = slv2_value_new_uri(slv2world, SLV2_PORT_CLASS_CONTROL);
- SLV2Value audio_class = slv2_value_new_uri(slv2world, SLV2_PORT_CLASS_AUDIO);
- SLV2Value event_class = slv2_value_new_uri(slv2world, SLV2_PORT_CLASS_EVENT);
- SLV2Value midi_class = slv2_value_new_uri(slv2world, SLV2_EVENT_CLASS_MIDI);
- SLV2Value optional = slv2_value_new_uri(slv2world, SLV2_NAMESPACE_LV2 "connectionOptional");
+ LilvNode* input_class = lilv_new_uri(lilvworld, LILV_URI_INPUT_PORT);
+ LilvNode* output_class = lilv_new_uri(lilvworld, LILV_URI_OUTPUT_PORT);
+ LilvNode* control_class = lilv_new_uri(lilvworld, LILV_URI_CONTROL_PORT);
+ LilvNode* audio_class = lilv_new_uri(lilvworld, LILV_URI_AUDIO_PORT);
+ LilvNode* event_class = lilv_new_uri(lilvworld, LILV_URI_EVENT_PORT);
+ LilvNode* midi_class = lilv_new_uri(lilvworld, LILV_URI_MIDI_EVENT);
+ LilvNode* optional = lilv_new_uri(lilvworld, LILV_NS_LV2 "connectionOptional");
{
- uint32_t numports=slv2_plugin_get_num_ports(plugin);
+ uint32_t numports=lilv_plugin_get_num_ports(plugin);
unsigned int numout=0;
uint32_t outindices[numports];
unsigned int numin=0;
@@ -230,39 +245,39 @@ int main(int argc, char** argv) {
bool portsproblem=false;
for(uint32_t i=0; i<numports; i++) {
- SLV2Port porti=slv2_plugin_get_port_by_index(plugin,i);
- if(slv2_port_is_a(plugin,porti,audio_class)) {
- if(slv2_port_is_a(plugin,porti,input_class)) {
+ const LilvPort* porti=lilv_plugin_get_port_by_index(plugin,i);
+ if(lilv_port_is_a(plugin,porti,audio_class)) {
+ if(lilv_port_is_a(plugin,porti,input_class)) {
inindices[numin++]=i;
- } else if(slv2_port_is_a(plugin,porti,output_class)) {
+ } else if(lilv_port_is_a(plugin,porti,output_class)) {
outindices[numout++]=i;
} else {
fprintf(stderr, "Audio port not input or output\n");
portsproblem=true;
}
- } else if(slv2_port_is_a(plugin,porti,control_class)) {
+ } else if(lilv_port_is_a(plugin,porti,control_class)) {
//We really only care about *input* control ports.
- if(slv2_port_is_a(plugin,porti,input_class)) {
+ if(lilv_port_is_a(plugin,porti,input_class)) {
controlindices[numcontrol++]=i;
- } else if(slv2_port_is_a(plugin,porti,output_class)) {
+ } else if(lilv_port_is_a(plugin,porti,output_class)) {
controloutindices[numcontrolout++]=i;
} else {
fprintf(stderr, "Control port not input or output\n");
portsproblem=true;
}
- } else if(!slv2_port_has_property(plugin,porti,optional)) {
+ } else if(!lilv_port_has_property(plugin,porti,optional)) {
fprintf(stderr,"Error! Unable to handle a required port \n");
portsproblem=true;
}
}
- slv2_value_free(input_class);
- slv2_value_free(output_class);
- slv2_value_free(control_class);
- slv2_value_free(audio_class);
- slv2_value_free(event_class);
- slv2_value_free(midi_class);
- slv2_value_free(optional);
+ lilv_node_free(input_class);
+ lilv_node_free(output_class);
+ lilv_node_free(control_class);
+ lilv_node_free(audio_class);
+ lilv_node_free(event_class);
+ lilv_node_free(midi_class);
+ lilv_node_free(optional);
if(portsproblem) {
goto cleanup_sndfile;
}
@@ -325,7 +340,7 @@ int main(int argc, char** argv) {
bool connections[numplugins][numin][numchannels];
memset(connections,0,sizeof(connections));
- SLV2Instance instances[numplugins];
+ LilvInstance* instances[numplugins];
if(connectargs->count) {
for(int i=0; i<connectargs->count; i++) {
const char * connectionlist=connectargs->sval[i];
@@ -355,7 +370,7 @@ int main(int argc, char** argv) {
bool foundmatch=false;
for(uint32_t port=0; port<numin; port++) {
//Do not need to free, kept internally.
- const char* symbol=slv2_value_as_string(slv2_port_get_symbol(plugin,slv2_plugin_get_port_by_index(plugin,inindices[port])));
+ const char* symbol=lilv_node_as_string(lilv_port_get_symbol(plugin,lilv_plugin_get_port_by_index(plugin,inindices[port])));
if(!strcmp(symbol,nextperiod)) {
connections[pluginstance][port][channel]=true;
foundmatch=true;
@@ -402,8 +417,8 @@ int main(int argc, char** argv) {
}
}
for(unsigned int i=0; i<numplugins; i++) {
- instances[i]=slv2_plugin_instantiate (plugin, formatinfo.samplerate , NULL);
- slv2_instance_activate(instances[i]);
+ instances[i]=lilv_plugin_instantiate (plugin, formatinfo.samplerate , NULL);
+ lilv_instance_activate(instances[i]);
}
{
float buffer[numchannels * blocksize];
@@ -421,7 +436,7 @@ int main(int argc, char** argv) {
float maxvalues[numports];
float defaultvalues[numports];
- slv2_plugin_get_port_ranges_float(plugin,minvalues,maxvalues,defaultvalues);
+ lilv_plugin_get_port_ranges_float(plugin,minvalues,maxvalues,defaultvalues);
for(unsigned int port=0; port<numcontrol; port++) {
unsigned int portindex=controlindices[port];
controlports[port]=getstartingvalue(defaultvalues[portindex],minvalues[portindex],maxvalues[portindex]);
@@ -446,7 +461,7 @@ int main(int argc, char** argv) {
bool foundmatch=false;
for(uint32_t port=0; port<numcontrol; port++) {
//Do not need to free, kept internally.
- const char* symbol=slv2_value_as_string(slv2_port_get_symbol(plugin,slv2_plugin_get_port_by_index(plugin,controlindices[port])));
+ const char* symbol=lilv_node_as_string(lilv_port_get_symbol(plugin,lilv_plugin_get_port_by_index(plugin,controlindices[port])));
if(!strcmp(symbol,parameters)) {
controlports[port]=value;
foundmatch=true;
@@ -467,16 +482,16 @@ int main(int argc, char** argv) {
for(unsigned int i=0; i<numplugins; i++) {
for(unsigned int port=0; port<numin; port++) {
- slv2_instance_connect_port(instances[i],inindices[port],pluginbuffers[i][port]);
+ lilv_instance_connect_port(instances[i],inindices[port],pluginbuffers[i][port]);
}
for(unsigned int port=0; port<numout; port++) {
- slv2_instance_connect_port(instances[i],outindices[port],outputbuffers[i][port]);
+ lilv_instance_connect_port(instances[i],outindices[port],outputbuffers[i][port]);
}
for(unsigned int port=0; port<numcontrol; port++) {
- slv2_instance_connect_port(instances[i],controlindices[port],&controlports[port]);
+ lilv_instance_connect_port(instances[i],controlindices[port],&controlports[port]);
}
for(unsigned int port=0; port<numcontrolout; port++) {
- slv2_instance_connect_port(instances[i],controloutindices[port],&controloutports[port]);
+ lilv_instance_connect_port(instances[i],controloutindices[port],&controloutports[port]);
}
}
char clipped=0;
@@ -484,10 +499,10 @@ int main(int argc, char** argv) {
while((numread = sf_readf_float(insndfile, buffer, blocksize))) {
mix(buffer,numread,numchannels,numplugins,numin,connections,blocksize,pluginbuffers);
for(unsigned int plugnum=0; plugnum<numplugins; plugnum++) {
- slv2_instance_run(instances[plugnum],blocksize);
+ lilv_instance_run(instances[plugnum],blocksize);
}
interleaveoutput(numread, numplugins, numout, blocksize, outputbuffers, sndfilebuffer);
- if(clipOutput(numread*numout,sndfilebuffer) && !clipped) {
+ if(!clipped && clipOutput(numread*numout,sndfilebuffer)) {
clipped=1;
printf("WARNING: Clipping output. Try changing parameters of the plugin to lower the output volume, or if that's not possible, try lowering the volume of the input before processing.\n");
}
@@ -497,8 +512,8 @@ int main(int argc, char** argv) {
//cleanup_lv2:
for(unsigned int i=0; i<numplugins; i++) {
- slv2_instance_deactivate(instances[i]);
- slv2_instance_free(instances[i]);
+ lilv_instance_deactivate(instances[i]);
+ lilv_instance_free(instances[i]);
}
}
cleanup_outfile:
@@ -516,8 +531,8 @@ int main(int argc, char** argv) {
arg_freetable(argtable,sizeof(argtable)/sizeof(argtable[0]));
cleanup_listnamestable:
arg_freetable(listnamestable,sizeof(listnamestable)/sizeof(listnamestable[0]));
- cleanup_slv2world:
- slv2_world_free(slv2world);
+ cleanup_lilvworld:
+ lilv_world_free(lilvworld);
cleanup_listtable:
arg_freetable(listtable,sizeof(listtable)/sizeof(listtable[0]));
--
lv2file packaging
More information about the pkg-multimedia-commits
mailing list