sdl2-compat: audio: SDL_BuildAudioCVT wasn't taking format conversion into account.

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;
         }