diff options
author | Thierry Bultel <thierry.bultel@iot.bzh> | 2019-02-13 11:59:45 +0100 |
---|---|---|
committer | Thierry Bultel <thierry.bultel@iot.bzh> | 2019-05-13 13:55:58 +0200 |
commit | e355716f6bac57615195333559a746e283e22060 (patch) | |
tree | 5fa207017fd653449f0dee932dcf1f84a11c9b71 /plugins/alsa/alsa-plug-rate.c | |
parent | eb45566268d0bbb7df9e30f733a95d79275eb3a7 (diff) |
pcm plugs: rework the alsa config cleanup
The alsa config (for softvol, routes, rate conversion ...) was cleaned up
by the owner stream or zone, at their deletion time. This was a mistake,
because when the stream or zone creation was not complete, the cleanup of
the configuration was not done.
Instead of doing that, the config is attached to the plug
objects as private data (in the AlsaPcmCtlT structure).
Since the AlsaPcmCtlT are always recorded in the creation transaction,
it is easy to call the cleaning callback (when it exists) when the
transaction is deleted.
Change-Id: I952871518a20bfe0be6398887bc747338cf574fb
Signed-off-by: Thierry Bultel <thierry.bultel@iot.bzh>
Diffstat (limited to 'plugins/alsa/alsa-plug-rate.c')
-rw-r--r-- | plugins/alsa/alsa-plug-rate.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/plugins/alsa/alsa-plug-rate.c b/plugins/alsa/alsa-plug-rate.c index d4a3068..ea96da2 100644 --- a/plugins/alsa/alsa-plug-rate.c +++ b/plugins/alsa/alsa-plug-rate.c @@ -23,6 +23,13 @@ ALSA_PLUG_PROTO(rate); +static void rateConfigClean(SoftMixerT *mixer, void * arg) { + snd_config_t * rateConfig = arg; + AFB_API_DEBUG(mixer->api, "%s... rate config", __func__); + snd_config_delete(rateConfig); + snd_config_update(); +} + PUBLIC AlsaPcmCtlT* AlsaCreateRate(SoftMixerT *mixer, AlsaStreamAudioT * stream, const char* pcmName, AlsaPcmCtlT *pcmSlave, AlsaPcmHwInfoT *params, int open) { snd_config_t *rateConfig, *slaveConfig, *elemConfig, *pcmConfig; @@ -71,8 +78,6 @@ PUBLIC AlsaPcmCtlT* AlsaCreateRate(SoftMixerT *mixer, AlsaStreamAudioT * stream, goto OnErrorExit; } - stream->rateConfig = rateConfig; - if (open) error = _snd_pcm_rate_open(&pcmPlug->handle, pcmPlug->cid.cardid, snd_config, rateConfig, SND_PCM_STREAM_PLAYBACK, SND_PCM_NONBLOCK); if (error) { AFB_ApiError(mixer->api, @@ -81,6 +86,9 @@ PUBLIC AlsaPcmCtlT* AlsaCreateRate(SoftMixerT *mixer, AlsaStreamAudioT * stream, goto OnErrorExit; } + pcmPlug->private_data = rateConfig; + pcmPlug->private_data_clean = rateConfigClean; + // Debug config & pcm //AlsaDumpCtlConfig(mixer, "plug-rate", pcmConfig, 1); AlsaDumpCtlConfig (mixer, "plug-rate", rateConfig, 1); |