On Wed, 08 Feb 2017 11:50:44 +0100, Alan Young wrote:
It is useful for the converter used by a rate plugin to be capable of receiving configuration. This patch enables the "converter" node of the configuration of a "type rate" plugin to be specified as a compound and passed to open func of the converter plugin.
The SND_PCM_RATE_PLUGIN_VERSION is incremented and SND_PCM_RATE_PLUGIN_VERSION_CONFIGURE is defined so that a converter plugin can test whether it should expect the extra parameter on its open func.
Alan.
[1.2 <text/html; utf-8 (7bit)>]
From febb2e95682e99fee04f5853f783ba48748850b5 Mon Sep 17 00:00:00 2001
From: Alan Young consult.awy@gmail.com Date: Thu, 7 Apr 2016 09:15:04 +0100 Subject: [PATCH] pcm: rate: Add capability to pass configuration node to plugins
If a rate plugin uses a node (compound) instead of a plain string for its "converter" then that compound will be passed as an additional parameter to the plugin open() function (SND_PCM_RATE_PLUGIN_ENTRY(XXX)).
The existing behaviour of using the first (usable) plain string value, regardless of parameter name, within the configuration node as the converter name is unchanged.
Signed-off-by: Alan Young consult.awy@gmail.com
include/pcm_rate.h | 5 +++-- src/pcm/pcm_rate.c | 19 ++++++++++++------- 2 files changed, 15 insertions(+), 9 deletions(-)
diff --git a/include/pcm_rate.h b/include/pcm_rate.h index 4d70df2..fb7ec55 100644 --- a/include/pcm_rate.h +++ b/include/pcm_rate.h @@ -38,7 +38,8 @@ extern "C" { /**
- Protocol version
*/ -#define SND_PCM_RATE_PLUGIN_VERSION 0x010002 +#define SND_PCM_RATE_PLUGIN_VERSION 0x010003 +#define SND_PCM_RATE_PLUGIN_VERSION_CONFIGURE 0x010003
/** hw_params information for a single side */ typedef struct snd_pcm_rate_side_info { @@ -118,7 +119,7 @@ typedef struct snd_pcm_rate_ops {
/** open function type */ typedef int (*snd_pcm_rate_open_func_t)(unsigned int version, void **objp,
snd_pcm_rate_ops_t *opsp);
snd_pcm_rate_ops_t *opsp, const snd_config_t *conf);
The idea is interesting, but a devil lives always in the detail: you can't change the existing function definition. This will be broken once you mix the old version of plugin with the new system or vice versa.
Alternatively, try to provide another function _snd_pcm_rate_xxx_open_conf() or such. In addition, you should provide the old open function as is for now, too. Then the rate plugin can try to get and open via snd_dlobj_cache_get() for the open_conf at first, then fall back to the old open function.
thanks,
Takashi