diff options
| -rw-r--r-- | test/lv2.cc | 39 | ||||
| -rw-r--r-- | test/lv2_test_host.cc | 178 | ||||
| -rw-r--r-- | test/lv2_test_host.h | 61 | 
3 files changed, 161 insertions, 117 deletions
| diff --git a/test/lv2.cc b/test/lv2.cc index 32d896c..243690d 100644 --- a/test/lv2.cc +++ b/test/lv2.cc @@ -86,7 +86,7 @@ public:  		res = h.verify();  		CPPUNIT_ASSERT_EQUAL(0, res); -		res = h.createInstance(); +		res = h.createInstance(44100);  		CPPUNIT_ASSERT_EQUAL(0, res);  		const char config_fmt[] = @@ -151,7 +151,7 @@ public:  		res = h.verify();  		CPPUNIT_ASSERT_EQUAL(0, res); -		res = h.createInstance(); +		res = h.createInstance(44100);  		CPPUNIT_ASSERT_EQUAL(0, res);  		const char config_fmt[] = @@ -224,7 +224,7 @@ public:  		res = h.verify();  		CPPUNIT_ASSERT_EQUAL(0, res); -		res = h.createInstance(); +		res = h.createInstance(44100);  		CPPUNIT_ASSERT_EQUAL(0, res);  		const char config_fmt[] = @@ -270,7 +270,8 @@ public:  		res = h.connectPort(0, seq.data());  		CPPUNIT_ASSERT_EQUAL(0, res); -		for(int i = 1; i <= 16; i++) { +		for(int i = 1; i <= 16; i++) +		{  			memset(pcm_buffer, 1, sizeof(pcm_buffer));  			res += h.connectPort(i, pcm_buffer[i-1]);  		} @@ -282,19 +283,19 @@ public:  		sleep(1); // wait for kit to get loaded (async),  		seq.addMidiNote(5, 1, 127); -		for(int i = 0; i < 10; i++) { +		for(int i = 0; i < 10; i++) +		{  			res = h.run(10); +			sleep(1);  			CPPUNIT_ASSERT_EQUAL(0, res); -			/* -			printf("Iteration:\n"); -			for(int k = 0; k < 4; k++) { -				printf("#%d ", k); -				for(int j = 0; j < 10; j++) printf("[%f]", pcm_buffer[k][j]); -				printf("\n"); -			} -			printf("\n"); -			*/ +			//printf("Iteration:\n"); +			//for(int k = 0; k < 4; k++) { +			//	printf("#%d ", k); +			//	for(int j = 0; j < 10; j++) printf("[%f]", pcm_buffer[k][j]); +			//	printf("\n"); +			//} +			//printf("\n");  			seq.clear();  		} @@ -302,6 +303,7 @@ public:  		seq.addMidiNote(5, 1, 127);  		res = h.run(10); +		sleep(1);  		CPPUNIT_ASSERT_EQUAL(0, res);  		/* @@ -321,9 +323,12 @@ public:  		comp_val.u = 1040744448; // floating point value 0.133301.... -		for(int k = 0; k < 4; k++) { -			for(int j = 0; j < 10; j++) { -	      CPPUNIT_ASSERT_EQUAL(((j==0)?comp_val.f:0), pcm_buffer[k][j]); +		for(int k = 0; k < 4; k++) +		{ +			for(int j = 0; j < 10; j++) +			{ +				CPPUNIT_ASSERT_EQUAL(((j==0)?comp_val.f:0), pcm_buffer[k][j]); +//				printf("[%f]", pcm_buffer[k][j]);  			}  		}  		seq.clear(); diff --git a/test/lv2_test_host.cc b/test/lv2_test_host.cc index 375ae40..9b4fc7a 100644 --- a/test/lv2_test_host.cc +++ b/test/lv2_test_host.cc @@ -42,6 +42,7 @@  #include <openssl/err.h>  #include <openssl/evp.h>  #include <string> +  class Base64 {  public:  	Base64() @@ -64,36 +65,44 @@ public:  	std::string write(const char *in, size_t size)  	{  		std::string out; -		 +  		BIO_write((BIO*)bio, in, size);  		size_t osize = BIO_ctrl_pending((BIO*)mbio);  		char *outbuf = (char*)malloc(osize);  		int len = BIO_read((BIO*)mbio, outbuf, osize); -		if(len < 1) return ""; +		if(len < 1) +		{ +			return ""; +		} +  		out.append(outbuf, len);  		free(outbuf); -		 +  		return out;  	} -	 +  	std::string flush()  	{  		std::string out; -		 +  		(void)BIO_flush((BIO*)bio);  		size_t size = BIO_ctrl_pending((BIO*)mbio);  		char *outbuf = (char*)malloc(size);  		int len = BIO_read((BIO*)mbio, outbuf, size); -		if(len < 1) return ""; +		if(len < 1) +		{ +			return ""; +		} +  		out.append(outbuf, len);  		free(outbuf); -		 +  		return out;  	} @@ -107,13 +116,15 @@ private:  // TODO: Use map<int, std::string> instead -static char** uris = NULL; +static char** uris = nullptr;  static size_t n_uris = 0;  static LV2_URID map_uri(LV2_URID_Map_Handle handle, const char* uri)  { -	for(size_t i = 0; i < n_uris; ++i) { -		if(!strcmp(uris[i], uri)) { +	for(size_t i = 0; i < n_uris; ++i) +	{ +		if(!strcmp(uris[i], uri)) +		{  			return i + 1;  		}  	} @@ -126,22 +137,23 @@ static LV2_URID map_uri(LV2_URID_Map_Handle handle, const char* uri)  static const char* unmap_uri(LV2_URID_Map_Handle handle, LV2_URID urid)  { -	if(urid > 0 && urid <= n_uris) { +	if((urid > 0) && (urid <= n_uris)) +	{  		return uris[urid - 1];  	} -	return NULL; +	return nullptr;  } -LV2_URID_Map       map           = { NULL, map_uri }; +LV2_URID_Map       map           = { nullptr, map_uri };  LV2_Feature        map_feature   = { LV2_URID_MAP_URI, &map }; -LV2_URID_Unmap     unmap         = { NULL, unmap_uri }; +LV2_URID_Unmap     unmap         = { nullptr, unmap_uri };  LV2_Feature        unmap_feature = { LV2_URID_UNMAP_URI, &unmap }; -const LV2_Feature* features[]    = { &map_feature, &unmap_feature, NULL }; +const LV2_Feature* features[]    = { &map_feature, &unmap_feature, nullptr };  LV2TestHost::Sequence::Sequence(void *buffer, size_t buffer_size)  { -  this->buffer = buffer; -  this->buffer_size = buffer_size; +	this->buffer = buffer; +	this->buffer_size = buffer_size;  	seq = (LV2_Atom_Sequence *)buffer; @@ -152,15 +164,14 @@ LV2TestHost::Sequence::Sequence(void *buffer, size_t buffer_size)  }  // Keep this to support atom extension from lv2 < 1.10 -static inline void -_lv2_atom_sequence_clear(LV2_Atom_Sequence* seq) +static inline void _lv2_atom_sequence_clear(LV2_Atom_Sequence* seq)  { -  seq->atom.size = sizeof(LV2_Atom_Sequence_Body); +	seq->atom.size = sizeof(LV2_Atom_Sequence_Body);  }  void LV2TestHost::Sequence::clear()  { -  _lv2_atom_sequence_clear(seq); +	_lv2_atom_sequence_clear(seq);  }  // Keep this to support atom extension from lv2 < 1.10 @@ -169,18 +180,19 @@ _lv2_atom_sequence_append_event(LV2_Atom_Sequence*    seq,                                  uint32_t              capacity,                                  const LV2_Atom_Event* event)  { -  const uint32_t total_size = (uint32_t)sizeof(*event) + event->body.size; - -  if (capacity - seq->atom.size < total_size) { -    return NULL; -  } - -  LV2_Atom_Event* e = lv2_atom_sequence_end(&seq->body, seq->atom.size); -  memcpy(e, event, total_size); -   -  seq->atom.size += lv2_atom_pad_size(total_size); -   -  return e; +	const uint32_t total_size = (uint32_t)sizeof(*event) + event->body.size; + +	if(capacity - seq->atom.size < total_size) +	{ +	  return nullptr; +	} + +	LV2_Atom_Event* e = lv2_atom_sequence_end(&seq->body, seq->atom.size); +	memcpy(e, event, total_size); + +	seq->atom.size += lv2_atom_pad_size(total_size); + +	return e;  }  void LV2TestHost::Sequence::addMidiNote(uint64_t pos, @@ -197,66 +209,88 @@ void LV2TestHost::Sequence::addMidiNote(uint64_t pos,  	ev.event.time.frames = pos;// sample position  	ev.event.body.type = map.map(map.handle, LV2_MIDI__MidiEvent);  	ev.event.body.size = sizeof(ev.msg); -  +  	ev.msg[0] = note_on;  	ev.msg[1] = key;  	ev.msg[2] = velocity;  	LV2_Atom_Event *e =  		_lv2_atom_sequence_append_event(seq, this->buffer_size, &ev.event); -  (void)e; +	(void)e;  }  void *LV2TestHost::Sequence::data()  { -  return buffer; +	return buffer;  }  LV2TestHost::LV2TestHost(const char *lv2_path)  { -	if(lv2_path) { -    setenv("LV2_PATH", lv2_path, 1); -  } +	if(lv2_path) +	{ +		setenv("LV2_PATH", lv2_path, 1); +	}  	world = lilv_world_new(); -  if(world == NULL) return; +	if(world == nullptr) +	{ +		return; +	}  	lilv_world_load_all(world);  }  LV2TestHost::~LV2TestHost()  { -	if(world) lilv_world_free(world); +	if(world) +	{ +		lilv_world_free(world); +	}  }  int LV2TestHost::open(const char *plugin_uri)  { -  if(world == NULL) return 1; +	if(world == nullptr) +	{ +		return 1; +	}  	plugins = lilv_world_get_all_plugins(world); -  if(plugins == NULL) return 2; +	if(plugins == nullptr) +	{ +		return 2; +	}  	uri = lilv_new_uri(world, plugin_uri); -	if(uri == NULL) return 3; +	if(uri == nullptr) +	{ +		return 3; +	}  	plugin = lilv_plugins_get_by_uri(plugins, uri); -  if(plugin == NULL) return 4; - +	if(plugin == nullptr) +	{ +		return 4; +	} -  return 0; +	return 0;  }  int LV2TestHost::verify()  {  	bool verify = lilv_plugin_verify(plugin); -  if(!verify) return 1; -  return 0; +	if(!verify) +	{ +		return 1; +	} + +	return 0;  }  int LV2TestHost::close()  { -  // plugin is a const pointer; nothing to close here. -  return 0; +	// plugin is a const pointer; nothing to close here. +	return 0;  }  /* // Get metadata @@ -330,29 +364,37 @@ int LV2TestHost::getPorts()  	}  }  */ -int LV2TestHost::createInstance() +int LV2TestHost::createInstance(size_t samplerate)  { -	instance = lilv_plugin_instantiate(plugin, 48000, features); -  if(instance == NULL) return 1; -  return 0; +	instance = lilv_plugin_instantiate(plugin, samplerate, features); +	if(instance == nullptr) +	{ +		return 1; +	} + +	return 0;  }  int LV2TestHost::destroyInstance()  { -  if(instance) lilv_instance_free(instance); -  return 0; +	if(instance) +	{ +		lilv_instance_free(instance); +	} + +	return 0;  }  int LV2TestHost::activate()  {  	lilv_instance_activate(instance); -  return 0; +	return 0;  }  int LV2TestHost::deactivate()  {  	lilv_instance_deactivate(instance); -  return 0; +	return 0;  }  int LV2TestHost::loadConfig(const char *config, size_t size) @@ -379,26 +421,26 @@ int LV2TestHost::loadConfig(const char *config, size_t size)  	{  		LilvState* restore_state =  			lilv_state_new_from_string(world, &map, ttl_config); -		 -		lilv_state_restore(restore_state, instance, NULL, NULL, -											 LV2_STATE_IS_POD | LV2_STATE_IS_PORTABLE, -											 features); + +		lilv_state_restore(restore_state, instance, nullptr, nullptr, +		                   LV2_STATE_IS_POD | LV2_STATE_IS_PORTABLE, +		                   features);  	} -  return 0; +	return 0;  }  int LV2TestHost::connectPort(int port, void *portdata)  { -  //  if(lilv_port_is_a(p, port, lv2_ControlPort)) ... +	//  if(lilv_port_is_a(p, port, lv2_ControlPort)) ...  	lilv_instance_connect_port(instance, port, portdata); -  return 0; +	return 0;  }  int LV2TestHost::run(int num_samples)  { -  lilv_instance_run(instance, num_samples); -  return 0; +	lilv_instance_run(instance, num_samples); +	return 0;  } diff --git a/test/lv2_test_host.h b/test/lv2_test_host.h index f0677c7..81aa413 100644 --- a/test/lv2_test_host.h +++ b/test/lv2_test_host.h @@ -24,56 +24,53 @@   *  along with DrumGizmo; if not, write to the Free Software   *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA.   */ -#ifndef __DRUMGIZMO_LV2_TEST_HOST_H__ -#define __DRUMGIZMO_LV2_TEST_HOST_H__ +#pragma once  #include <lilv/lilv.h>  #include <lv2/lv2plug.in/ns/ext/atom/atom.h>  class LV2TestHost {  public: -  class Sequence { -  public: -    Sequence(void *buffer, size_t buffer_size); -    void clear(); -    void addMidiNote(uint64_t pos, uint8_t key, int8_t velocity); -    void *data(); +	class Sequence { +	public: +		Sequence(void *buffer, size_t buffer_size); +		void clear(); +		void addMidiNote(uint64_t pos, uint8_t key, int8_t velocity); +		void *data(); -  private: -    void *buffer; -    size_t buffer_size; -    LV2_Atom_Sequence *seq; -  }; +	private: +		void *buffer; +		size_t buffer_size; +		LV2_Atom_Sequence *seq; +	}; -  LV2TestHost(const char *lv2_path); -  ~LV2TestHost(); +	LV2TestHost(const char *lv2_path); +	~LV2TestHost(); -  int open(const char *plugin_uri); -  int close(); +	int open(const char *plugin_uri); +	int close(); -  int verify(); +	int verify(); -  //void getMetadata(); -  //int getPorts(); +	//void getMetadata(); +	//int getPorts(); -  int createInstance(); -  int destroyInstance(); +	int createInstance(size_t samplerate); +	int destroyInstance(); -  int connectPort(int port, void *portdata); +	int connectPort(int port, void *portdata); -  int activate(); -  int deactivate(); +	int activate(); +	int deactivate(); -  int loadConfig(const char *config, size_t size); -  int run(int num_samples); +	int loadConfig(const char *config, size_t size); +	int run(int num_samples);  private: -  LilvWorld* world; -  const LilvPlugins* plugins;   +	LilvWorld* world; +	const LilvPlugins* plugins;  	LilvNode* uri;  	const LilvPlugin* plugin; -  LilvInstance* instance; +	LilvInstance* instance;  }; - -#endif/*__DRUMGIZMO_LV2_TEST_HOST_H__*/ | 
