On Wednesday, 18 March 2026 09:43:01 CET [email protected] wrote: > From: Marc-André Lureau <[email protected]> > > Commit 42061a14358 ("audio/mixeng: replace redundant pcm_info fields > with AudioFormat") accidentally changed the conv/clip function selection > in audio_pcm_sw_init_ to use hw->info.af (the hardware voice format) > instead of sw->info.af (the software voice format). This causes audio > distortion when the software and hardware voices use different formats, > as the wrong conversion functions are applied to the audio data. > > Fix by using sw->info.af, restoring the original behavior. > > Fixes: 42061a14358c ("audio/mixeng: replace redundant pcm_info fields with > AudioFormat") Reported-by: Dmitry Osipenko <[email protected]> > Signed-off-by: Marc-André Lureau <[email protected]> > --- > audio/audio_template.h | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-)
Haven't tested this, but those changes (hw instead of sw) were definitely wrong and are likely to cause misbehaviours like the reported one. I also haven't found further similar issues, so: Reviewed-by: Christian Schoenebeck <[email protected]> > > diff --git a/audio/audio_template.h b/audio/audio_template.h > index 228369cf9a1..f0b2458996a 100644 > --- a/audio/audio_template.h > +++ b/audio/audio_template.h > @@ -172,7 +172,7 @@ static int glue (audio_pcm_sw_init_, TYPE) ( > sw->empty = true; > #endif > > - if (audio_format_is_float(hw->info.af)) { > + if (audio_format_is_float(sw->info.af)) { > #ifdef DAC > sw->conv = mixeng_conv_float[sw->info.nchannels == 2] > [sw->info.swap_endianness]; > @@ -187,9 +187,9 @@ static int glue (audio_pcm_sw_init_, TYPE) ( > sw->clip = mixeng_clip > #endif > [sw->info.nchannels == 2] > - [audio_format_is_signed(hw->info.af)] > + [audio_format_is_signed(sw->info.af)] > [sw->info.swap_endianness] > - [audio_format_to_index(hw->info.af)]; > + [audio_format_to_index(sw->info.af)]; > } > > sw->name = g_strdup (name);
