[alsa-devel] [RFC PATCH] alsa-lib: Call LADSPA activate after all ports are setup

Matthias Larisch mail at matthias-larisch.de
Mon Mar 17 19:40:00 CET 2014


Hey there,

I notices mainly swh-plugins (like butterworth_1902) to crash on seek with
mplayer or mpd. This is due to their behaviour on relying on the activate call
after the control inputs are set.

This is not right by LADSPA API description but I see no point in NOT calling
activate as late as possible in alsa-lib.

Comments?

Regards,

Matthias

From f7f5d920c845fc54ffef208f68f568b06e8fadd1 Mon Sep 17 00:00:00 2001
From: Matthias Larisch <mail at matthias-larisch.de>
Date: Mon, 17 Mar 2014 19:37:01 +0100
Subject: [PATCH] call ladspa activate as late as possible to work around wrong
 plugin behaviour

---
 src/pcm/pcm_ladspa.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/pcm/pcm_ladspa.c b/src/pcm/pcm_ladspa.c
index 9ce5242..7d1e3df 100644
--- a/src/pcm/pcm_ladspa.c
+++ b/src/pcm/pcm_ladspa.c
@@ -645,8 +645,6 @@ static int snd_pcm_ladspa_allocate_instances(snd_pcm_t *pcm, snd_pcm_ladspa_t *l
 				return -EINVAL;
 			}
 			list_add_tail(&instance->list, &plugin->instances);
-			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, &plugin->output, instance, idx);
 				if (err < 0) {
@@ -664,6 +662,8 @@ static int snd_pcm_ladspa_allocate_instances(snd_pcm_t *pcm, snd_pcm_ladspa_t *l
 			assert(err >= 0);
 			err = snd_pcm_ladspa_connect_controls(plugin, &plugin->output, instance);
 			assert(err >= 0);
+			if (plugin->desc->activate)
+				plugin->desc->activate(instance->handle);
 		}
 		err = snd_pcm_ladspa_check_connect(plugin, &plugin->input, &instance->input, depth);
 		if (err < 0)
-- 
1.9.0



More information about the Alsa-devel mailing list