[alsa-devel] [PATCH] pcm: rate: Add capability to pass configuration node to plugins

Takashi Iwai tiwai at suse.de
Wed Feb 8 16:36:06 CET 2017


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 at 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 at 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


More information about the Alsa-devel mailing list