View Issue Details

IDProjectCategoryView StatusLast Update
0002434ardourbugspublic2020-04-19 20:13
Reporternowhiskey Assigned Topaul  
PrioritynormalSeverityminorReproducibilityalways
Status closedResolutionfixed 
Product VersionSVN/2.0-ongoing 
Summary0002434: plugins displayed twice in the plugin manager
Description-create new session
-open the plugin manager ( on the master track or any other created track, pre or post fader)
-now try to brows for b.e. '4-band parametric filter'
-in the search line type '4'
-all the plugins whose name contains '4' are shown twice
-now type '-' ( for 4-parametric...)
-the plugin ('4-band parametric filter') is shown twice

this happens with every other plugin too.

cheers,
doc
TagsNo tags attached.

Activities

colinf

2008-11-06 20:02

updater   ~0005223

This happens when the LADSPA_PATH environment variable refers to a directory that is also in the standard LADSPA path defined in libs/ardour/plugin_manager.cc.

This was introduced by svn 3978, "make LADSPA_PATH augment the standard LADSPA search path, not replace it".

Here's a patch that adds the standard locations to ladspa_path only if it doesn't already contain them, which cures the bug.

2008-11-06 20:02

 

ladspa-path-dedupe.patch (1,513 bytes)   
Index: libs/ardour/plugin_manager.cc
===================================================================
--- libs/ardour/plugin_manager.cc	(revision 4097)
+++ libs/ardour/plugin_manager.cc	(working copy)
@@ -150,15 +150,40 @@
 PluginManager::ladspa_refresh ()
 {
 	_ladspa_plugin_info.clear ();
-	static const char *standard_path = "/usr/local/lib64/ladspa:/usr/local/lib/ladspa:/usr/lib64/ladspa:/usr/lib/ladspa:/Library/Audio/Plug-Ins/LADSPA";
 	
+	static const char *standard_paths[] = {
+		"/usr/local/lib64/ladspa",
+		"/usr/local/lib/ladspa",
+		"/usr/lib64/ladspa",
+		"/usr/lib/ladspa",
+		"/Library/Audio/Plug-Ins/LADSPA",
+		""
+	};
+	
 	/* allow LADSPA_PATH to augment, not override standard locations */
 
-	if (ladspa_path.empty()) {
-		ladspa_path = standard_path;
-	} else {
+	/* Only add standard locations to ladspa_path if it doesn't
+	 * already contain them. Check for trailing '/'s too.
+	 */
+	 
+	int i;
+	for (i = 0; standard_paths[i][0]; i++) {
+		size_t found = ladspa_path.find(standard_paths[i]);
+		if (found != ladspa_path.npos) {
+			switch (ladspa_path[found + strlen(standard_paths[i])]) {
+				case ':' :
+				case '\0':
+					continue;
+				case '/' :
+					if (ladspa_path[found + strlen(standard_paths[i]) + 1] == ':' ||
+					    ladspa_path[found + strlen(standard_paths[i]) + 1] == '\0') {
+						continue;
+					}
+			}
+		}
 		ladspa_path += ":";
-		ladspa_path += standard_path;
+		ladspa_path += standard_paths[i]; 
+		
 	}
 
 	ladspa_discover_from_path (ladspa_path);
ladspa-path-dedupe.patch (1,513 bytes)   

colinf

2008-11-06 20:07

updater   ~0005224

Last edited: 2008-11-06 20:07

3.0 doesn't suffer from this bug, but it also doesn't have the "make LADSPA_PATH augment the standard LADSPA search path, not replace it" change.

Anyway, here's another patch which makes that change for 3.0 and incorporates the fix for the bug as well.

2008-11-06 20:07

 

ladspa-path-dedupe-3.0.patch (1,387 bytes)   
Index: libs/ardour/plugin_manager.cc
===================================================================
--- libs/ardour/plugin_manager.cc	(revision 4022)
+++ libs/ardour/plugin_manager.cc	(working copy)
@@ -155,8 +155,39 @@
 {
 	_ladspa_plugin_info.clear ();
 
-	if (ladspa_path.length() == 0) {
-		ladspa_path = "/usr/local/lib64/ladspa:/usr/local/lib/ladspa:/usr/lib64/ladspa:/usr/lib/ladspa:/Library/Audio/Plug-Ins/LADSPA";
+	static const char *standard_paths[] = {
+		"/usr/local/lib64/ladspa",
+		"/usr/local/lib/ladspa",
+		"/usr/lib64/ladspa",
+		"/usr/lib/ladspa",
+		"/Library/Audio/Plug-Ins/LADSPA",
+		""
+	};
+	
+	/* allow LADSPA_PATH to augment, not override standard locations */
+
+	/* Only add standard locations to ladspa_path if it doesn't
+	 * already contain them. Check for trailing '/'s too.
+	 */
+	 
+	int i;
+	for (i = 0; standard_paths[i][0]; i++) {
+		size_t found = ladspa_path.find(standard_paths[i]);
+		if (found != ladspa_path.npos) {
+			switch (ladspa_path[found + strlen(standard_paths[i])]) {
+				case ':' :
+				case '\0':
+					continue;
+				case '/' :
+					if (ladspa_path[found + strlen(standard_paths[i]) + 1] == ':' ||
+					    ladspa_path[found + strlen(standard_paths[i]) + 1] == '\0') {
+						continue;
+					}
+			}
+		}
+		ladspa_path += ":";
+		ladspa_path += standard_paths[i]; 
+		
 	}
 
 	ladspa_discover_from_path (ladspa_path);
ladspa-path-dedupe-3.0.patch (1,387 bytes)   

nowhiskey

2008-11-06 20:41

reporter   ~0005225

applying this patch to ongoing-rev4098 makes ardour working in proper way again.

cheers,
doc

2008-11-07 11:24

 

ladspa-path-dedupe2.patch (1,570 bytes)   
Index: libs/ardour/plugin_manager.cc
===================================================================
--- libs/ardour/plugin_manager.cc	(revision 4104)
+++ libs/ardour/plugin_manager.cc	(working copy)
@@ -150,15 +150,42 @@
 PluginManager::ladspa_refresh ()
 {
 	_ladspa_plugin_info.clear ();
-	static const char *standard_path = "/usr/local/lib64/ladspa:/usr/local/lib/ladspa:/usr/lib64/ladspa:/usr/lib/ladspa:/Library/Audio/Plug-Ins/LADSPA";
 	
+	static const char *standard_paths[] = {
+		"/usr/local/lib64/ladspa",
+		"/usr/local/lib/ladspa",
+		"/usr/lib64/ladspa",
+		"/usr/lib/ladspa",
+		"/Library/Audio/Plug-Ins/LADSPA",
+		""
+	};
+	
 	/* allow LADSPA_PATH to augment, not override standard locations */
 
-	if (ladspa_path.empty()) {
-		ladspa_path = standard_path;
-	} else {
-		ladspa_path += ":";
-		ladspa_path += standard_path;
+	/* Only add standard locations to ladspa_path if it doesn't
+	 * already contain them. Check for trailing '/'s too.
+	 */
+	 
+	int i;
+	for (i = 0; standard_paths[i][0]; i++) {
+		size_t found = ladspa_path.find(standard_paths[i]);
+		if (found != ladspa_path.npos) {
+			switch (ladspa_path[found + strlen(standard_paths[i])]) {
+				case ':' :
+				case '\0':
+					continue;
+				case '/' :
+					if (ladspa_path[found + strlen(standard_paths[i]) + 1] == ':' ||
+					    ladspa_path[found + strlen(standard_paths[i]) + 1] == '\0') {
+						continue;
+					}
+			}
+		}
+		if (!ladspa_path.empty())
+			ladspa_path += ":";
+		
+		ladspa_path += standard_paths[i]; 
+		
 	}
 
 	ladspa_discover_from_path (ladspa_path);
ladspa-path-dedupe2.patch (1,570 bytes)   

2008-11-07 11:25

 

ladspa-path-dedupe2-3.0.patch (1,419 bytes)   
Index: libs/ardour/plugin_manager.cc
===================================================================
--- libs/ardour/plugin_manager.cc	(revision 4097)
+++ libs/ardour/plugin_manager.cc	(working copy)
@@ -155,8 +155,41 @@
 {
 	_ladspa_plugin_info.clear ();
 
-	if (ladspa_path.length() == 0) {
-		ladspa_path = "/usr/local/lib64/ladspa:/usr/local/lib/ladspa:/usr/lib64/ladspa:/usr/lib/ladspa:/Library/Audio/Plug-Ins/LADSPA";
+	static const char *standard_paths[] = {
+		"/usr/local/lib64/ladspa",
+		"/usr/local/lib/ladspa",
+		"/usr/lib64/ladspa",
+		"/usr/lib/ladspa",
+		"/Library/Audio/Plug-Ins/LADSPA",
+		""
+	};
+	
+	/* allow LADSPA_PATH to augment, not override standard locations */
+
+	/* Only add standard locations to ladspa_path if it doesn't
+	 * already contain them. Check for trailing '/'s too.
+	 */
+	 
+	int i;
+	for (i = 0; standard_paths[i][0]; i++) {
+		size_t found = ladspa_path.find(standard_paths[i]);
+		if (found != ladspa_path.npos) {
+			switch (ladspa_path[found + strlen(standard_paths[i])]) {
+				case ':' :
+				case '\0':
+					continue;
+				case '/' :
+					if (ladspa_path[found + strlen(standard_paths[i]) + 1] == ':' ||
+					    ladspa_path[found + strlen(standard_paths[i]) + 1] == '\0') {
+						continue;
+					}
+			}
+		}
+		if (!ladspa_path.empty())
+			ladspa_path += ":";
+
+		ladspa_path += standard_paths[i]; 
+		
 	}
 
 	ladspa_discover_from_path (ladspa_path);
ladspa-path-dedupe2-3.0.patch (1,419 bytes)   

colinf

2008-11-07 11:26

updater   ~0005227

And here's a patch that should actually work when LADSPA_PATH is empty, too...

seablade

2008-11-24 11:05

manager   ~0005323

Assigned to Paul to check the patches.

    Seablade

paul

2008-11-25 11:53

administrator   ~0005366

2.0 patch committed at rev 4253.

system

2020-04-19 20:13

developer   ~0021808

Issue has been closed automatically, by Trigger Close Plugin.
Feel free to re-open with additional information if you think the issue is not resolved.

Issue History

Date Modified Username Field Change
2008-10-28 12:05 nowhiskey New Issue
2008-11-06 20:02 colinf Note Added: 0005223
2008-11-06 20:02 colinf File Added: ladspa-path-dedupe.patch
2008-11-06 20:07 colinf Note Added: 0005224
2008-11-06 20:07 colinf File Added: ladspa-path-dedupe-3.0.patch
2008-11-06 20:41 nowhiskey Note Added: 0005225
2008-11-07 11:24 colinf File Added: ladspa-path-dedupe2.patch
2008-11-07 11:25 colinf File Added: ladspa-path-dedupe2-3.0.patch
2008-11-07 11:26 colinf Note Added: 0005227
2008-11-24 11:05 seablade Status new => assigned
2008-11-24 11:05 seablade Assigned To => paul
2008-11-24 11:05 seablade Note Added: 0005323
2008-11-25 11:53 paul cost => 0.00
2008-11-25 11:53 paul Status assigned => resolved
2008-11-25 11:53 paul Resolution open => fixed
2008-11-25 11:53 paul Note Added: 0005366
2010-04-24 10:28 cth103 Category bugs => bugs2
2010-04-24 10:31 cth103 Category bugs2 => bugs
2020-04-19 20:13 system Note Added: 0021808
2020-04-19 20:13 system Status resolved => closed