mirror of
https://github.com/qemu/qemu.git
synced 2026-04-05 21:46:25 +00:00
audio/mixeng: fix sw/hw mixup in audio_pcm_sw_init_
Commit42061a1435("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:42061a1435("audio/mixeng: replace redundant pcm_info fields with AudioFormat") Reported-by: Dmitry Osipenko <dmitry.osipenko@collabora.com> Reviewed-by: Christian Schoenebeck <qemu_oss@crudebyte.com> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user