From 599195cb07c84c57a00dc51c645039a6021f3949 Mon Sep 17 00:00:00 2001
From: "Ryan C. Gordon" <[EMAIL REDACTED]>
Date: Tue, 4 Feb 2025 11:04:24 -0500
Subject: [PATCH] audio: SDL_BuildAudioCVT wasn't taking format conversion into
account.
Thanks to @cooltyp100 for tracking this down.
Fixes #304.
---
src/sdl2_compat.c | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/src/sdl2_compat.c b/src/sdl2_compat.c
index 64517cb..bbfd64c 100644
--- a/src/sdl2_compat.c
+++ b/src/sdl2_compat.c
@@ -9540,6 +9540,20 @@ SDL_BuildAudioCVT(SDL_AudioCVT *cvt,
cvt->needed = 0;
}
+ if (src_format != dst_format) {
+ const Uint16 src_bitsize = SDL_AUDIO_BITSIZE(src_format);
+ const Uint16 dst_bitsize = SDL_AUDIO_BITSIZE(dst_format);
+
+ if (src_bitsize < dst_bitsize) {
+ const int mult = (dst_bitsize / src_bitsize);
+ cvt->len_mult *= mult;
+ cvt->len_ratio *= mult;
+ } else if (src_bitsize > dst_bitsize) {
+ const int div = (src_bitsize / dst_bitsize);
+ cvt->len_ratio /= div;
+ }
+ }
+
if (src_channels < dst_channels) {
cvt->len_mult = ((cvt->len_mult * dst_channels) + (src_channels - 1)) / src_channels;
}