summaryrefslogtreecommitdiffstats
path: root/src/plugininstance.c
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2011-04-29 03:09:50 +0000
committerDavid Robillard <d@drobilla.net>2011-04-29 03:09:50 +0000
commit9567f51e793edd61883befd2b0ae390e130c2120 (patch)
treea20fadc2d60fc93704a97db64778f8a3934b4d45 /src/plugininstance.c
parentbc44bbcb6a6315aeef5e095bb1b339f35c488b53 (diff)
downloadlilv-9567f51e793edd61883befd2b0ae390e130c2120.tar.gz
lilv-9567f51e793edd61883befd2b0ae390e130c2120.tar.bz2
lilv-9567f51e793edd61883befd2b0ae390e130c2120.zip
Rename files to match type names.
git-svn-id: http://svn.drobilla.net/lad/trunk/lilv@3230 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/plugininstance.c')
-rw-r--r--src/plugininstance.c143
1 files changed, 0 insertions, 143 deletions
diff --git a/src/plugininstance.c b/src/plugininstance.c
deleted file mode 100644
index 55e0f99..0000000
--- a/src/plugininstance.c
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- Copyright 2007-2011 David Robillard <http://drobilla.net>
-
- Permission to use, copy, modify, and/or distribute this software for any
- purpose with or without fee is hereby granted, provided that the above
- copyright notice and this permission notice appear in all copies.
-
- THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-*/
-
-#define _XOPEN_SOURCE 500
-
-#include <assert.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "lilv_internal.h"
-
-LILV_API
-LilvInstance*
-lilv_plugin_instantiate(const LilvPlugin* plugin,
- double sample_rate,
- const LV2_Feature*const* features)
-{
- LilvInstance* result = NULL;
-
- const LV2_Feature** local_features = NULL;
- if (features == NULL) {
- local_features = malloc(sizeof(LV2_Feature));
- local_features[0] = NULL;
- }
-
- const char* const lib_uri = lilv_value_as_uri(lilv_plugin_get_library_uri(plugin));
- const char* const lib_path = lilv_uri_to_path(lib_uri);
-
- if (!lib_path)
- return NULL;
-
- dlerror();
- void* lib = dlopen(lib_path, RTLD_NOW);
- if (!lib) {
- LILV_ERRORF("Unable to open library %s (%s)\n", lib_path, dlerror());
- return NULL;
- }
-
- LV2_Descriptor_Function df = (LV2_Descriptor_Function)
- lilv_dlfunc(lib, "lv2_descriptor");
-
- if (!df) {
- LILV_ERRORF("Could not find symbol 'lv2_descriptor', "
- "%s is not a LV2 plugin.\n", lib_path);
- dlclose(lib);
- return NULL;
- } else {
- // Search for plugin by URI
-
- const char* bundle_path = lilv_uri_to_path(lilv_value_as_uri(
- lilv_plugin_get_bundle_uri(plugin)));
-
- for (uint32_t i = 0; true; ++i) {
- const LV2_Descriptor* ld = df(i);
- if (!ld) {
- LILV_ERRORF("Did not find plugin %s in %s\n",
- lilv_value_as_uri(lilv_plugin_get_uri(plugin)), lib_path);
- dlclose(lib);
- break; // return NULL
- } else {
- // Parse bundle URI to use as base URI
- const LilvValue* bundle_uri = lilv_plugin_get_bundle_uri(plugin);
- const char* bundle_uri_str = lilv_value_as_uri(bundle_uri);
- SerdURI base_uri;
- if (!serd_uri_parse((const uint8_t*)bundle_uri_str, &base_uri)) {
- dlclose(lib);
- break;
- }
-
- // Resolve library plugin URI against base URI
- SerdURI abs_uri;
- SerdNode abs_uri_node = serd_node_new_uri_from_string(
- (const uint8_t*)ld->URI, &base_uri, &abs_uri);
- if (!abs_uri_node.buf) {
- LILV_ERRORF("Failed to parse library plugin URI `%s'\n", ld->URI);
- dlclose(lib);
- break;
- }
-
- if (!strcmp((const char*)abs_uri_node.buf,
- lilv_value_as_uri(lilv_plugin_get_uri(plugin)))) {
- // Create LilvInstance to return
- result = malloc(sizeof(struct LilvInstanceImpl));
- result->lv2_descriptor = ld;
- result->lv2_handle = ld->instantiate(ld, sample_rate, (char*)bundle_path,
- (features) ? features : local_features);
- result->pimpl = lib;
- serd_node_free(&abs_uri_node);
- break;
- } else {
- serd_node_free(&abs_uri_node);
- }
- }
- }
- }
-
- if (result) {
- assert(lilv_plugin_get_num_ports(plugin) > 0);
-
- // Failed to instantiate
- if (result->lv2_handle == NULL) {
- free(result);
- return NULL;
- }
-
- // "Connect" all ports to NULL (catches bugs)
- for (uint32_t i = 0; i < lilv_plugin_get_num_ports(plugin); ++i)
- result->lv2_descriptor->connect_port(result->lv2_handle, i, NULL);
- }
-
- free(local_features);
-
- return result;
-}
-
-LILV_API
-void
-lilv_instance_free(LilvInstance* instance)
-{
- if (!instance)
- return;
-
- instance->lv2_descriptor->cleanup(instance->lv2_handle);
- instance->lv2_descriptor = NULL;
- dlclose(instance->pimpl);
- instance->pimpl = NULL;
- free(instance);
-}
-