All of lore.kernel.org
 help / color / mirror / Atom feed
* LADSPA plugin segfault patch
@ 2003-06-13 21:52 David Honeywell
  2003-06-14  7:33 ` Jaroslav Kysela
  0 siblings, 1 reply; 3+ messages in thread
From: David Honeywell @ 2003-06-13 21:52 UTC (permalink / raw)
  To: alsa-devel

I have been experimenting with LADSPA plugins available from 
http://plugin.org.uk/ and other sources.  I found that many of the 
plugins caused a segfault during pcm playback, while some did not.  I 
traced the problem to LADSPA plugins which do not have an activate() 
function.  Apparently this function can be present, or set to NULL.

I found that whenever activate() or deactivate() are called in 
pcm_ladspa.c, a sanity check is performed before calling the function. 
EXCEPT in one instance.  When I added the sanity check to that instance, 
the segfaults disappeared and all of the plugins that I tried worked. 
Here is a patch for alsa-lib/src/pcm/pcm_ladspa.c:


--- pcm_ladspa.orig	2003-06-13 13:34:58.000000000 -0700
+++ pcm_ladspa.c	2003-06-13 13:32:02.000000000 -0700
@@ -412,7 +412,8 @@
  				return -EINVAL;
  			}
  			list_add_tail(&instance->list, &plugin->instances);
-			plugin->desc->activate(instance->handle);
+			if (plugin->desc->activate)
+			  plugin->desc->activate(instance->handle);
  			if (plugin->policy == SND_PCM_LADSPA_POLICY_DUPLICATE) {
  				err = snd_pcm_ladspa_connect_plugin_duplicate(plugin, 
&plugin->input, instance, idx);
  				if (err < 0) {


For anyone that's interested, my asound.conf looks like this:

pcm.pitch
{
    type ladspa
    slave.pcm "plughw:0,0"
    path "/usr/local/lib/ladspa"
    plugins
    [
       {
          label amPitchshift
          input
          {
             controls [ 1.059463 3 ]
          }
       }
    ]
}

There's one other problem that I haven't been able to solve yet.  When I 
use the latest ALSA library, I get error messages that complain about 
the version whenever I try to play pcm through the plugin:

ALSA lib dlmisc.c:107:(snd_dlsym_verify) unable to verify version for 
symbol ladspa_descriptor

Compiling --with-versioned= yes or no makes no difference in this case.
The only way I have been able to get around this problem is to use an 
old ALSA library (I'm currently using 0.9.0rc6).  I have tried many 
versions of the library.  The problem seems to have started with CVS 
version 1.11 of pcm_ladspa.c.  Version 1.10 uses dlopen(), dlclose(), 
and dlsym(), while version 1.11 uses snd_dlopen(), snd_dlclose(), and 
snd_dlsym().  This appears to be the only difference between the two 
versions.  Any help on this issue would be greatly appreciated, as I'd 
like to use the most up-to-date library.



-------------------------------------------------------
This SF.NET email is sponsored by: eBay
Great deals on office technology -- on eBay now! Click here:
http://adfarm.mediaplex.com/ad/ck/711-11697-6916-5

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2003-06-25 18:02 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2003-06-13 21:52 LADSPA plugin segfault patch David Honeywell
2003-06-14  7:33 ` Jaroslav Kysela
2003-06-25 18:02   ` David Honeywell

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.