From 2da7b0c2c194a457de9d9a1a9b93c47e2dad1507 Mon Sep 17 00:00:00 2001 From: Maarten Baert Date: Wed, 26 Feb 2014 14:23:45 +0100 Subject: pcm: Insert linear-to-float conversion when rate or channel count is incorrect This fixes a bug where snd_pcm_plug_insert_plugins fails when both client and slave use format float, but the rate or channel count does not match. I also removed some redundant code. Signed-off-by: Maarten Baert Signed-off-by: Takashi Iwai --- src/pcm/pcm_plug.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/pcm/pcm_plug.c b/src/pcm/pcm_plug.c index fa84eaac..ede9c152 100644 --- a/src/pcm/pcm_plug.c +++ b/src/pcm/pcm_plug.c @@ -522,15 +522,13 @@ static int snd_pcm_plug_change_format(snd_pcm_t *pcm, snd_pcm_t **new, snd_pcm_p } #ifdef BUILD_PCM_PLUGIN_LFLOAT } else if (snd_pcm_format_float(slv->format)) { - /* Conversion is done in another plugin */ - if (clt->format == slv->format && - clt->rate == slv->rate && - clt->channels == slv->channels) - return 0; - cfmt = clt->format; - if (snd_pcm_format_linear(clt->format)) + if (snd_pcm_format_linear(clt->format)) { + cfmt = clt->format; f = snd_pcm_lfloat_open; - else + } else if (clt->rate != slv->rate || clt->channels != slv->channels) { + cfmt = SND_PCM_FORMAT_S16; + f = snd_pcm_lfloat_open; + } else return -EINVAL; #endif #ifdef BUILD_PCM_NONLINEAR -- cgit v1.2.1