SDL_mixer: update music_drmp3.c after drmp3 api changes

From 2a6e5ef4d487aaffdef827358223800c723c6bc3 Mon Sep 17 00:00:00 2001
From: Ozkan Sezer <[EMAIL REDACTED]>
Date: Mon, 10 Mar 2025 01:29:40 +0300
Subject: [PATCH] update music_drmp3.c after drmp3 api changes

---
 src/codecs/music_drmp3.c | 24 ++++++++++++++++++++++--
 1 file changed, 22 insertions(+), 2 deletions(-)

diff --git a/src/codecs/music_drmp3.c b/src/codecs/music_drmp3.c
index c5ec2eef..f02d4a7e 100644
--- a/src/codecs/music_drmp3.c
+++ b/src/codecs/music_drmp3.c
@@ -70,13 +70,33 @@ static size_t DRMP3_ReadCB(void *context, void *buf, size_t size)
 static drmp3_bool32 DRMP3_SeekCB(void *context, int offset, drmp3_seek_origin origin)
 {
     DRMP3_Music *music = (DRMP3_Music *)context;
-    int whence = (origin == drmp3_seek_origin_start) ? SDL_IO_SEEK_SET : SDL_IO_SEEK_CUR;
+    int whence;
+    switch (origin) {
+    case drmp3_seek_origin_start:
+        whence = SDL_IO_SEEK_SET;
+        break;
+    case drmp3_seek_origin_current:
+        whence = SDL_IO_SEEK_CUR;
+        break;
+    case drmp3_seek_origin_end:
+        whence = SDL_IO_SEEK_END;
+        break;
+    default:
+        return DRMP3_FALSE;
+    }
     if (MP3_IOseek(&music->file, offset, whence) < 0) {
         return DRMP3_FALSE;
     }
     return DRMP3_TRUE;
 }
 
+static drmp3_bool32 DRMP3_TellCB(void *context, drmp3_int64 *pos)
+{
+    DRMP3_Music *music = (DRMP3_Music *)context;
+    *pos = MP3_IOtell(&music->file);
+    return (*pos < 0) ? DRMP3_FALSE : DRMP3_TRUE;
+}
+
 static int DRMP3_Seek(void *context, double position);
 
 static void *DRMP3_CreateFromIO(SDL_IOStream *src, bool closeio)
@@ -104,7 +124,7 @@ static void *DRMP3_CreateFromIO(SDL_IOStream *src, bool closeio)
 
     MP3_IOseek(&music->file, 0, SDL_IO_SEEK_SET);
 
-    if (!drmp3_init(&music->dec, DRMP3_ReadCB, DRMP3_SeekCB, music, NULL)) {
+    if (!drmp3_init(&music->dec, DRMP3_ReadCB, DRMP3_SeekCB, DRMP3_TellCB, NULL, music, NULL)) {
         SDL_free(music);
         SDL_SetError("music_drmp3: corrupt mp3 file (bad stream).");
         return NULL;