On 3/18/26 11:43, [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(-)
> 
> 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);

Thanks a lot for the fix!

-- 
Best regards,
Dmitry

Reply via email to