From bc7feb43de9b775c0dfe8330a4e91380ae4c602d Mon Sep 17 00:00:00 2001 From: Ozkan Sezer Date: Thu, 3 Apr 2025 17:50:20 +0300 Subject: [PATCH 01/48] update vendored wavpack. --- external/wavpack | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/external/wavpack b/external/wavpack index 02efabe7..532b786d 160000 --- a/external/wavpack +++ b/external/wavpack @@ -1 +1 @@ -Subproject commit 02efabe73e1ac743ec35885f2b620cec3e996ca5 +Subproject commit 532b786d9609855509e77c9b992c7bc4e2486be4 From 61ef73ff970696eccfea655cc91dbc339d33559b Mon Sep 17 00:00:00 2001 From: Ozkan Sezer Date: Tue, 8 Apr 2025 18:40:30 +0300 Subject: [PATCH 02/48] CI: linux workflows to run under ubuntu-latest. --- .github/workflows/main.yml | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 7465a37b..51254052 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -19,12 +19,11 @@ jobs: - { name: Windows (mingw32+autotools), os: windows-latest, shell: 'msys2 {0}', msystem: mingw32, msys-env: mingw-w64-i686, shared: 1, static: 1 } - { name: Windows (mingw64+CMake), os: windows-latest, shell: 'msys2 {0}', msystem: mingw64, msys-env: mingw-w64-x86_64, shared: 1, static: 0, cmake: '-DSDL2MIXER_VENDORED=OFF -G "Ninja Multi-Config"' } - - { name: Linux (autotools), os: ubuntu-20.04, shell: sh, shared: 1, static: 1} - - { name: Linux (CMake), os: ubuntu-20.04, shell: sh, cmake: '-DSDL2MIXER_VENDORED=ON -GNinja', shared: 1, static: 0 } - - { name: 'Linux (CMake, static)', os: ubuntu-20.04, shell: sh, cmake: '-DSDL2MIXER_VENDORED=ON -DBUILD_SHARED_LIBS=OFF -GNinja', shared: 0, static: 1 } - - { name: Macos (autotools), os: macos-latest, shell: sh, shared: 1, static: 1 } - - { name: Macos (CMake), os: macos-latest, shell: sh, cmake: '-DSDL2MIXER_VENDORED=ON -GNinja', shared: 1, static: 0 } - + - { name: Linux (autotools), os: ubuntu-latest, shell: sh, shared: 1, static: 1} + - { name: Linux (CMake), os: ubuntu-latest, shell: sh, cmake: '-DSDL2MIXER_VENDORED=ON -GNinja', shared: 1, static: 0 } + - { name: 'Linux (CMake, static)', os: ubuntu-latest, shell: sh, cmake: '-DSDL2MIXER_VENDORED=ON -DBUILD_SHARED_LIBS=OFF -GNinja', shared: 0, static: 1 } + - { name: Macos (autotools), os: macos-latest, shell: sh, shared: 1, static: 1 } + - { name: Macos (CMake), os: macos-latest, shell: sh, cmake: '-DSDL2MIXER_VENDORED=ON -GNinja', shared: 1, static: 0 } steps: - name: Set up MSYS2 From 141b69c06acad0c3378f8c8e5ff7a3997a09ddad Mon Sep 17 00:00:00 2001 From: Anonymous Maarten Date: Tue, 8 Apr 2025 21:26:32 +0200 Subject: [PATCH 03/48] cmake: add current directory to module search path in installed config file --- SDL2_mixerConfig.cmake.in | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/SDL2_mixerConfig.cmake.in b/SDL2_mixerConfig.cmake.in index 74517129..6cd95ba2 100644 --- a/SDL2_mixerConfig.cmake.in +++ b/SDL2_mixerConfig.cmake.in @@ -54,6 +54,8 @@ if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/SDL2_mixer-shared-targets.cmake") endif() if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/SDL2_mixer-static-targets.cmake") + set(_sdl_cmake_module_path "${CMAKE_MODULE_PATH}") + list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}") include(CMakeFindDependencyMacro) include(PkgConfigHelper) @@ -106,6 +108,9 @@ if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/SDL2_mixer-static-targets.cmake") find_dependency(wavpack) endif() + set(CMAKE_MODULE_PATH "${_sdl_cmake_module_path}") + unset(_sdl_cmake_module_path) + if((NOT SDL2MIXER_VENDORED AND SDL2MIXER_MOD_MODPLUG) OR (HAIKU AND SDL2MIXER_MIDI_NATIVE)) include(CheckLanguage) check_language(CXX) From 4ce19d8c32de30063e94679f2f112a359c89799b Mon Sep 17 00:00:00 2001 From: Ozkan Sezer Date: Tue, 15 Apr 2025 23:10:20 +0300 Subject: [PATCH 04/48] playmus, playwave: revise condition for unistd.h include --- playmus.c | 2 +- playwave.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/playmus.c b/playmus.c index cc5dc1a9..78afbba1 100644 --- a/playmus.c +++ b/playmus.c @@ -28,7 +28,7 @@ #include #include -#ifdef unix +#if defined(__unix__) || defined(__APPLE__) #include #endif diff --git a/playwave.c b/playwave.c index 26b7e101..5d13355c 100644 --- a/playwave.c +++ b/playwave.c @@ -25,7 +25,7 @@ #include #include -#ifdef unix +#if defined(__unix__) || defined(__APPLE__) #include #endif From bb1406a062f061a3c9d781a5c14317d38daabe15 Mon Sep 17 00:00:00 2001 From: Ozkan Sezer Date: Tue, 13 May 2025 23:10:10 +0300 Subject: [PATCH 05/48] upgrade vendored libxmp to latest 4.6.3 release --- .gitmodules | 4 ++-- external/libxmp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.gitmodules b/.gitmodules index 146670a9..055e9628 100644 --- a/.gitmodules +++ b/.gitmodules @@ -26,10 +26,10 @@ path = external/mpg123 url = https://github.com/libsdl-org/mpg123.git branch = v1.31.3-SDL -[submodule "libxmp"] +[submodule "external/libxmp"] path = external/libxmp url = https://github.com/libsdl-org/libxmp.git - branch = 4.6.2-SDL + branch = 4.6.3-SDL [submodule "external/wavpack"] path = external/wavpack url = https://github.com/libsdl-org/wavpack.git diff --git a/external/libxmp b/external/libxmp index 9857dcdd..ce107d52 160000 --- a/external/libxmp +++ b/external/libxmp @@ -1 +1 @@ -Subproject commit 9857dcdde27a502913d95957c23f7b4e649f8a8a +Subproject commit ce107d522ee1bd40331b5cba8f81a0aeaf7e1008 From b2c38cd58348782610b064564502d06492a53601 Mon Sep 17 00:00:00 2001 From: Ozkan Sezer Date: Wed, 14 May 2025 21:47:00 +0300 Subject: [PATCH 06/48] MSVC project: rebuilt libxmp dlls from the latest 4.6.3 release. --- VisualC/external/include/xmp.h | 6 +++--- VisualC/external/optional/x64/libxmp.dll | Bin 413696 -> 413696 bytes VisualC/external/optional/x86/libxmp.dll | Bin 401920 -> 403456 bytes 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/VisualC/external/include/xmp.h b/VisualC/external/include/xmp.h index aaeb1649..2c940ef8 100644 --- a/VisualC/external/include/xmp.h +++ b/VisualC/external/include/xmp.h @@ -9,11 +9,11 @@ extern "C" { #endif -#define XMP_VERSION "4.6.2" -#define XMP_VERCODE 0x040602 +#define XMP_VERSION "4.6.3" +#define XMP_VERCODE 0x040603 #define XMP_VER_MAJOR 4 #define XMP_VER_MINOR 6 -#define XMP_VER_RELEASE 2 +#define XMP_VER_RELEASE 3 #if defined(_WIN32) && !defined(__CYGWIN__) # if defined(LIBXMP_STATIC) diff --git a/VisualC/external/optional/x64/libxmp.dll b/VisualC/external/optional/x64/libxmp.dll index 11e9fd32ff83be1ce7ba95a8607c1c11d2ddd2a2..4d12aa5023e306bdf484eb80d71a9b425a7f02f0 100644 GIT binary patch delta 99076 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

  • uM{l9>Gpa(7AoFBQ3lkr{hJ3PR!P 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 D#Nc=j delta 82108 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 From 92e95073024d03a23ea345609054fb6b2dfffbc4 Mon Sep 17 00:00:00 2001 From: Ozkan Sezer Date: Sun, 18 May 2025 14:55:04 +0300 Subject: [PATCH 07/48] Revert 'music_mpg123.c: disable _FILE_OFFSET_BITS suffixes on libmpg123 calls.' --- src/codecs/music_mpg123.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/codecs/music_mpg123.c b/src/codecs/music_mpg123.c index 4457250e..90750aeb 100644 --- a/src/codecs/music_mpg123.c +++ b/src/codecs/music_mpg123.c @@ -30,7 +30,6 @@ #include "mp3utils.h" #include /* For SEEK_SET */ -#define MPG123_NO_LARGENAME /* disable the _FILE_OFFSET_BITS suffixes. */ #ifdef MPG123_HEADER #include MPG123_HEADER #else From 50f885dc3e511a8ccf0ed4e3bdf5da8aee5c81a2 Mon Sep 17 00:00:00 2001 From: Ozkan Sezer Date: Sun, 8 Jun 2025 01:32:40 +0300 Subject: [PATCH 08/48] mpg123: support for MPG123_API_VERSION 49, i.e. mpg123 >= 1.33.0 We now use the 64-bit-only api as of mpg123 >= 1.33.0 which makes us free of sizeof off_t annoyances. It is an xor, i.e. we do not try old api even in dynamic loading case if we're building agaist mpg123 >= 1.33.0, i.e. MPG123_API_VERSION >= 49. Fixes https://github.com/libsdl-org/SDL_mixer/issues/699 Closes https://github.com/libsdl-org/SDL_mixer/pull/698. (cherry picked from commit 05099c5ff7493f80a90b1fd18103697715f412d0) --- src/codecs/music_mpg123.c | 75 ++++++++++++++++++++++++++++++++++----- 1 file changed, 67 insertions(+), 8 deletions(-) diff --git a/src/codecs/music_mpg123.c b/src/codecs/music_mpg123.c index 90750aeb..b6ee2994 100644 --- a/src/codecs/music_mpg123.c +++ b/src/codecs/music_mpg123.c @@ -29,6 +29,10 @@ #include "music_mpg123.h" #include "mp3utils.h" +/* Not defining MPG123_PORTABLE_API here, because mpg123 v1.32.x, + * i.e. MPG123_API_VERSION 48, doesn't have mpg123_open_handle64() + */ +/* #define MPG123_PORTABLE_API */ #include /* For SEEK_SET */ #ifdef MPG123_HEADER #include MPG123_HEADER @@ -54,7 +58,7 @@ typedef struct { int (*mpg123_getformat)( mpg123_handle *mh, long *rate, int *channels, int *encoding ); int (*mpg123_init)(void); mpg123_handle *(*mpg123_new)(const char* decoder, int *error); - int (*mpg123_open_handle)(mpg123_handle *mh, void *iohandle); + const char* (*mpg123_strerror)(mpg123_handle *mh); const char* (*mpg123_plain_strerror)(int errcode); void (*mpg123_rates)(const long **list, size_t *number); #if (MPG123_API_VERSION >= 45) /* api (but not abi) change as of mpg123-1.26.0 */ @@ -62,11 +66,19 @@ typedef struct { #else int (*mpg123_read)(mpg123_handle *mh, unsigned char *outmemory, size_t outmemsize, size_t *done ); #endif +#if (MPG123_API_VERSION >= 49) + int (*mpg123_open_handle64)(mpg123_handle *mh, void *iohandle); + int (*mpg123_reader64)(mpg123_handle *mh, int (*r_read)(void*, void*, size_t, size_t*), int64_t (*r_lseek)(void*, int64_t, int), void (*cleanup)(void*)); + int64_t (*mpg123_seek64)(mpg123_handle *mh, int64_t sampleoff, int whence); + int64_t (*mpg123_tell64)(mpg123_handle *mh); + int64_t (*mpg123_length64)(mpg123_handle *mh); +#else + int (*mpg123_open_handle)(mpg123_handle *mh, void *iohandle); int (*mpg123_replace_reader_handle)( mpg123_handle *mh, MIX_SSIZE_T (*r_read) (void *, void *, size_t), off_t (*r_lseek)(void *, off_t, int), void (*cleanup)(void*) ); off_t (*mpg123_seek)( mpg123_handle *mh, off_t sampleoff, int whence ); off_t (*mpg123_tell)( mpg123_handle *mh); off_t (*mpg123_length)(mpg123_handle *mh); - const char* (*mpg123_strerror)(mpg123_handle *mh); +#endif } mpg123_loader; static mpg123_loader mpg123; @@ -102,7 +114,7 @@ static int MPG123_Load(void) FUNCTION_LOADER(mpg123_getformat, int (*)( mpg123_handle *mh, long *rate, int *channels, int *encoding )) FUNCTION_LOADER(mpg123_init, int (*)(void)) FUNCTION_LOADER(mpg123_new, mpg123_handle *(*)(const char* decoder, int *error)) - FUNCTION_LOADER(mpg123_open_handle, int (*)(mpg123_handle *mh, void *iohandle)) + FUNCTION_LOADER(mpg123_strerror, const char* (*)(mpg123_handle *mh)) FUNCTION_LOADER(mpg123_plain_strerror, const char* (*)(int errcode)) FUNCTION_LOADER(mpg123_rates, void (*)(const long **list, size_t *number)) #if (MPG123_API_VERSION >= 45) /* api (but not abi) change as of mpg123-1.26.0 */ @@ -110,11 +122,19 @@ static int MPG123_Load(void) #else FUNCTION_LOADER(mpg123_read, int (*)(mpg123_handle *mh, unsigned char *outmemory, size_t outmemsize, size_t *done )) #endif +#if (MPG123_API_VERSION >= 49) + FUNCTION_LOADER(mpg123_open_handle64, int (*)(mpg123_handle *mh, void *iohandle)) + FUNCTION_LOADER(mpg123_reader64, int (*)(mpg123_handle *mh, int (*r_read)(void*, void*, size_t, size_t*), int64_t (*r_lseek)(void*, int64_t, int), void (*cleanup)(void*))) + FUNCTION_LOADER(mpg123_seek64, int64_t (*)(mpg123_handle *mh, int64_t sampleoff, int whence)) + FUNCTION_LOADER(mpg123_tell64, int64_t (*)(mpg123_handle *mh)) + FUNCTION_LOADER(mpg123_length64, int64_t (*)(mpg123_handle *mh)) +#else + FUNCTION_LOADER(mpg123_open_handle, int (*)(mpg123_handle *mh, void *iohandle)) FUNCTION_LOADER(mpg123_replace_reader_handle, int (*)( mpg123_handle *mh, MIX_SSIZE_T (*r_read) (void *, void *, size_t), off_t (*r_lseek)(void *, off_t, int), void (*cleanup)(void*) )) FUNCTION_LOADER(mpg123_seek, off_t (*)( mpg123_handle *mh, off_t sampleoff, int whence )) FUNCTION_LOADER(mpg123_tell, off_t (*)( mpg123_handle *mh)) FUNCTION_LOADER(mpg123_length, off_t (*)(mpg123_handle *mh)) - FUNCTION_LOADER(mpg123_strerror, const char* (*)(mpg123_handle *mh)) +#endif } ++mpg123.loaded; @@ -147,7 +167,7 @@ typedef struct unsigned char *buffer; size_t buffer_size; long sample_rate; - off_t total_length; + Sint64 total_length; Mix_MusicMetaTags tags; } MPG123_Music; @@ -200,6 +220,18 @@ static char const* mpg_err(mpg123_handle* mpg, int result) } /* we're gonna override mpg123's I/O with these wrappers for RWops */ +#if (MPG123_API_VERSION >= 49) +static int rwops_read(void* p, void* dst, size_t n, size_t *b) +{ + *b = MP3_RWread((struct mp3file_t *)p, dst, 1, n); + return 0; +} + +static int64_t rwops_seek(void* p, int64_t offset, int whence) +{ + return MP3_RWseek((struct mp3file_t *)p, offset, whence); +} +#else static MIX_SSIZE_T rwops_read(void* p, void* dst, size_t n) { return (MIX_SSIZE_T)MP3_RWread((struct mp3file_t *)p, dst, 1, n); @@ -209,6 +241,7 @@ static off_t rwops_seek(void* p, off_t offset, int whence) { return (off_t)MP3_RWseek((struct mp3file_t *)p, (Sint64)offset, whence); } +#endif static void rwops_cleanup(void* p) { @@ -268,10 +301,17 @@ static void *MPG123_CreateFromRW(SDL_RWops *src, int freesrc) return NULL; } +#if (MPG123_API_VERSION >= 49) + result = mpg123.mpg123_reader64( + music->handle, + rwops_read, rwops_seek, rwops_cleanup + ); +#else result = mpg123.mpg123_replace_reader_handle( music->handle, rwops_read, rwops_seek, rwops_cleanup ); +#endif if (result != MPG123_OK) { Mix_SetError("mpg123_replace_reader_handle: %s", mpg_err(music->handle, result)); MPG123_Delete(music); @@ -298,7 +338,11 @@ static void *MPG123_CreateFromRW(SDL_RWops *src, int freesrc) mpg123.mpg123_format(music->handle, rates[i], channels, formats); } +#if (MPG123_API_VERSION >= 49) + result = mpg123.mpg123_open_handle64(music->handle, &music->mp3file); +#else result = mpg123.mpg123_open_handle(music->handle, &music->mp3file); +#endif if (result != MPG123_OK) { Mix_SetError("mpg123_open_handle: %s", mpg_err(music->handle, result)); MPG123_Delete(music); @@ -327,7 +371,11 @@ static void *MPG123_CreateFromRW(SDL_RWops *src, int freesrc) return NULL; } +#if (MPG123_API_VERSION >= 49) + music->total_length = mpg123.mpg123_length64(music->handle); +#else music->total_length = mpg123.mpg123_length(music->handle); +#endif music->freesrc = freesrc; return music; @@ -447,9 +495,15 @@ static int MPG123_GetAudio(void *context, void *data, int bytes) static int MPG123_Seek(void *context, double secs) { MPG123_Music *music = (MPG123_Music *)context; +#if (MPG123_API_VERSION >= 49) + int64_t offset = (int64_t)(music->sample_rate * secs); + offset = mpg123.mpg123_seek64(music->handle, offset, SEEK_SET); +#else off_t offset = (off_t)(music->sample_rate * secs); + offset = mpg123.mpg123_seek(music->handle, offset, SEEK_SET); +#endif - if ((offset = mpg123.mpg123_seek(music->handle, offset, SEEK_SET)) < 0) { + if (offset < 0) { return Mix_SetError("mpg123_seek: %s", mpg_err(music->handle, (int)-offset)); } return 0; @@ -458,11 +512,16 @@ static int MPG123_Seek(void *context, double secs) static double MPG123_Tell(void *context) { MPG123_Music *music = (MPG123_Music *)context; - off_t offset = 0; + Sint64 offset; if (!music->sample_rate) { return 0.0; } - if ((offset = mpg123.mpg123_tell(music->handle)) < 0) { +#if (MPG123_API_VERSION >= 49) + offset = mpg123.mpg123_tell64(music->handle); +#else + offset = mpg123.mpg123_tell(music->handle); +#endif + if (offset < 0) { return Mix_SetError("mpg123_tell: %s", mpg_err(music->handle, (int)-offset)); } return (double)offset / music->sample_rate; From c1dd49c8981dfec28c3a1a6bd03685f0d826121f Mon Sep 17 00:00:00 2001 From: Ozkan Sezer Date: Tue, 10 Jun 2025 05:10:02 +0300 Subject: [PATCH 09/48] update libmpg123 (for android build support fixes) (cherry picked from commit 30c1301055a35ee87b8679279b6fc88e10d28fa3) --- external/mpg123 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/external/mpg123 b/external/mpg123 index d010f779..e469105b 160000 --- a/external/mpg123 +++ b/external/mpg123 @@ -1 +1 @@ -Subproject commit d010f77941aac74edcd72aa711e2729c8cd9a2c4 +Subproject commit e469105b399e2996a473835e4cf25aea596ee58a From 9f4973f8cf4bbdb018a5a9212d596abd9957919f Mon Sep 17 00:00:00 2001 From: Ozkan Sezer Date: Fri, 11 Jul 2025 00:37:16 +0300 Subject: [PATCH 10/48] Android.mk: disable libgme option by default. (cherry picked from commit c9178dd3b19ce15a56f5275aa5ac7063b7826ec7) --- Android.mk | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Android.mk b/Android.mk index dc0b2954..fb6257d6 100644 --- a/Android.mk +++ b/Android.mk @@ -31,7 +31,7 @@ SUPPORT_WAVPACK ?= true WAVPACK_LIBRARY_PATH := external/wavpack # Enable this if you want to support loading music via libgme -SUPPORT_GME ?= true +SUPPORT_GME ?= false GME_LIBRARY_PATH := external/libgme # Enable this if you want to support loading MOD music via XMP-lite @@ -92,7 +92,6 @@ LOCAL_C_INCLUDES := \ $(LOCAL_PATH)/src/ \ $(LOCAL_PATH)/src/codecs \ - LOCAL_SRC_FILES := \ $(subst $(LOCAL_PATH)/,, \ $(wildcard $(LOCAL_PATH)/src/*.c) \ From fd47f8be12d7d5b12a2b1414a072edf54f146948 Mon Sep 17 00:00:00 2001 From: Anonymous Maarten Date: Sat, 12 Jul 2025 13:46:23 +0200 Subject: [PATCH 11/48] ci: build MSVC release binary on windows-2025 --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 801d0107..c0a6a4cc 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -262,7 +262,7 @@ jobs: msvc: needs: [src] - runs-on: windows-2019 + runs-on: windows-2025 outputs: VC-x86: ${{ steps.releaser.outputs.VC-x86 }} VC-x64: ${{ steps.releaser.outputs.VC-x64 }} From 0e8e5c0e17b14bec6ac6d35b46fa4a71c51b1074 Mon Sep 17 00:00:00 2001 From: Anonymous Maarten Date: Sat, 12 Jul 2025 15:05:53 +0200 Subject: [PATCH 12/48] ci: updates for windows-latest compatibility --- .github/actions/setup-ninja/action.yml | 8 ++-- .github/actions/setup-yasm/action.yml | 60 ++++++++++++++++++++++++++ .github/workflows/main.yml | 14 +++--- 3 files changed, 71 insertions(+), 11 deletions(-) create mode 100644 .github/actions/setup-yasm/action.yml diff --git a/.github/actions/setup-ninja/action.yml b/.github/actions/setup-ninja/action.yml index b9283598..690c248c 100644 --- a/.github/actions/setup-ninja/action.yml +++ b/.github/actions/setup-ninja/action.yml @@ -3,7 +3,7 @@ description: 'Download ninja and add it to the PATH environment variable' inputs: version: description: 'Ninja version' - default: '1.12.1' + default: '1.13.1' runs: using: 'composite' steps: @@ -41,17 +41,17 @@ runs: path: '${{ runner.temp }}/${{ steps.calc.outputs.archive }}' key: ${{ steps.calc.outputs.cache-key }} - name: 'Download ninja ${{ inputs.version }} for ${{ runner.os }} (${{ runner.arch }})' - if: ${{ !steps.cache-restore.outputs.cache-hit }} + if: ${{ (!steps.cache-restore.outputs.cache-hit || steps.cache-restore.outputs.cache-hit == 'false') }} shell: pwsh run: | Invoke-WebRequest "https://github.com/ninja-build/ninja/releases/download/v${{ inputs.version }}/${{ steps.calc.outputs.archive }}" -OutFile "${{ runner.temp }}/${{ steps.calc.outputs.archive }}" - name: 'Cache ${{ steps.calc.outputs.archive }}' - if: ${{ !steps.cache-restore.outputs.cache-hit }} + if: ${{ (!steps.cache-restore.outputs.cache-hit || steps.cache-restore.outputs.cache-hit == 'false') }} uses: actions/cache/save@v4 with: path: '${{ runner.temp }}/${{ steps.calc.outputs.archive }}' key: ${{ steps.calc.outputs.cache-key }} - - name: 'Extract libusb' + - name: 'Extract ninja' shell: pwsh run: | 7z "-o${{ runner.temp }}/ninja-${{ inputs.version }}-${{ runner.arch }}" x "${{ runner.temp }}/${{ steps.calc.outputs.archive }}" diff --git a/.github/actions/setup-yasm/action.yml b/.github/actions/setup-yasm/action.yml new file mode 100644 index 00000000..a962d3c0 --- /dev/null +++ b/.github/actions/setup-yasm/action.yml @@ -0,0 +1,60 @@ +# The pre-built yasm binaries are built with an older MSVCRT, +# which is no longer installed on current Windows images. + +name: 'Setup yasm' +description: 'Build yasm and add it to the PATH environment variable' +runs: + using: 'composite' + steps: + - name: 'Calculate variables' + id: calc + shell: sh + run: | + echo "cache-key=yasm-${{ runner.os }}-${{ runner.arch }}" >> ${GITHUB_OUTPUT} + - name: 'Restore yasm' + id: restore-yasm + uses: actions/cache/restore@v4 + with: + path: | + ${{ github.workspace }}/yasm + key: ${{ steps.calc.outputs.cache-key }} + - name: 'Verify cached yasm' + if: ${{ steps.restore-yasm.outputs.cache-hit }} + shell: pwsh + run: | + ${{ github.workspace }}\yasm\bin\yasm --help + - name: 'Download yasm sources' + if: ${{ !steps.restore-yasm.outputs.cache-hit }} + uses: actions/checkout@v4 + with: + repository: yasm/yasm + path: yasm-src + - name: 'Configure, build and install yasm' + if: ${{ !steps.restore-yasm.outputs.cache-hit }} + shell: pwsh + run: | + cmake -S yasm-src -B yasm-build -GNinja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=${{ github.workspace }}/yasm -DCMAKE_INSTALL_LIBDIR=bin -DCMAKE_INSTALL_BINDIR=bin -DCMAKE_WINDOWS_EXPORT_ALL_SYMBOLS=ON -DCMAKE_POLICY_DEFAULT_CMP0091=NEW -DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreaded + cmake --build yasm-build --parallel + cmake --install yasm-build + - name: 'Verify built yasm' + if: ${{ !steps.restore-yasm.outputs.cache-hit }} + shell: sh + run: | + set -e + if [ ! -f "yasm/bin/yasm.exe" -a -f "yasm/bin/vsyasm.exe" ]; then + cp "yasm/bin/vsyasm.exe" "yasm/bin/yasm.exe" + fi + yasm/bin/yasm --help + - name: 'Cache yasm' + if: ${{ !steps.restore-yasm.outputs.cache-hit }} + uses: actions/cache/save@v4 + with: + path: | + ${{ github.workspace }}/yasm + key: ${{ steps.calc.outputs.cache-key }} + enableCrossOsArchive: true + - name: 'Set output variables' + id: final + shell: pwsh + run: | + echo "${{ github.workspace }}/yasm/bin" >> $env:GITHUB_PATH diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 51254052..79765dd1 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -15,7 +15,7 @@ jobs: fail-fast: false matrix: platform: - - { name: Windows (MSVC+CMake), os: windows-2019, shell: sh, cmake: '-DSDL2MIXER_VENDORED=ON -GNinja', msvc: 1, shared: 1, static: 0 } + - { name: Windows (MSVC+CMake), os: windows-latest, shell: sh, cmake: '-DSDL2MIXER_VENDORED=ON -GNinja', msvc: 1, shared: 1, static: 0 } - { name: Windows (mingw32+autotools), os: windows-latest, shell: 'msys2 {0}', msystem: mingw32, msys-env: mingw-w64-i686, shared: 1, static: 1 } - { name: Windows (mingw64+CMake), os: windows-latest, shell: 'msys2 {0}', msystem: mingw64, msys-env: mingw-w64-x86_64, shared: 1, static: 0, cmake: '-DSDL2MIXER_VENDORED=OFF -G "Ninja Multi-Config"' } @@ -94,13 +94,9 @@ jobs: .github/fetch_sdl_vc.ps1 echo "SDL2_DIR=$Env:GITHUB_WORKSPACE/SDL2-devel-VC" >> $Env:GITHUB_ENV echo "::endgroup::" - echo "::group::Downloading yasm" - .github/fetch_yasm.ps1 - echo "${{ github.workspace }}" >> $Env:GITHUB_PATH - echo "::endgroup::" - - name: Setup Ninja for MSVC + - name: Set up ninja + uses: ./.github/actions/setup-ninja if: ${{ !contains(matrix.platform.shell, 'msys2') }} - uses: aseprite/get-ninja@main - uses: ilammy/msvc-dev-cmd@v1 if: "matrix.platform.msvc" with: @@ -111,6 +107,10 @@ jobs: if: "runner.os == 'Linux' && matrix.platform.cmake" run: ./build-scripts/test-versioning.sh + - name: Set up yasm for mpg123 (MSVC only) + uses: ./.github/actions/setup-yasm + if: ${{ matrix.platform.msvc }} + - name: Configure (CMake) if: "matrix.platform.cmake" run: | From 1ae3f41ce723e24b7f346c0d4239c563035f206c Mon Sep 17 00:00:00 2001 From: Ozkan Sezer Date: Wed, 23 Jul 2025 11:51:20 +0300 Subject: [PATCH 13/48] update to latest dr_flac.h from mainstream. --- src/codecs/dr_libs/dr_flac.h | 430 +++++++++++++++++------------------ src/codecs/music_drflac.c | 24 +- 2 files changed, 236 insertions(+), 218 deletions(-) diff --git a/src/codecs/dr_libs/dr_flac.h b/src/codecs/dr_libs/dr_flac.h index 3a47251f..d87a0d67 100644 --- a/src/codecs/dr_libs/dr_flac.h +++ b/src/codecs/dr_libs/dr_flac.h @@ -1,121 +1,12 @@ /* FLAC audio decoder. Choice of public domain or MIT-0. See license statements at the end of this file. -dr_flac - v0.12.43 - 2024-12-17 +dr_flac - v0.13.0 - 2025-07-23 David Reid - mackron@gmail.com GitHub: https://github.com/mackron/dr_libs */ -/* -RELEASE NOTES - v0.12.0 -======================= -Version 0.12.0 has breaking API changes including changes to the existing API and the removal of deprecated APIs. - - -Improved Client-Defined Memory Allocation ------------------------------------------ -The main change with this release is the addition of a more flexible way of implementing custom memory allocation routines. The -existing system of DRFLAC_MALLOC, DRFLAC_REALLOC and DRFLAC_FREE are still in place and will be used by default when no custom -allocation callbacks are specified. - -To use the new system, you pass in a pointer to a drflac_allocation_callbacks object to drflac_open() and family, like this: - - void* my_malloc(size_t sz, void* pUserData) - { - return malloc(sz); - } - void* my_realloc(void* p, size_t sz, void* pUserData) - { - return realloc(p, sz); - } - void my_free(void* p, void* pUserData) - { - free(p); - } - - ... - - drflac_allocation_callbacks allocationCallbacks; - allocationCallbacks.pUserData = &myData; - allocationCallbacks.onMalloc = my_malloc; - allocationCallbacks.onRealloc = my_realloc; - allocationCallbacks.onFree = my_free; - drflac* pFlac = drflac_open_file("my_file.flac", &allocationCallbacks); - -The advantage of this new system is that it allows you to specify user data which will be passed in to the allocation routines. - -Passing in null for the allocation callbacks object will cause dr_flac to use defaults which is the same as DRFLAC_MALLOC, -DRFLAC_REALLOC and DRFLAC_FREE and the equivalent of how it worked in previous versions. - -Every API that opens a drflac object now takes this extra parameter. These include the following: - - drflac_open() - drflac_open_relaxed() - drflac_open_with_metadata() - drflac_open_with_metadata_relaxed() - drflac_open_file() - drflac_open_file_with_metadata() - drflac_open_memory() - drflac_open_memory_with_metadata() - drflac_open_and_read_pcm_frames_s32() - drflac_open_and_read_pcm_frames_s16() - drflac_open_and_read_pcm_frames_f32() - drflac_open_file_and_read_pcm_frames_s32() - drflac_open_file_and_read_pcm_frames_s16() - drflac_open_file_and_read_pcm_frames_f32() - drflac_open_memory_and_read_pcm_frames_s32() - drflac_open_memory_and_read_pcm_frames_s16() - drflac_open_memory_and_read_pcm_frames_f32() - - - -Optimizations -------------- -Seeking performance has been greatly improved. A new binary search based seeking algorithm has been introduced which significantly -improves performance over the brute force method which was used when no seek table was present. Seek table based seeking also takes -advantage of the new binary search seeking system to further improve performance there as well. Note that this depends on CRC which -means it will be disabled when DR_FLAC_NO_CRC is used. - -The SSE4.1 pipeline has been cleaned up and optimized. You should see some improvements with decoding speed of 24-bit files in -particular. 16-bit streams should also see some improvement. - -drflac_read_pcm_frames_s16() has been optimized. Previously this sat on top of drflac_read_pcm_frames_s32() and performed it's s32 -to s16 conversion in a second pass. This is now all done in a single pass. This includes SSE2 and ARM NEON optimized paths. - -A minor optimization has been implemented for drflac_read_pcm_frames_s32(). This will now use an SSE2 optimized pipeline for stereo -channel reconstruction which is the last part of the decoding process. - -The ARM build has seen a few improvements. The CLZ (count leading zeroes) and REV (byte swap) instructions are now used when -compiling with GCC and Clang which is achieved using inline assembly. The CLZ instruction requires ARM architecture version 5 at -compile time and the REV instruction requires ARM architecture version 6. - -An ARM NEON optimized pipeline has been implemented. To enable this you'll need to add -mfpu=neon to the command line when compiling. - - -Removed APIs ------------- -The following APIs were deprecated in version 0.11.0 and have been completely removed in version 0.12.0: - - drflac_read_s32() -> drflac_read_pcm_frames_s32() - drflac_read_s16() -> drflac_read_pcm_frames_s16() - drflac_read_f32() -> drflac_read_pcm_frames_f32() - drflac_seek_to_sample() -> drflac_seek_to_pcm_frame() - drflac_open_and_decode_s32() -> drflac_open_and_read_pcm_frames_s32() - drflac_open_and_decode_s16() -> drflac_open_and_read_pcm_frames_s16() - drflac_open_and_decode_f32() -> drflac_open_and_read_pcm_frames_f32() - drflac_open_and_decode_file_s32() -> drflac_open_file_and_read_pcm_frames_s32() - drflac_open_and_decode_file_s16() -> drflac_open_file_and_read_pcm_frames_s16() - drflac_open_and_decode_file_f32() -> drflac_open_file_and_read_pcm_frames_f32() - drflac_open_and_decode_memory_s32() -> drflac_open_memory_and_read_pcm_frames_s32() - drflac_open_and_decode_memory_s16() -> drflac_open_memory_and_read_pcm_frames_s16() - drflac_open_and_decode_memory_f32() -> drflac_open_memroy_and_read_pcm_frames_f32() - -Prior versions of dr_flac operated on a per-sample basis whereas now it operates on PCM frames. The removed APIs all relate -to the old per-sample APIs. You now need to use the "pcm_frame" versions. -*/ - - /* Introduction ============ @@ -234,8 +125,8 @@ extern "C" { #define DRFLAC_XSTRINGIFY(x) DRFLAC_STRINGIFY(x) #define DRFLAC_VERSION_MAJOR 0 -#define DRFLAC_VERSION_MINOR 12 -#define DRFLAC_VERSION_REVISION 43 +#define DRFLAC_VERSION_MINOR 13 +#define DRFLAC_VERSION_REVISION 0 #define DRFLAC_VERSION_STRING DRFLAC_XSTRINGIFY(DRFLAC_VERSION_MAJOR) "." DRFLAC_XSTRINGIFY(DRFLAC_VERSION_MINOR) "." DRFLAC_XSTRINGIFY(DRFLAC_VERSION_REVISION) #include /* For size_t. */ @@ -406,8 +297,9 @@ typedef enum typedef enum { - drflac_seek_origin_start, - drflac_seek_origin_current + DRFLAC_SEEK_SET, + DRFLAC_SEEK_CUR, + DRFLAC_SEEK_END } drflac_seek_origin; /* The order of members in this structure is important because we map this directly to the raw data within the SEEKTABLE metadata block. */ @@ -547,7 +439,7 @@ offset (in) The number of bytes to move, relative to the origin. Will never be negative. origin (in) - The origin of the seek - the current position or the start of the stream. + The origin of the seek - the current position, the start of the stream, or the end of the stream. Return Value @@ -557,14 +449,32 @@ Whether or not the seek was successful. Remarks ------- -The offset will never be negative. Whether or not it is relative to the beginning or current position is determined by the "origin" parameter which will be -either drflac_seek_origin_start or drflac_seek_origin_current. +Seeking relative to the start and the current position must always be supported. If seeking from the end of the stream is not supported, return DRFLAC_FALSE. When seeking to a PCM frame using drflac_seek_to_pcm_frame(), dr_flac may call this with an offset beyond the end of the FLAC stream. This needs to be detected and handled by returning DRFLAC_FALSE. */ typedef drflac_bool32 (* drflac_seek_proc)(void* pUserData, int offset, drflac_seek_origin origin); +/* +Callback for when the current position in the stream needs to be retrieved. + + +Parameters +---------- +pUserData (in) + The user data that was passed to drflac_open() and family. + +pCursor (out) + A pointer to a variable to receive the current position in the stream. + + +Return Value +------------ +Whether or not the operation was successful. +*/ +typedef drflac_bool32 (* drflac_tell_proc)(void* pUserData, drflac_int64* pCursor); + /* Callback for when a metadata block is read. @@ -603,6 +513,9 @@ typedef struct /* The function to call when the current read position needs to be moved. */ drflac_seek_proc onSeek; + /* The function to call when the current read position needs to be retrieved. */ + drflac_tell_proc onTell; + /* The user data to pass around to onRead and onSeek. */ void* pUserData; @@ -828,7 +741,7 @@ drflac_open_memory() drflac_open_with_metadata() drflac_close() */ -DRFLAC_API drflac* drflac_open(drflac_read_proc onRead, drflac_seek_proc onSeek, void* pUserData, const drflac_allocation_callbacks* pAllocationCallbacks); +DRFLAC_API drflac* drflac_open(drflac_read_proc onRead, drflac_seek_proc onSeek, drflac_tell_proc onTell, void* pUserData, const drflac_allocation_callbacks* pAllocationCallbacks); /* Opens a FLAC stream with relaxed validation of the header block. @@ -869,7 +782,7 @@ force your `onRead` callback to return 0, which dr_flac will use as an indicator Use `drflac_open_with_metadata_relaxed()` if you need access to metadata. */ -DRFLAC_API drflac* drflac_open_relaxed(drflac_read_proc onRead, drflac_seek_proc onSeek, drflac_container container, void* pUserData, const drflac_allocation_callbacks* pAllocationCallbacks); +DRFLAC_API drflac* drflac_open_relaxed(drflac_read_proc onRead, drflac_seek_proc onSeek, drflac_tell_proc onTell, drflac_container container, void* pUserData, const drflac_allocation_callbacks* pAllocationCallbacks); /* Opens a FLAC decoder and notifies the caller of the metadata chunks (album art, etc.). @@ -926,7 +839,7 @@ drflac_open_memory_with_metadata() drflac_open() drflac_close() */ -DRFLAC_API drflac* drflac_open_with_metadata(drflac_read_proc onRead, drflac_seek_proc onSeek, drflac_meta_proc onMeta, void* pUserData, const drflac_allocation_callbacks* pAllocationCallbacks); +DRFLAC_API drflac* drflac_open_with_metadata(drflac_read_proc onRead, drflac_seek_proc onSeek, drflac_tell_proc onTell, drflac_meta_proc onMeta, void* pUserData, const drflac_allocation_callbacks* pAllocationCallbacks); /* The same as drflac_open_with_metadata(), except attempts to open the stream even when a header block is not present. @@ -936,7 +849,7 @@ See Also drflac_open_with_metadata() drflac_open_relaxed() */ -DRFLAC_API drflac* drflac_open_with_metadata_relaxed(drflac_read_proc onRead, drflac_seek_proc onSeek, drflac_meta_proc onMeta, drflac_container container, void* pUserData, const drflac_allocation_callbacks* pAllocationCallbacks); +DRFLAC_API drflac* drflac_open_with_metadata_relaxed(drflac_read_proc onRead, drflac_seek_proc onSeek, drflac_tell_proc onTell, drflac_meta_proc onMeta, drflac_container container, void* pUserData, const drflac_allocation_callbacks* pAllocationCallbacks); /* Closes the given FLAC decoder. @@ -1234,13 +1147,13 @@ read samples into a dynamically sized buffer on the heap until no samples are le Do not call this function on a broadcast type of stream (like internet radio streams and whatnot). */ -DRFLAC_API drflac_int32* drflac_open_and_read_pcm_frames_s32(drflac_read_proc onRead, drflac_seek_proc onSeek, void* pUserData, unsigned int* channels, unsigned int* sampleRate, drflac_uint64* totalPCMFrameCount, const drflac_allocation_callbacks* pAllocationCallbacks); +DRFLAC_API drflac_int32* drflac_open_and_read_pcm_frames_s32(drflac_read_proc onRead, drflac_seek_proc onSeek, drflac_tell_proc onTell, void* pUserData, unsigned int* channels, unsigned int* sampleRate, drflac_uint64* totalPCMFrameCount, const drflac_allocation_callbacks* pAllocationCallbacks); /* Same as drflac_open_and_read_pcm_frames_s32(), except returns signed 16-bit integer samples. */ -DRFLAC_API drflac_int16* drflac_open_and_read_pcm_frames_s16(drflac_read_proc onRead, drflac_seek_proc onSeek, void* pUserData, unsigned int* channels, unsigned int* sampleRate, drflac_uint64* totalPCMFrameCount, const drflac_allocation_callbacks* pAllocationCallbacks); +DRFLAC_API drflac_int16* drflac_open_and_read_pcm_frames_s16(drflac_read_proc onRead, drflac_seek_proc onSeek, drflac_tell_proc onTell, void* pUserData, unsigned int* channels, unsigned int* sampleRate, drflac_uint64* totalPCMFrameCount, const drflac_allocation_callbacks* pAllocationCallbacks); /* Same as drflac_open_and_read_pcm_frames_s32(), except returns 32-bit floating-point samples. */ -DRFLAC_API float* drflac_open_and_read_pcm_frames_f32(drflac_read_proc onRead, drflac_seek_proc onSeek, void* pUserData, unsigned int* channels, unsigned int* sampleRate, drflac_uint64* totalPCMFrameCount, const drflac_allocation_callbacks* pAllocationCallbacks); +DRFLAC_API float* drflac_open_and_read_pcm_frames_f32(drflac_read_proc onRead, drflac_seek_proc onSeek, drflac_tell_proc onTell, void* pUserData, unsigned int* channels, unsigned int* sampleRate, drflac_uint64* totalPCMFrameCount, const drflac_allocation_callbacks* pAllocationCallbacks); #ifndef DR_FLAC_NO_STDIO /* Same as drflac_open_and_read_pcm_frames_s32() except opens the decoder from a file. */ @@ -2960,25 +2873,25 @@ static drflac_bool32 drflac__seek_to_byte(drflac_bs* bs, drflac_uint64 offsetFro */ if (offsetFromStart > 0x7FFFFFFF) { drflac_uint64 bytesRemaining = offsetFromStart; - if (!bs->onSeek(bs->pUserData, 0x7FFFFFFF, drflac_seek_origin_start)) { + if (!bs->onSeek(bs->pUserData, 0x7FFFFFFF, DRFLAC_SEEK_SET)) { return DRFLAC_FALSE; } bytesRemaining -= 0x7FFFFFFF; while (bytesRemaining > 0x7FFFFFFF) { - if (!bs->onSeek(bs->pUserData, 0x7FFFFFFF, drflac_seek_origin_current)) { + if (!bs->onSeek(bs->pUserData, 0x7FFFFFFF, DRFLAC_SEEK_CUR)) { return DRFLAC_FALSE; } bytesRemaining -= 0x7FFFFFFF; } if (bytesRemaining > 0) { - if (!bs->onSeek(bs->pUserData, (int)bytesRemaining, drflac_seek_origin_current)) { + if (!bs->onSeek(bs->pUserData, (int)bytesRemaining, DRFLAC_SEEK_CUR)) { return DRFLAC_FALSE; } } } else { - if (!bs->onSeek(bs->pUserData, (int)offsetFromStart, drflac_seek_origin_start)) { + if (!bs->onSeek(bs->pUserData, (int)offsetFromStart, DRFLAC_SEEK_SET)) { return DRFLAC_FALSE; } } @@ -6330,6 +6243,7 @@ typedef struct { drflac_read_proc onRead; drflac_seek_proc onSeek; + drflac_tell_proc onTell; drflac_meta_proc onMeta; drflac_container container; void* pUserData; @@ -6497,7 +6411,7 @@ static void drflac__free_from_callbacks(void* p, const drflac_allocation_callbac } -static drflac_bool32 drflac__read_and_decode_metadata(drflac_read_proc onRead, drflac_seek_proc onSeek, drflac_meta_proc onMeta, void* pUserData, void* pUserDataMD, drflac_uint64* pFirstFramePos, drflac_uint64* pSeektablePos, drflac_uint32* pSeekpointCount, drflac_allocation_callbacks* pAllocationCallbacks) +static drflac_bool32 drflac__read_and_decode_metadata(drflac_read_proc onRead, drflac_seek_proc onSeek, drflac_tell_proc onTell, drflac_meta_proc onMeta, void* pUserData, void* pUserDataMD, drflac_uint64* pFirstFramePos, drflac_uint64* pSeektablePos, drflac_uint32* pSeekpointCount, drflac_allocation_callbacks* pAllocationCallbacks) { /* We want to keep track of the byte position in the stream of the seektable. At the time of calling this function we know that @@ -6507,6 +6421,8 @@ static drflac_bool32 drflac__read_and_decode_metadata(drflac_read_proc onRead, d drflac_uint64 seektablePos = 0; drflac_uint32 seektableSize = 0; + (void)onTell; + for (;;) { drflac_metadata metadata; drflac_uint8 isLastBlock = 0; @@ -6858,7 +6774,7 @@ static drflac_bool32 drflac__read_and_decode_metadata(drflac_read_proc onRead, d metadata.data.padding.unused = 0; /* Padding doesn't have anything meaningful in it, so just skip over it, but make sure the caller is aware of it by firing the callback. */ - if (!onSeek(pUserData, blockSize, drflac_seek_origin_current)) { + if (!onSeek(pUserData, blockSize, DRFLAC_SEEK_CUR)) { isLastBlock = DRFLAC_TRUE; /* An error occurred while seeking. Attempt to recover by treating this as the last block which will in turn terminate the loop. */ } else { onMeta(pUserDataMD, &metadata); @@ -6870,7 +6786,7 @@ static drflac_bool32 drflac__read_and_decode_metadata(drflac_read_proc onRead, d { /* Invalid chunk. Just skip over this one. */ if (onMeta) { - if (!onSeek(pUserData, blockSize, drflac_seek_origin_current)) { + if (!onSeek(pUserData, blockSize, DRFLAC_SEEK_CUR)) { isLastBlock = DRFLAC_TRUE; /* An error occurred while seeking. Attempt to recover by treating this as the last block which will in turn terminate the loop. */ } } @@ -6904,7 +6820,7 @@ static drflac_bool32 drflac__read_and_decode_metadata(drflac_read_proc onRead, d /* If we're not handling metadata, just skip over the block. If we are, it will have been handled earlier in the switch statement above. */ if (onMeta == NULL && blockSize > 0) { - if (!onSeek(pUserData, blockSize, drflac_seek_origin_current)) { + if (!onSeek(pUserData, blockSize, DRFLAC_SEEK_CUR)) { isLastBlock = DRFLAC_TRUE; } } @@ -7238,6 +7154,7 @@ typedef struct { drflac_read_proc onRead; /* The original onRead callback from drflac_open() and family. */ drflac_seek_proc onSeek; /* The original onSeek callback from drflac_open() and family. */ + drflac_tell_proc onTell; /* The original onTell callback from drflac_open() and family. */ void* pUserData; /* The user data passed on onRead and onSeek. This is the user data that was passed on drflac_open() and family. */ drflac_uint64 currentBytePos; /* The position of the byte we are sitting on in the physical byte stream. Used for efficient seeking. */ drflac_uint64 firstBytePos; /* The position of the first byte in the physical bitstream. Points to the start of the "OggS" identifier of the FLAC bos page. */ @@ -7259,32 +7176,32 @@ static size_t drflac_oggbs__read_physical(drflac_oggbs* oggbs, void* bufferOut, static drflac_bool32 drflac_oggbs__seek_physical(drflac_oggbs* oggbs, drflac_uint64 offset, drflac_seek_origin origin) { - if (origin == drflac_seek_origin_start) { + if (origin == DRFLAC_SEEK_SET) { if (offset <= 0x7FFFFFFF) { - if (!oggbs->onSeek(oggbs->pUserData, (int)offset, drflac_seek_origin_start)) { + if (!oggbs->onSeek(oggbs->pUserData, (int)offset, DRFLAC_SEEK_SET)) { return DRFLAC_FALSE; } oggbs->currentBytePos = offset; return DRFLAC_TRUE; } else { - if (!oggbs->onSeek(oggbs->pUserData, 0x7FFFFFFF, drflac_seek_origin_start)) { + if (!oggbs->onSeek(oggbs->pUserData, 0x7FFFFFFF, DRFLAC_SEEK_SET)) { return DRFLAC_FALSE; } oggbs->currentBytePos = offset; - return drflac_oggbs__seek_physical(oggbs, offset - 0x7FFFFFFF, drflac_seek_origin_current); + return drflac_oggbs__seek_physical(oggbs, offset - 0x7FFFFFFF, DRFLAC_SEEK_CUR); } } else { while (offset > 0x7FFFFFFF) { - if (!oggbs->onSeek(oggbs->pUserData, 0x7FFFFFFF, drflac_seek_origin_current)) { + if (!oggbs->onSeek(oggbs->pUserData, 0x7FFFFFFF, DRFLAC_SEEK_CUR)) { return DRFLAC_FALSE; } oggbs->currentBytePos += 0x7FFFFFFF; offset -= 0x7FFFFFFF; } - if (!oggbs->onSeek(oggbs->pUserData, (int)offset, drflac_seek_origin_current)) { /* <-- Safe cast thanks to the loop above. */ + if (!oggbs->onSeek(oggbs->pUserData, (int)offset, DRFLAC_SEEK_CUR)) { /* <-- Safe cast thanks to the loop above. */ return DRFLAC_FALSE; } oggbs->currentBytePos += offset; @@ -7316,7 +7233,7 @@ static drflac_bool32 drflac_oggbs__goto_next_page(drflac_oggbs* oggbs, drflac_og if (header.serialNumber != oggbs->serialNumber) { /* It's not a FLAC page. Skip it. */ - if (pageBodySize > 0 && !drflac_oggbs__seek_physical(oggbs, pageBodySize, drflac_seek_origin_current)) { + if (pageBodySize > 0 && !drflac_oggbs__seek_physical(oggbs, pageBodySize, DRFLAC_SEEK_CUR)) { return DRFLAC_FALSE; } continue; @@ -7402,7 +7319,7 @@ static drflac_bool32 drflac_oggbs__seek_to_next_packet(drflac_oggbs* oggbs) At this point we will have found either the packet or the end of the page. If were at the end of the page we'll want to load the next page and keep searching for the end of the packet. */ - drflac_oggbs__seek_physical(oggbs, bytesToEndOfPacketOrPage, drflac_seek_origin_current); + drflac_oggbs__seek_physical(oggbs, bytesToEndOfPacketOrPage, DRFLAC_SEEK_CUR); oggbs->bytesRemainingInPage -= bytesToEndOfPacketOrPage; if (atEndOfPage) { @@ -7480,8 +7397,8 @@ static drflac_bool32 drflac__on_seek_ogg(void* pUserData, int offset, drflac_see DRFLAC_ASSERT(offset >= 0); /* <-- Never seek backwards. */ /* Seeking is always forward which makes things a lot simpler. */ - if (origin == drflac_seek_origin_start) { - if (!drflac_oggbs__seek_physical(oggbs, (int)oggbs->firstBytePos, drflac_seek_origin_start)) { + if (origin == DRFLAC_SEEK_SET) { + if (!drflac_oggbs__seek_physical(oggbs, (int)oggbs->firstBytePos, DRFLAC_SEEK_SET)) { return DRFLAC_FALSE; } @@ -7489,38 +7406,50 @@ static drflac_bool32 drflac__on_seek_ogg(void* pUserData, int offset, drflac_see return DRFLAC_FALSE; } - return drflac__on_seek_ogg(pUserData, offset, drflac_seek_origin_current); - } - - DRFLAC_ASSERT(origin == drflac_seek_origin_current); - - while (bytesSeeked < offset) { - int bytesRemainingToSeek = offset - bytesSeeked; - DRFLAC_ASSERT(bytesRemainingToSeek >= 0); + return drflac__on_seek_ogg(pUserData, offset, DRFLAC_SEEK_CUR); + } else if (origin == DRFLAC_SEEK_CUR) { + while (bytesSeeked < offset) { + int bytesRemainingToSeek = offset - bytesSeeked; + DRFLAC_ASSERT(bytesRemainingToSeek >= 0); - if (oggbs->bytesRemainingInPage >= (size_t)bytesRemainingToSeek) { - bytesSeeked += bytesRemainingToSeek; - (void)bytesSeeked; /* <-- Silence a dead store warning emitted by Clang Static Analyzer. */ - oggbs->bytesRemainingInPage -= bytesRemainingToSeek; - break; - } + if (oggbs->bytesRemainingInPage >= (size_t)bytesRemainingToSeek) { + bytesSeeked += bytesRemainingToSeek; + (void)bytesSeeked; /* <-- Silence a dead store warning emitted by Clang Static Analyzer. */ + oggbs->bytesRemainingInPage -= bytesRemainingToSeek; + break; + } - /* If we get here it means some of the requested data is contained in the next pages. */ - if (oggbs->bytesRemainingInPage > 0) { - bytesSeeked += (int)oggbs->bytesRemainingInPage; - oggbs->bytesRemainingInPage = 0; - } + /* If we get here it means some of the requested data is contained in the next pages. */ + if (oggbs->bytesRemainingInPage > 0) { + bytesSeeked += (int)oggbs->bytesRemainingInPage; + oggbs->bytesRemainingInPage = 0; + } - DRFLAC_ASSERT(bytesRemainingToSeek > 0); - if (!drflac_oggbs__goto_next_page(oggbs, drflac_ogg_fail_on_crc_mismatch)) { - /* Failed to go to the next page. We either hit the end of the stream or had a CRC mismatch. */ - return DRFLAC_FALSE; + DRFLAC_ASSERT(bytesRemainingToSeek > 0); + if (!drflac_oggbs__goto_next_page(oggbs, drflac_ogg_fail_on_crc_mismatch)) { + /* Failed to go to the next page. We either hit the end of the stream or had a CRC mismatch. */ + return DRFLAC_FALSE; + } } + } else if (origin == DRFLAC_SEEK_END) { + /* Seeking to the end is not supported. */ + return DRFLAC_FALSE; } return DRFLAC_TRUE; } +static drflac_bool32 drflac__on_tell_ogg(void* pUserData, drflac_int64* pCursor) +{ + /* + Not implemented for Ogg containers because we don't currently track the byte position of the logical bitstream. To support this, we'll need + to track the position in drflac__on_read_ogg and drflac__on_seek_ogg. + */ + (void)pUserData; + (void)pCursor; + return DRFLAC_FALSE; +} + static drflac_bool32 drflac_ogg__seek_to_pcm_frame(drflac* pFlac, drflac_uint64 pcmFrameIndex) { @@ -7543,7 +7472,7 @@ static drflac_bool32 drflac_ogg__seek_to_pcm_frame(drflac* pFlac, drflac_uint64 runningGranulePosition = 0; for (;;) { if (!drflac_oggbs__goto_next_page(oggbs, drflac_ogg_recover_on_crc_mismatch)) { - drflac_oggbs__seek_physical(oggbs, originalBytePos, drflac_seek_origin_start); + drflac_oggbs__seek_physical(oggbs, originalBytePos, DRFLAC_SEEK_SET); return DRFLAC_FALSE; /* Never did find that sample... */ } @@ -7577,7 +7506,7 @@ static drflac_bool32 drflac_ogg__seek_to_pcm_frame(drflac* pFlac, drflac_uint64 a new frame. This property means that after we've seeked to the page we can immediately start looping over frames until we find the one containing the target sample. */ - if (!drflac_oggbs__seek_physical(oggbs, runningFrameBytePos, drflac_seek_origin_start)) { + if (!drflac_oggbs__seek_physical(oggbs, runningFrameBytePos, DRFLAC_SEEK_SET)) { return DRFLAC_FALSE; } if (!drflac_oggbs__goto_next_page(oggbs, drflac_ogg_recover_on_crc_mismatch)) { @@ -7744,7 +7673,7 @@ static drflac_bool32 drflac__init_private__ogg(drflac_init_info* pInit, drflac_r The next 2 bytes are the non-audio packets, not including this one. We don't care about this because we're going to be handling it in a generic way based on the serial number and packet types. */ - if (!onSeek(pUserData, 2, drflac_seek_origin_current)) { + if (!onSeek(pUserData, 2, DRFLAC_SEEK_CUR)) { return DRFLAC_FALSE; } @@ -7801,18 +7730,18 @@ static drflac_bool32 drflac__init_private__ogg(drflac_init_info* pInit, drflac_r } } else { /* Not a FLAC header. Skip it. */ - if (!onSeek(pUserData, bytesRemainingInPage, drflac_seek_origin_current)) { + if (!onSeek(pUserData, bytesRemainingInPage, DRFLAC_SEEK_CUR)) { return DRFLAC_FALSE; } } } else { /* Not a FLAC header. Seek past the entire page and move on to the next. */ - if (!onSeek(pUserData, bytesRemainingInPage, drflac_seek_origin_current)) { + if (!onSeek(pUserData, bytesRemainingInPage, DRFLAC_SEEK_CUR)) { return DRFLAC_FALSE; } } } else { - if (!onSeek(pUserData, pageBodySize, drflac_seek_origin_current)) { + if (!onSeek(pUserData, pageBodySize, DRFLAC_SEEK_CUR)) { return DRFLAC_FALSE; } } @@ -7837,18 +7766,19 @@ static drflac_bool32 drflac__init_private__ogg(drflac_init_info* pInit, drflac_r } #endif -static drflac_bool32 drflac__init_private(drflac_init_info* pInit, drflac_read_proc onRead, drflac_seek_proc onSeek, drflac_meta_proc onMeta, drflac_container container, void* pUserData, void* pUserDataMD) +static drflac_bool32 drflac__init_private(drflac_init_info* pInit, drflac_read_proc onRead, drflac_seek_proc onSeek, drflac_tell_proc onTell, drflac_meta_proc onMeta, drflac_container container, void* pUserData, void* pUserDataMD) { drflac_bool32 relaxed; drflac_uint8 id[4]; - if (pInit == NULL || onRead == NULL || onSeek == NULL) { + if (pInit == NULL || onRead == NULL || onSeek == NULL) { /* <-- onTell is optional. */ return DRFLAC_FALSE; } DRFLAC_ZERO_MEMORY(pInit, sizeof(*pInit)); pInit->onRead = onRead; pInit->onSeek = onSeek; + pInit->onTell = onTell; pInit->onMeta = onMeta; pInit->container = container; pInit->pUserData = pUserData; @@ -7856,6 +7786,7 @@ static drflac_bool32 drflac__init_private(drflac_init_info* pInit, drflac_read_p pInit->bs.onRead = onRead; pInit->bs.onSeek = onSeek; + pInit->bs.onTell = onTell; pInit->bs.pUserData = pUserData; drflac__reset_cache(&pInit->bs); @@ -7888,7 +7819,7 @@ static drflac_bool32 drflac__init_private(drflac_init_info* pInit, drflac_read_p headerSize += 10; } - if (!onSeek(pUserData, headerSize, drflac_seek_origin_current)) { + if (!onSeek(pUserData, headerSize, DRFLAC_SEEK_CUR)) { return DRFLAC_FALSE; /* Failed to seek past the tag. */ } pInit->runningFilePos += headerSize; @@ -7940,7 +7871,7 @@ static void drflac__init_from_info(drflac* pFlac, const drflac_init_info* pInit) } -static drflac* drflac_open_with_metadata_private(drflac_read_proc onRead, drflac_seek_proc onSeek, drflac_meta_proc onMeta, drflac_container container, void* pUserData, void* pUserDataMD, const drflac_allocation_callbacks* pAllocationCallbacks) +static drflac* drflac_open_with_metadata_private(drflac_read_proc onRead, drflac_seek_proc onSeek, drflac_tell_proc onTell, drflac_meta_proc onMeta, drflac_container container, void* pUserData, void* pUserDataMD, const drflac_allocation_callbacks* pAllocationCallbacks) { drflac_init_info init; drflac_uint32 allocationSize; @@ -7958,7 +7889,7 @@ static drflac* drflac_open_with_metadata_private(drflac_read_proc onRead, drflac /* CPU support first. */ drflac__init_cpu_caps(); - if (!drflac__init_private(&init, onRead, onSeek, onMeta, container, pUserData, pUserDataMD)) { + if (!drflac__init_private(&init, onRead, onSeek, onTell, onMeta, container, pUserData, pUserDataMD)) { return NULL; } @@ -8014,6 +7945,7 @@ static drflac* drflac_open_with_metadata_private(drflac_read_proc onRead, drflac DRFLAC_ZERO_MEMORY(pOggbs, sizeof(*pOggbs)); pOggbs->onRead = onRead; pOggbs->onSeek = onSeek; + pOggbs->onTell = onTell; pOggbs->pUserData = pUserData; pOggbs->currentBytePos = init.oggFirstBytePos; pOggbs->firstBytePos = init.oggFirstBytePos; @@ -8034,17 +7966,19 @@ static drflac* drflac_open_with_metadata_private(drflac_read_proc onRead, drflac if (init.hasMetadataBlocks) { drflac_read_proc onReadOverride = onRead; drflac_seek_proc onSeekOverride = onSeek; + drflac_tell_proc onTellOverride = onTell; void* pUserDataOverride = pUserData; #ifndef DR_FLAC_NO_OGG if (init.container == drflac_container_ogg) { onReadOverride = drflac__on_read_ogg; onSeekOverride = drflac__on_seek_ogg; + onTellOverride = drflac__on_tell_ogg; pUserDataOverride = (void*)pOggbs; } #endif - if (!drflac__read_and_decode_metadata(onReadOverride, onSeekOverride, onMeta, pUserDataOverride, pUserDataMD, &firstFramePos, &seektablePos, &seekpointCount, &allocationCallbacks)) { + if (!drflac__read_and_decode_metadata(onReadOverride, onSeekOverride, onTellOverride, onMeta, pUserDataOverride, pUserDataMD, &firstFramePos, &seektablePos, &seekpointCount, &allocationCallbacks)) { #ifndef DR_FLAC_NO_OGG drflac__free_from_callbacks(pOggbs, &allocationCallbacks); #endif @@ -8079,6 +8013,7 @@ static drflac* drflac_open_with_metadata_private(drflac_read_proc onRead, drflac /* The Ogg bistream needs to be layered on top of the original bitstream. */ pFlac->bs.onRead = drflac__on_read_ogg; pFlac->bs.onSeek = drflac__on_seek_ogg; + pFlac->bs.onTell = drflac__on_tell_ogg; pFlac->bs.pUserData = (void*)pInternalOggbs; pFlac->_oggbs = (void*)pInternalOggbs; } @@ -8105,7 +8040,7 @@ static drflac* drflac_open_with_metadata_private(drflac_read_proc onRead, drflac DRFLAC_ASSERT(pFlac->bs.onRead != NULL); /* Seek to the seektable, then just read directly into our seektable buffer. */ - if (pFlac->bs.onSeek(pFlac->bs.pUserData, (int)seektablePos, drflac_seek_origin_start)) { + if (pFlac->bs.onSeek(pFlac->bs.pUserData, (int)seektablePos, DRFLAC_SEEK_SET)) { drflac_uint32 iSeekpoint; for (iSeekpoint = 0; iSeekpoint < seekpointCount; iSeekpoint += 1) { @@ -8123,7 +8058,7 @@ static drflac* drflac_open_with_metadata_private(drflac_read_proc onRead, drflac } /* We need to seek back to where we were. If this fails it's a critical error. */ - if (!pFlac->bs.onSeek(pFlac->bs.pUserData, (int)pFlac->firstFLACFramePosInBytes, drflac_seek_origin_start)) { + if (!pFlac->bs.onSeek(pFlac->bs.pUserData, (int)pFlac->firstFLACFramePosInBytes, DRFLAC_SEEK_SET)) { drflac__free_from_callbacks(pFlac, &allocationCallbacks); return NULL; } @@ -8294,7 +8229,7 @@ static drflac_result drflac_result_from_errno(int e) #ifdef ENOSYS case ENOSYS: return DRFLAC_NOT_IMPLEMENTED; #endif - #ifdef ENOTEMPTY + #if defined(ENOTEMPTY) && ENOTEMPTY != EEXIST /* In AIX, ENOTEMPTY and EEXIST use the same value. */ case ENOTEMPTY: return DRFLAC_DIRECTORY_NOT_EMPTY; #endif #ifdef ELOOP @@ -8745,12 +8680,42 @@ static size_t drflac__on_read_stdio(void* pUserData, void* bufferOut, size_t byt static drflac_bool32 drflac__on_seek_stdio(void* pUserData, int offset, drflac_seek_origin origin) { - DRFLAC_ASSERT(offset >= 0); /* <-- Never seek backwards. */ + int whence = SEEK_SET; + if (origin == DRFLAC_SEEK_CUR) { + whence = SEEK_CUR; + } else if (origin == DRFLAC_SEEK_END) { + whence = SEEK_END; + } - return fseek((FILE*)pUserData, offset, (origin == drflac_seek_origin_current) ? SEEK_CUR : SEEK_SET) == 0; + return fseek((FILE*)pUserData, offset, whence) == 0; +} + +static drflac_bool32 drflac__on_tell_stdio(void* pUserData, drflac_int64* pCursor) +{ + FILE* pFileStdio = (FILE*)pUserData; + drflac_int64 result; + + /* These were all validated at a higher level. */ + DRFLAC_ASSERT(pFileStdio != NULL); + DRFLAC_ASSERT(pCursor != NULL); + +#if defined(_WIN32) + #if defined(_MSC_VER) && _MSC_VER > 1200 + result = _ftelli64(pFileStdio); + #else + result = ftell(pFileStdio); + #endif +#else + result = ftell(pFileStdio); +#endif + + *pCursor = result; + + return DRFLAC_TRUE; } + DRFLAC_API drflac* drflac_open_file(const char* pFileName, const drflac_allocation_callbacks* pAllocationCallbacks) { drflac* pFlac; @@ -8760,7 +8725,7 @@ DRFLAC_API drflac* drflac_open_file(const char* pFileName, const drflac_allocati return NULL; } - pFlac = drflac_open(drflac__on_read_stdio, drflac__on_seek_stdio, (void*)pFile, pAllocationCallbacks); + pFlac = drflac_open(drflac__on_read_stdio, drflac__on_seek_stdio, drflac__on_tell_stdio, (void*)pFile, pAllocationCallbacks); if (pFlac == NULL) { fclose(pFile); return NULL; @@ -8779,7 +8744,7 @@ DRFLAC_API drflac* drflac_open_file_w(const wchar_t* pFileName, const drflac_all return NULL; } - pFlac = drflac_open(drflac__on_read_stdio, drflac__on_seek_stdio, (void*)pFile, pAllocationCallbacks); + pFlac = drflac_open(drflac__on_read_stdio, drflac__on_seek_stdio, drflac__on_tell_stdio, (void*)pFile, pAllocationCallbacks); if (pFlac == NULL) { fclose(pFile); return NULL; @@ -8798,7 +8763,7 @@ DRFLAC_API drflac* drflac_open_file_with_metadata(const char* pFileName, drflac_ return NULL; } - pFlac = drflac_open_with_metadata_private(drflac__on_read_stdio, drflac__on_seek_stdio, onMeta, drflac_container_unknown, (void*)pFile, pUserData, pAllocationCallbacks); + pFlac = drflac_open_with_metadata_private(drflac__on_read_stdio, drflac__on_seek_stdio, drflac__on_tell_stdio, onMeta, drflac_container_unknown, (void*)pFile, pUserData, pAllocationCallbacks); if (pFlac == NULL) { fclose(pFile); return pFlac; @@ -8817,7 +8782,7 @@ DRFLAC_API drflac* drflac_open_file_with_metadata_w(const wchar_t* pFileName, dr return NULL; } - pFlac = drflac_open_with_metadata_private(drflac__on_read_stdio, drflac__on_seek_stdio, onMeta, drflac_container_unknown, (void*)pFile, pUserData, pAllocationCallbacks); + pFlac = drflac_open_with_metadata_private(drflac__on_read_stdio, drflac__on_seek_stdio, drflac__on_tell_stdio, onMeta, drflac_container_unknown, (void*)pFile, pUserData, pAllocationCallbacks); if (pFlac == NULL) { fclose(pFile); return pFlac; @@ -8852,31 +8817,48 @@ static size_t drflac__on_read_memory(void* pUserData, void* bufferOut, size_t by static drflac_bool32 drflac__on_seek_memory(void* pUserData, int offset, drflac_seek_origin origin) { drflac__memory_stream* memoryStream = (drflac__memory_stream*)pUserData; + drflac_int64 newCursor; DRFLAC_ASSERT(memoryStream != NULL); - DRFLAC_ASSERT(offset >= 0); /* <-- Never seek backwards. */ - if (offset > (drflac_int64)memoryStream->dataSize) { + newCursor = memoryStream->currentReadPos; + + if (origin == DRFLAC_SEEK_SET) { + newCursor = 0; + } else if (origin == DRFLAC_SEEK_CUR) { + newCursor = (drflac_int64)memoryStream->currentReadPos; + } else if (origin == DRFLAC_SEEK_END) { + newCursor = (drflac_int64)memoryStream->dataSize; + } else { + DRFLAC_ASSERT(!"Invalid seek origin"); return DRFLAC_FALSE; } - if (origin == drflac_seek_origin_current) { - if (memoryStream->currentReadPos + offset <= memoryStream->dataSize) { - memoryStream->currentReadPos += offset; - } else { - return DRFLAC_FALSE; /* Trying to seek too far forward. */ - } - } else { - if ((drflac_uint32)offset <= memoryStream->dataSize) { - memoryStream->currentReadPos = offset; - } else { - return DRFLAC_FALSE; /* Trying to seek too far forward. */ - } + newCursor += offset; + + if (newCursor < 0) { + return DRFLAC_FALSE; /* Trying to seek prior to the start of the buffer. */ } + if ((size_t)newCursor > memoryStream->dataSize) { + return DRFLAC_FALSE; /* Trying to seek beyond the end of the buffer. */ + } + + memoryStream->currentReadPos = (size_t)newCursor; return DRFLAC_TRUE; } +static drflac_bool32 drflac__on_tell_memory(void* pUserData, drflac_int64* pCursor) +{ + drflac__memory_stream* memoryStream = (drflac__memory_stream*)pUserData; + + DRFLAC_ASSERT(memoryStream != NULL); + DRFLAC_ASSERT(pCursor != NULL); + + *pCursor = (drflac_int64)memoryStream->currentReadPos; + return DRFLAC_TRUE; +} + DRFLAC_API drflac* drflac_open_memory(const void* pData, size_t dataSize, const drflac_allocation_callbacks* pAllocationCallbacks) { drflac__memory_stream memoryStream; @@ -8885,7 +8867,7 @@ DRFLAC_API drflac* drflac_open_memory(const void* pData, size_t dataSize, const memoryStream.data = (const drflac_uint8*)pData; memoryStream.dataSize = dataSize; memoryStream.currentReadPos = 0; - pFlac = drflac_open(drflac__on_read_memory, drflac__on_seek_memory, &memoryStream, pAllocationCallbacks); + pFlac = drflac_open(drflac__on_read_memory, drflac__on_seek_memory, drflac__on_tell_memory, &memoryStream, pAllocationCallbacks); if (pFlac == NULL) { return NULL; } @@ -8916,7 +8898,7 @@ DRFLAC_API drflac* drflac_open_memory_with_metadata(const void* pData, size_t da memoryStream.data = (const drflac_uint8*)pData; memoryStream.dataSize = dataSize; memoryStream.currentReadPos = 0; - pFlac = drflac_open_with_metadata_private(drflac__on_read_memory, drflac__on_seek_memory, onMeta, drflac_container_unknown, &memoryStream, pUserData, pAllocationCallbacks); + pFlac = drflac_open_with_metadata_private(drflac__on_read_memory, drflac__on_seek_memory, drflac__on_tell_memory, onMeta, drflac_container_unknown, &memoryStream, pUserData, pAllocationCallbacks); if (pFlac == NULL) { return NULL; } @@ -8941,22 +8923,22 @@ DRFLAC_API drflac* drflac_open_memory_with_metadata(const void* pData, size_t da -DRFLAC_API drflac* drflac_open(drflac_read_proc onRead, drflac_seek_proc onSeek, void* pUserData, const drflac_allocation_callbacks* pAllocationCallbacks) +DRFLAC_API drflac* drflac_open(drflac_read_proc onRead, drflac_seek_proc onSeek, drflac_tell_proc onTell, void* pUserData, const drflac_allocation_callbacks* pAllocationCallbacks) { - return drflac_open_with_metadata_private(onRead, onSeek, NULL, drflac_container_unknown, pUserData, pUserData, pAllocationCallbacks); + return drflac_open_with_metadata_private(onRead, onSeek, onTell, NULL, drflac_container_unknown, pUserData, pUserData, pAllocationCallbacks); } -DRFLAC_API drflac* drflac_open_relaxed(drflac_read_proc onRead, drflac_seek_proc onSeek, drflac_container container, void* pUserData, const drflac_allocation_callbacks* pAllocationCallbacks) +DRFLAC_API drflac* drflac_open_relaxed(drflac_read_proc onRead, drflac_seek_proc onSeek, drflac_tell_proc onTell, drflac_container container, void* pUserData, const drflac_allocation_callbacks* pAllocationCallbacks) { - return drflac_open_with_metadata_private(onRead, onSeek, NULL, container, pUserData, pUserData, pAllocationCallbacks); + return drflac_open_with_metadata_private(onRead, onSeek, onTell, NULL, container, pUserData, pUserData, pAllocationCallbacks); } -DRFLAC_API drflac* drflac_open_with_metadata(drflac_read_proc onRead, drflac_seek_proc onSeek, drflac_meta_proc onMeta, void* pUserData, const drflac_allocation_callbacks* pAllocationCallbacks) +DRFLAC_API drflac* drflac_open_with_metadata(drflac_read_proc onRead, drflac_seek_proc onSeek, drflac_tell_proc onTell, drflac_meta_proc onMeta, void* pUserData, const drflac_allocation_callbacks* pAllocationCallbacks) { - return drflac_open_with_metadata_private(onRead, onSeek, onMeta, drflac_container_unknown, pUserData, pUserData, pAllocationCallbacks); + return drflac_open_with_metadata_private(onRead, onSeek, onTell, onMeta, drflac_container_unknown, pUserData, pUserData, pAllocationCallbacks); } -DRFLAC_API drflac* drflac_open_with_metadata_relaxed(drflac_read_proc onRead, drflac_seek_proc onSeek, drflac_meta_proc onMeta, drflac_container container, void* pUserData, const drflac_allocation_callbacks* pAllocationCallbacks) +DRFLAC_API drflac* drflac_open_with_metadata_relaxed(drflac_read_proc onRead, drflac_seek_proc onSeek, drflac_tell_proc onTell, drflac_meta_proc onMeta, drflac_container container, void* pUserData, const drflac_allocation_callbacks* pAllocationCallbacks) { - return drflac_open_with_metadata_private(onRead, onSeek, onMeta, container, pUserData, pUserData, pAllocationCallbacks); + return drflac_open_with_metadata_private(onRead, onSeek, onTell, onMeta, container, pUserData, pUserData, pAllocationCallbacks); } DRFLAC_API void drflac_close(drflac* pFlac) @@ -11788,7 +11770,7 @@ DRFLAC_DEFINE_FULL_READ_AND_CLOSE(s32, drflac_int32) DRFLAC_DEFINE_FULL_READ_AND_CLOSE(s16, drflac_int16) DRFLAC_DEFINE_FULL_READ_AND_CLOSE(f32, float) -DRFLAC_API drflac_int32* drflac_open_and_read_pcm_frames_s32(drflac_read_proc onRead, drflac_seek_proc onSeek, void* pUserData, unsigned int* channelsOut, unsigned int* sampleRateOut, drflac_uint64* totalPCMFrameCountOut, const drflac_allocation_callbacks* pAllocationCallbacks) +DRFLAC_API drflac_int32* drflac_open_and_read_pcm_frames_s32(drflac_read_proc onRead, drflac_seek_proc onSeek, drflac_tell_proc onTell, void* pUserData, unsigned int* channelsOut, unsigned int* sampleRateOut, drflac_uint64* totalPCMFrameCountOut, const drflac_allocation_callbacks* pAllocationCallbacks) { drflac* pFlac; @@ -11802,7 +11784,7 @@ DRFLAC_API drflac_int32* drflac_open_and_read_pcm_frames_s32(drflac_read_proc on *totalPCMFrameCountOut = 0; } - pFlac = drflac_open(onRead, onSeek, pUserData, pAllocationCallbacks); + pFlac = drflac_open(onRead, onSeek, onTell, pUserData, pAllocationCallbacks); if (pFlac == NULL) { return NULL; } @@ -11810,7 +11792,7 @@ DRFLAC_API drflac_int32* drflac_open_and_read_pcm_frames_s32(drflac_read_proc on return drflac__full_read_and_close_s32(pFlac, channelsOut, sampleRateOut, totalPCMFrameCountOut); } -DRFLAC_API drflac_int16* drflac_open_and_read_pcm_frames_s16(drflac_read_proc onRead, drflac_seek_proc onSeek, void* pUserData, unsigned int* channelsOut, unsigned int* sampleRateOut, drflac_uint64* totalPCMFrameCountOut, const drflac_allocation_callbacks* pAllocationCallbacks) +DRFLAC_API drflac_int16* drflac_open_and_read_pcm_frames_s16(drflac_read_proc onRead, drflac_seek_proc onSeek, drflac_tell_proc onTell, void* pUserData, unsigned int* channelsOut, unsigned int* sampleRateOut, drflac_uint64* totalPCMFrameCountOut, const drflac_allocation_callbacks* pAllocationCallbacks) { drflac* pFlac; @@ -11824,7 +11806,7 @@ DRFLAC_API drflac_int16* drflac_open_and_read_pcm_frames_s16(drflac_read_proc on *totalPCMFrameCountOut = 0; } - pFlac = drflac_open(onRead, onSeek, pUserData, pAllocationCallbacks); + pFlac = drflac_open(onRead, onSeek, onTell, pUserData, pAllocationCallbacks); if (pFlac == NULL) { return NULL; } @@ -11832,7 +11814,7 @@ DRFLAC_API drflac_int16* drflac_open_and_read_pcm_frames_s16(drflac_read_proc on return drflac__full_read_and_close_s16(pFlac, channelsOut, sampleRateOut, totalPCMFrameCountOut); } -DRFLAC_API float* drflac_open_and_read_pcm_frames_f32(drflac_read_proc onRead, drflac_seek_proc onSeek, void* pUserData, unsigned int* channelsOut, unsigned int* sampleRateOut, drflac_uint64* totalPCMFrameCountOut, const drflac_allocation_callbacks* pAllocationCallbacks) +DRFLAC_API float* drflac_open_and_read_pcm_frames_f32(drflac_read_proc onRead, drflac_seek_proc onSeek, drflac_tell_proc onTell, void* pUserData, unsigned int* channelsOut, unsigned int* sampleRateOut, drflac_uint64* totalPCMFrameCountOut, const drflac_allocation_callbacks* pAllocationCallbacks) { drflac* pFlac; @@ -11846,7 +11828,7 @@ DRFLAC_API float* drflac_open_and_read_pcm_frames_f32(drflac_read_proc onRead, d *totalPCMFrameCountOut = 0; } - pFlac = drflac_open(onRead, onSeek, pUserData, pAllocationCallbacks); + pFlac = drflac_open(onRead, onSeek, onTell, pUserData, pAllocationCallbacks); if (pFlac == NULL) { return NULL; } @@ -12095,6 +12077,22 @@ DRFLAC_API drflac_bool32 drflac_next_cuesheet_track(drflac_cuesheet_track_iterat /* REVISION HISTORY ================ +v0.13.0 - 2025-07-23 + - API CHANGE: Seek origin enums have been renamed to match the naming convention used by other dr_libs libraries: + - drflac_seek_origin_start -> DRFLAC_SEEK_SET + - drflac_seek_origin_current -> DRFLAC_SEEK_CUR + - DRFLAC_SEEK_END (new) + - API CHANGE: A new seek origin has been added to allow seeking from the end of the file. If you implement your own `onSeek` callback, you should now detect and handle `DRFLAC_SEEK_END`. If seeking to the end is not supported, return `DRFLAC_FALSE`. If you only use `*_open_file()` or `*_open_memory()`, you need not change anything. + - API CHANGE: An `onTell` callback has been added to the following functions: + - drflac_open() + - drflac_open_relaxed() + - drflac_open_with_metadata() + - drflac_open_with_metadata_relaxed() + - drflac_open_and_read_pcm_frames_s32() + - drflac_open_and_read_pcm_frames_s16() + - drflac_open_and_read_pcm_frames_f32() + - Fix compilation for AIX OS. + v0.12.43 - 2024-12-17 - Fix a possible buffer overflow during decoding. - Improve detection of ARM64EC diff --git a/src/codecs/music_drflac.c b/src/codecs/music_drflac.c index 2999188b..5e793e37 100644 --- a/src/codecs/music_drflac.c +++ b/src/codecs/music_drflac.c @@ -77,13 +77,33 @@ static size_t DRFLAC_ReadCB(void *context, void *buf, size_t size) static drflac_bool32 DRFLAC_SeekCB(void *context, int offset, drflac_seek_origin origin) { DRFLAC_Music *music = (DRFLAC_Music *)context; - int whence = (origin == drflac_seek_origin_start) ? RW_SEEK_SET : RW_SEEK_CUR; + int whence; + switch (origin) { + case DRFLAC_SEEK_SET: + whence = RW_SEEK_SET; + break; + case DRFLAC_SEEK_CUR: + whence = RW_SEEK_CUR; + break; + case DRFLAC_SEEK_END: + whence = RW_SEEK_END; + break; + default: + return DRFLAC_FALSE; + } if (MP3_RWseek(&music->file, offset, whence) < 0) { return DRFLAC_FALSE; } return DRFLAC_TRUE; } +static drflac_bool32 DRFLAC_TellCB(void *context, drflac_int64 *pos) +{ + DRFLAC_Music *music = (DRFLAC_Music *)context; + *pos = MP3_RWtell(&music->file); + return (*pos < 0) ? DRFLAC_FALSE : DRFLAC_TRUE; +} + static void DRFLAC_MetaCB(void *context, drflac_metadata *metadata) { DRFLAC_Music *music = (DRFLAC_Music *)context; @@ -176,7 +196,7 @@ static void *DRFLAC_CreateFromRW(SDL_RWops *src, int freesrc) meta_tags_init(&music->tags); - music->dec = drflac_open_with_metadata(DRFLAC_ReadCB, DRFLAC_SeekCB, DRFLAC_MetaCB, music, NULL); + music->dec = drflac_open_with_metadata(DRFLAC_ReadCB, DRFLAC_SeekCB, DRFLAC_TellCB, DRFLAC_MetaCB, music, NULL); if (!music->dec) { SDL_free(music); Mix_SetError("music_drflac: corrupt flac file (bad stream)."); From bd3185b243c15e9631bf0210a263b8f40b57f4cf Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" Date: Thu, 24 Jul 2025 00:16:52 -0400 Subject: [PATCH 14/48] include: Clarify lifetime of RWops in Mix_LoadMUS* calls with freesrc!=0. Fixes #683. --- include/SDL_mixer.h | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/include/SDL_mixer.h b/include/SDL_mixer.h index 52eaf77d..202d215c 100644 --- a/include/SDL_mixer.h +++ b/include/SDL_mixer.h @@ -665,9 +665,11 @@ extern DECLSPEC Mix_Music * SDLCALL Mix_LoadMUS(const char *file); * fly. Also, crucially, there are as many channels for chunks as the app can * allocate, but SDL_mixer only offers a single "music" channel. * - * If `freesrc` is non-zero, the RWops will be closed before returning, - * whether this function succeeds or not. SDL_mixer reads everything it needs - * from the RWops during this call in any case. + * If `freesrc` is non-zero, the RWops will be closed when SDL_mixer is done + * with it, which will be before this function call returns if there is an + * error, or perhaps much later if the music is streaming for some time. The + * app should not attempt to use the RWops again, as it may become invalid + * without warning. * * As a convenience, there is a function to read files from disk without * having to deal with SDL_RWops: `Mix_LoadMUS("filename.mp3")` will manage @@ -725,9 +727,11 @@ extern DECLSPEC Mix_Music * SDLCALL Mix_LoadMUS_RW(SDL_RWops *src, int freesrc); * - `MUS_OPUS` (Opus files) * - `MUS_WAVPACK` (WavPack files) * - * If `freesrc` is non-zero, the RWops will be closed before returning, - * whether this function succeeds or not. SDL_mixer reads everything it needs - * from the RWops during this call in any case. + * If `freesrc` is non-zero, the RWops will be closed when SDL_mixer is done + * with it, which will be before this function call returns if there is an + * error, or perhaps much later if the music is streaming for some time. The + * app should not attempt to use the RWops again, as it may become invalid + * without warning. * * As a convenience, there is a function to read files from disk without * having to deal with SDL_RWops: `Mix_LoadMUS("filename.mp3")` will manage From 51b73d00d7073aa4e8a61ba9bfbe18a8c68ac7d7 Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" Date: Thu, 24 Jul 2025 14:35:01 -0400 Subject: [PATCH 15/48] CMakeLists: Use correct name for Tremor library. Fixes #702. --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e102cc27..e56c1818 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -472,7 +472,7 @@ if(SDL2MIXER_VORBIS_TREMOR) message(STATUS "Using system tremor") find_package(tremor REQUIRED) if(NOT SDL2MIXER_VORBIS_TREMOR_SHARED) - list(APPEND PC_REQUIRES tremor) + list(APPEND PC_REQUIRES vorbisidec) endif() endif() if(SDL2MIXER_VORBIS_TREMOR_SHARED) From 24cf1eb8dea3a5f04d87d1e1e60c07d85c9a801a Mon Sep 17 00:00:00 2001 From: SDL Wiki Bot Date: Thu, 24 Jul 2025 18:50:38 +0000 Subject: [PATCH 16/48] Sync SDL2_mixer wiki -> header [ci skip] --- include/SDL_mixer.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/include/SDL_mixer.h b/include/SDL_mixer.h index 202d215c..e774ab78 100644 --- a/include/SDL_mixer.h +++ b/include/SDL_mixer.h @@ -2637,7 +2637,8 @@ extern DECLSPEC int SDLCALL Mix_GetSynchroValue(void); * Set SoundFonts paths to use by supported MIDI backends. * * You may specify multiple paths in a single string by separating them with - * semicolons; they will be searched in the order listed. + * semicolons; they will be searched in the _reverse_ order listed (last one + * listed will be the first one searched). * * This function replaces any previously-specified paths. * From d3b4d9cf9cae405ef3e0c15e5203f3aa14657c67 Mon Sep 17 00:00:00 2001 From: Ozkan Sezer Date: Fri, 25 Jul 2025 00:11:50 +0300 Subject: [PATCH 17/48] minimp3: silence an incorrect -Wstringop-overflow warning from gcc >= 14 Reference issue: https://github.com/libsdl-org/SDL_mixer/issues/616 --- src/codecs/minimp3/minimp3.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/codecs/minimp3/minimp3.h b/src/codecs/minimp3/minimp3.h index 3220ae1a..5442f591 100644 --- a/src/codecs/minimp3/minimp3.h +++ b/src/codecs/minimp3/minimp3.h @@ -651,6 +651,10 @@ static float L3_ldexp_q2(float y, int exp_q2) return y; } +#if (defined(__GNUC__) && (__GNUC__ >= 14)) && !defined(__clang__) + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Wstringop-overflow" +#endif static void L3_decode_scalefactors(const uint8_t *hdr, uint8_t *ist_pos, bs_t *bs, const L3_gr_info_t *gr, float *scf, int ch) { static const uint8_t g_scf_partitions[3][28] = { @@ -712,6 +716,9 @@ static void L3_decode_scalefactors(const uint8_t *hdr, uint8_t *ist_pos, bs_t *b scf[i] = L3_ldexp_q2(gain, iscf[i] << scf_shift); } } +#if (defined(__GNUC__) && (__GNUC__ >= 14)) && !defined(__clang__) + #pragma GCC diagnostic pop +#endif static const float g_pow43[129 + 16] = { 0,-1,-2.519842f,-4.326749f,-6.349604f,-8.549880f,-10.902724f,-13.390518f,-16.000000f,-18.720754f,-21.544347f,-24.463781f,-27.473142f,-30.567351f,-33.741992f,-36.993181f, From ebf1447527f89cb9b7afa8aaa84bf2a128f83031 Mon Sep 17 00:00:00 2001 From: Ozkan Sezer Date: Tue, 5 Aug 2025 20:20:37 +0300 Subject: [PATCH 18/48] minor whitespace --- include/SDL_mixer.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/SDL_mixer.h b/include/SDL_mixer.h index e774ab78..2c4dd098 100644 --- a/include/SDL_mixer.h +++ b/include/SDL_mixer.h @@ -1270,7 +1270,7 @@ typedef void (SDLCALL *Mix_ChannelFinishedCallback)(int channel); extern DECLSPEC void SDLCALL Mix_ChannelFinished(Mix_ChannelFinishedCallback channel_finished); -#define MIX_CHANNEL_POST (-2) +#define MIX_CHANNEL_POST (-2) /** * This is the format of a special effect callback: From 6463498b6a4cf5ff5c414d8cce525cefe4b4289a Mon Sep 17 00:00:00 2001 From: Anonymous Maarten Date: Thu, 7 Aug 2025 15:21:59 +0200 Subject: [PATCH 19/48] android: support Google Play 16 kiB page size requirement Manual backport of 7ebec86ae0c6fe2038f00b652486811fa0509c05 --- Android.mk | 4 ++++ CMakeLists.txt | 2 ++ cmake/PrivateSdlFunctions.cmake | 7 +++++++ 3 files changed, 13 insertions(+) diff --git a/Android.mk b/Android.mk index fb6257d6..21b21891 100644 --- a/Android.mk +++ b/Android.mk @@ -163,6 +163,10 @@ endif LOCAL_EXPORT_C_INCLUDES += $(LOCAL_PATH)/include +# https://developer.android.com/guide/practices/page-sizes +LOCAL_LDFLAGS += "-Wl,-z,max-page-size=16384" +LOCAL_LDFLAGS += "-Wl,-z,common-page-size=16384" + include $(BUILD_SHARED_LIBRARY) ########################### diff --git a/CMakeLists.txt b/CMakeLists.txt index e56c1818..ae2a5791 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -241,6 +241,7 @@ add_library(SDL2_mixer src/utils.c ) add_library(SDL2_mixer::${sdl2_mixer_export_name} ALIAS SDL2_mixer) +sdl_add_platform_link_options(SDL2_mixer) target_include_directories(SDL2_mixer PUBLIC "$" @@ -1015,6 +1016,7 @@ if(SDL2MIXER_SAMPLES) foreach(prog playmus playwave) # FIXME: mingw should be handled by SDL2::SDL2(-static) target + sdl_add_platform_link_options(${prog}) if(MINGW) target_link_libraries(${prog} PRIVATE mingw32) target_link_options(${prog} PRIVATE -mwindows) diff --git a/cmake/PrivateSdlFunctions.cmake b/cmake/PrivateSdlFunctions.cmake index 1f3786c0..08af0b69 100644 --- a/cmake/PrivateSdlFunctions.cmake +++ b/cmake/PrivateSdlFunctions.cmake @@ -287,3 +287,10 @@ function(sdl_target_link_options_no_undefined TARGET) endif() endif() endfunction() + +function(sdl_add_platform_link_options TARGET) + if(ANDROID) + target_link_options(${TARGET} PRIVATE "-Wl,-z,max-page-size=16384") + target_link_options(${TARGET} PRIVATE "-Wl,-z,common-page-size=16384") + endif() +endfunction() From 8b2aa938b7d145dce4f0ea7c37d8da981c3ee4e3 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Thu, 7 Aug 2025 11:30:38 -0700 Subject: [PATCH 20/48] Revert "android: support Google Play 16 kiB page size requirement" This reverts commit 6463498b6a4cf5ff5c414d8cce525cefe4b4289a. If you need to support the Google Play 16 kiB page size requirement, the recommendation is to use NDK r28c or newer, which automatically aligns binaries correctly. --- Android.mk | 4 ---- CMakeLists.txt | 2 -- cmake/PrivateSdlFunctions.cmake | 7 ------- 3 files changed, 13 deletions(-) diff --git a/Android.mk b/Android.mk index 21b21891..fb6257d6 100644 --- a/Android.mk +++ b/Android.mk @@ -163,10 +163,6 @@ endif LOCAL_EXPORT_C_INCLUDES += $(LOCAL_PATH)/include -# https://developer.android.com/guide/practices/page-sizes -LOCAL_LDFLAGS += "-Wl,-z,max-page-size=16384" -LOCAL_LDFLAGS += "-Wl,-z,common-page-size=16384" - include $(BUILD_SHARED_LIBRARY) ########################### diff --git a/CMakeLists.txt b/CMakeLists.txt index ae2a5791..e56c1818 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -241,7 +241,6 @@ add_library(SDL2_mixer src/utils.c ) add_library(SDL2_mixer::${sdl2_mixer_export_name} ALIAS SDL2_mixer) -sdl_add_platform_link_options(SDL2_mixer) target_include_directories(SDL2_mixer PUBLIC "$" @@ -1016,7 +1015,6 @@ if(SDL2MIXER_SAMPLES) foreach(prog playmus playwave) # FIXME: mingw should be handled by SDL2::SDL2(-static) target - sdl_add_platform_link_options(${prog}) if(MINGW) target_link_libraries(${prog} PRIVATE mingw32) target_link_options(${prog} PRIVATE -mwindows) diff --git a/cmake/PrivateSdlFunctions.cmake b/cmake/PrivateSdlFunctions.cmake index 08af0b69..1f3786c0 100644 --- a/cmake/PrivateSdlFunctions.cmake +++ b/cmake/PrivateSdlFunctions.cmake @@ -287,10 +287,3 @@ function(sdl_target_link_options_no_undefined TARGET) endif() endif() endfunction() - -function(sdl_add_platform_link_options TARGET) - if(ANDROID) - target_link_options(${TARGET} PRIVATE "-Wl,-z,max-page-size=16384") - target_link_options(${TARGET} PRIVATE "-Wl,-z,common-page-size=16384") - endif() -endfunction() From c5ab721f2627cf8a8779b3bf1c7461f06c62ebf3 Mon Sep 17 00:00:00 2001 From: Anonymous Maarten Date: Sat, 9 Aug 2025 05:31:57 +0200 Subject: [PATCH 21/48] release: build aarch64 libraries with 16kiB page size [ci skip] --- build-scripts/build-release.py | 152 +++++++++++++++++++++++++-------- 1 file changed, 115 insertions(+), 37 deletions(-) diff --git a/build-scripts/build-release.py b/build-scripts/build-release.py index d3825a47..b256e4d5 100755 --- a/build-scripts/build-release.py +++ b/build-scripts/build-release.py @@ -37,6 +37,8 @@ GIT_HASH_FILENAME = ".git-hash" REVISION_TXT = "REVISION.txt" +RE_ILLEGAL_MINGW_LIBRARIES = re.compile(r"(?:lib)?(?:gcc|(?:std)?c[+][+]|(?:win)?pthread).*", flags=re.I) + def safe_isotime_to_datetime(str_isotime: str) -> datetime.datetime: try: @@ -532,6 +534,18 @@ def _get_file_times(self, paths: tuple[str, ...]) -> dict[str, datetime.datetime return path_times +class AndroidApiVersion: + def __init__(self, name: str, ints: tuple[int, ...]): + self.name = name + self.ints = ints + + def __repr__(self) -> str: + return f"<{self.name} ({'.'.join(str(v) for v in self.ints)})>" + +ANDROID_ABI_EXTRA_LINK_OPTIONS = { + "arm64-v8a": "-Wl,-z,max-page-size=16384 -Wl,-z,common-page-size=16384", +} + class Releaser: def __init__(self, release_info: dict, commit: str, revision: str, root: Path, dist_path: Path, section_printer: SectionPrinter, executer: Executer, cmake_generator: str, deps_path: Path, overwrite: bool, github: bool, fast: bool): self.release_info = release_info @@ -684,6 +698,15 @@ def create_dmg(self, configuration: str="Release") -> None: def git_hash_data(self) -> bytes: return f"{self.commit}\n".encode() + def verify_mingw_library(self, triplet: str, path: Path): + objdump_output = self.executer.check_output([f"{triplet}-objdump", "-p", str(path)]) + libraries = re.findall(r"DLL Name: ([^\n]+)", objdump_output) + logger.info("%s (%s) libraries: %r", path, triplet, libraries) + illegal_libraries = list(filter(RE_ILLEGAL_MINGW_LIBRARIES.match, libraries)) + logger.error("Detected 'illegal' libraries: %r", illegal_libraries) + if illegal_libraries: + raise Exception(f"{path} links to illegal libraries: {illegal_libraries}") + def create_mingw_archives(self) -> None: build_type = "Release" build_parent_dir = self.root / "build-mingw" @@ -790,6 +813,7 @@ def extract_filter(member: tarfile.TarInfo, path: str, /): self.executer.run(["make", f"-j{self.cpu_count}"], cwd=build_path, env=new_env) with self.section_printer.group(f"Install MinGW {triplet} (autotools)"): self.executer.run(["make", "install"], cwd=build_path, env=new_env) + self.verify_mingw_library(triplet=ARCH_TO_TRIPLET[arch], path=install_path / "bin" / f"{self.project}.dll") archive_file_tree.add_directory_tree(arc_dir=arc_join(arc_root, triplet), path=install_path, time=self.arc_time) print("Recording arch-dependent extra files for MinGW development archive ...") @@ -845,6 +869,7 @@ def extract_filter(member: tarfile.TarInfo, path: str, /): self.executer.run(["cmake", "--build", str(build_path), "--verbose", "--config", build_type], cwd=build_path, env=new_env) with self.section_printer.group(f"Install MinGW {triplet} (CMake)"): self.executer.run(["cmake", "--install", str(build_path)], cwd=build_path, env=new_env) + self.verify_mingw_library(triplet=ARCH_TO_TRIPLET[arch], path=install_path / "bin" / f"{self.project}.dll") archive_file_tree.add_directory_tree(arc_dir=arc_join(arc_root, triplet), path=install_path, time=self.arc_time) print("Recording arch-dependent extra files for MinGW development archive ...") @@ -872,22 +897,25 @@ def extract_filter(member: tarfile.TarInfo, path: str, /): self.artifacts["mingw-devel-tar-gz"] = tgz_path self.artifacts["mingw-devel-tar-xz"] = txz_path - def _detect_android_api(self, android_home: str) -> typing.Optional[int]: + def _detect_android_api(self, android_home: str) -> typing.Optional[AndroidApiVersion]: platform_dirs = list(Path(p) for p in glob.glob(f"{android_home}/platforms/android-*")) - re_platform = re.compile("android-([0-9]+)") - platform_versions = [] + re_platform = re.compile("^android-([0-9]+)(?:-ext([0-9]+))?$") + platform_versions: list[AndroidApiVersion] = [] for platform_dir in platform_dirs: logger.debug("Found Android Platform SDK: %s", platform_dir) + if not (platform_dir / "android.jar").is_file(): + logger.debug("Skipping SDK, missing android.jar") + continue if m:= re_platform.match(platform_dir.name): - platform_versions.append(int(m.group(1))) - platform_versions.sort() + platform_versions.append(AndroidApiVersion(name=platform_dir.name, ints=(int(m.group(1)), int(m.group(2) or 0)))) + platform_versions.sort(key=lambda v: v.ints) logger.info("Available platform versions: %s", platform_versions) - platform_versions = list(filter(lambda v: v >= self._android_api_minimum, platform_versions)) - logger.info("Valid platform versions (>=%d): %s", self._android_api_minimum, platform_versions) + platform_versions = list(filter(lambda v: v.ints >= self._android_api_minimum.ints, platform_versions)) + logger.info("Valid platform versions (>=%s): %s", self._android_api_minimum.ints, platform_versions) if not platform_versions: return None android_api = platform_versions[0] - logger.info("Selected API version %d", android_api) + logger.info("Selected API version %s", android_api) return android_api def _get_prefab_json_text(self) -> str: @@ -911,8 +939,19 @@ def _get_prefab_module_json_text(self, library_name: typing.Optional[str], expor return json.dumps(module_json_dict, indent=4) @property - def _android_api_minimum(self): - return self.release_info["android"]["api-minimum"] + def _android_api_minimum(self) -> AndroidApiVersion: + value = self.release_info["android"]["api-minimum"] + if isinstance(value, int): + ints = (value, ) + elif isinstance(value, str): + ints = tuple(split(".")) + else: + raise ValueError("Invalid android.api-minimum: must be X or X.Y") + match len(ints): + case 1: name = f"android-{ints[0]}" + case 2: name = f"android-{ints[0]}-ext-{ints[1]}" + case _: raise ValueError("Invalid android.api-minimum: must be X or X.Y") + return AndroidApiVersion(name=name, ints=ints) @property def _android_api_target(self): @@ -925,7 +964,7 @@ def _android_ndk_minimum(self): def _get_prefab_abi_json_text(self, abi: str, cpp: bool, shared: bool) -> str: abi_json_dict = { "abi": abi, - "api": self._android_api_minimum, + "api": self._android_api_minimum.ints[0], "ndk": self._android_ndk_minimum, "stl": "c++_shared" if cpp else "none", "static": not shared, @@ -938,7 +977,7 @@ def _get_android_manifest_text(self) -> str: xmlns:android="http://schemas.android.com/apk/res/android" package="org.libsdl.android.{self.project}" android:versionCode="1" android:versionName="1.0"> - """) @@ -948,7 +987,8 @@ def create_android_archives(self, android_api: int, android_home: Path, android_ if not cmake_toolchain_file.exists(): logger.error("CMake toolchain file does not exist (%s)", cmake_toolchain_file) raise SystemExit(1) - aar_path = self.dist_path / f"{self.project}-{self.version}.aar" + aar_path = self.root / "build-android" / f"{self.project}-{self.version}.aar" + android_dist_path = self.dist_path / f"{self.project}-devel-{self.version}-android.zip" android_abis = self.release_info["android"]["abis"] java_jars_added = False module_data_added = False @@ -956,16 +996,27 @@ def create_android_archives(self, android_api: int, android_home: Path, android_ shutil.rmtree(android_deps_path, ignore_errors=True) for dep, depinfo in self.release_info["android"].get("dependencies", {}).items(): - android_aar = self.deps_path / glob.glob(depinfo["artifact"], root_dir=self.deps_path)[0] - with self.section_printer.group(f"Extracting Android dependency {dep} ({android_aar.name})"): - self.executer.run([sys.executable, str(android_aar), "-o", str(android_deps_path)]) + dep_devel_zip = self.deps_path / glob.glob(depinfo["artifact"], root_dir=self.deps_path)[0] + + dep_extract_path = self.deps_path / f"extract/android/{dep}" + shutil.rmtree(dep_extract_path, ignore_errors=True) + dep_extract_path.mkdir(parents=True, exist_ok=True) + + with self.section_printer.group(f"Extracting Android dependency {dep} ({dep_devel_zip})"): + with zipfile.ZipFile(dep_devel_zip, "r") as zf: + zf.extractall(dep_extract_path) + + dep_devel_aar = dep_extract_path / glob.glob("*.aar", root_dir=dep_extract_path)[0] + self.executer.run([sys.executable, str(dep_devel_aar), "-o", str(android_deps_path)]) for module_name, module_info in self.release_info["android"]["modules"].items(): assert "type" in module_info and module_info["type"] in ("interface", "library"), f"module {module_name} must have a valid type" - archive_file_tree = ArchiveFileTree() + aar_file_tree = ArchiveFileTree() + android_devel_file_tree = ArchiveFileTree() for android_abi in android_abis: + extra_link_options = ANDROID_ABI_EXTRA_LINK_OPTIONS.get(android_abi, "") with self.section_printer.group(f"Building for Android {android_api} {android_abi}"): build_dir = self.root / "build-android" / f"{android_abi}-build" install_dir = self.root / "install-android" / f"{android_abi}-install" @@ -976,8 +1027,11 @@ def create_android_archives(self, android_api: int, android_home: Path, android_ "cmake", "-S", str(self.root), "-B", str(build_dir), - f'''-DCMAKE_C_FLAGS="-ffile-prefix-map={self.root}=/src/{self.project}"''', - f'''-DCMAKE_CXX_FLAGS="-ffile-prefix-map={self.root}=/src/{self.project}"''', + # NDK 21e does not support -ffile-prefix-map + # f'''-DCMAKE_C_FLAGS="-ffile-prefix-map={self.root}=/src/{self.project}"''', + # f'''-DCMAKE_CXX_FLAGS="-ffile-prefix-map={self.root}=/src/{self.project}"''', + f"-DCMAKE_EXE_LINKER_FLAGS={extra_link_options}", + f"-DCMAKE_SHARED_LINKER_FLAGS={extra_link_options}", f"-DCMAKE_TOOLCHAIN_FILE={cmake_toolchain_file}", f"-DCMAKE_PREFIX_PATH={str(android_deps_path)}", f"-DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=BOTH", @@ -1014,20 +1068,20 @@ def create_android_archives(self, android_api: int, android_home: Path, android_ assert library.suffix in (".so", ".a") assert library.is_file(), f"CMake should have built library '{library}' for module {module_name}" arcdir_prefab_libs = f"{arcdir_prefab_module}/libs/android.{android_abi}" - archive_file_tree.add_file(NodeInArchive.from_fs(arcpath=f"{arcdir_prefab_libs}/{library.name}", path=library, time=self.arc_time)) - archive_file_tree.add_file(NodeInArchive.from_text(arcpath=f"{arcdir_prefab_libs}/abi.json", text=self._get_prefab_abi_json_text(abi=android_abi, cpp=False, shared=library.suffix == ".so"), time=self.arc_time)) + aar_file_tree.add_file(NodeInArchive.from_fs(arcpath=f"{arcdir_prefab_libs}/{library.name}", path=library, time=self.arc_time)) + aar_file_tree.add_file(NodeInArchive.from_text(arcpath=f"{arcdir_prefab_libs}/abi.json", text=self._get_prefab_abi_json_text(abi=android_abi, cpp=False, shared=library.suffix == ".so"), time=self.arc_time)) if not module_data_added: library_name = None if module_info["type"] == "library": library_name = Path(module_info["library"]).stem.removeprefix("lib") export_libraries = module_info.get("export-libraries", []) - archive_file_tree.add_file(NodeInArchive.from_text(arcpath=arc_join(arcdir_prefab_module, "module.json"), text=self._get_prefab_module_json_text(library_name=library_name, export_libraries=export_libraries), time=self.arc_time)) + aar_file_tree.add_file(NodeInArchive.from_text(arcpath=arc_join(arcdir_prefab_module, "module.json"), text=self._get_prefab_module_json_text(library_name=library_name, export_libraries=export_libraries), time=self.arc_time)) arcdir_prefab_include = f"prefab/modules/{module_name}/include" if "includes" in module_info: - archive_file_tree.add_file_mapping(arc_dir=arcdir_prefab_include, file_mapping=module_info["includes"], file_mapping_root=install_dir, context=self.get_context(), time=self.arc_time) + aar_file_tree.add_file_mapping(arc_dir=arcdir_prefab_include, file_mapping=module_info["includes"], file_mapping_root=install_dir, context=self.get_context(), time=self.arc_time) else: - archive_file_tree.add_file(NodeInArchive.from_text(arcpath=arc_join(arcdir_prefab_include, ".keep"), text="\n", time=self.arc_time)) + aar_file_tree.add_file(NodeInArchive.from_text(arcpath=arc_join(arcdir_prefab_include, ".keep"), text="\n", time=self.arc_time)) module_data_added = True if not java_jars_added: @@ -1040,21 +1094,28 @@ def create_android_archives(self, android_api: int, android_home: Path, android_ assert sources_jar_path.is_file(), f"CMake should have archived the java sources into a JAR ({sources_jar_path})" assert doc_jar_path.is_file(), f"CMake should have archived javadoc into a JAR ({doc_jar_path})" - archive_file_tree.add_file(NodeInArchive.from_fs(arcpath="classes.jar", path=classes_jar_path, time=self.arc_time)) - archive_file_tree.add_file(NodeInArchive.from_fs(arcpath="classes-sources.jar", path=sources_jar_path, time=self.arc_time)) - archive_file_tree.add_file(NodeInArchive.from_fs(arcpath="classes-doc.jar", path=doc_jar_path, time=self.arc_time)) + aar_file_tree.add_file(NodeInArchive.from_fs(arcpath="classes.jar", path=classes_jar_path, time=self.arc_time)) + aar_file_tree.add_file(NodeInArchive.from_fs(arcpath="classes-sources.jar", path=sources_jar_path, time=self.arc_time)) + aar_file_tree.add_file(NodeInArchive.from_fs(arcpath="classes-doc.jar", path=doc_jar_path, time=self.arc_time)) assert ("jars" in self.release_info["android"] and java_jars_added) or "jars" not in self.release_info["android"], "Must have archived java JAR archives" - archive_file_tree.add_file_mapping(arc_dir="", file_mapping=self.release_info["android"].get("files", {}), file_mapping_root=self.root, context=self.get_context(), time=self.arc_time) + aar_file_tree.add_file_mapping(arc_dir="", file_mapping=self.release_info["android"]["aar-files"], file_mapping_root=self.root, context=self.get_context(), time=self.arc_time) - archive_file_tree.add_file(NodeInArchive.from_text(arcpath="prefab/prefab.json", text=self._get_prefab_json_text(), time=self.arc_time)) - archive_file_tree.add_file(NodeInArchive.from_text(arcpath="AndroidManifest.xml", text=self._get_android_manifest_text(), time=self.arc_time)) + aar_file_tree.add_file(NodeInArchive.from_text(arcpath="prefab/prefab.json", text=self._get_prefab_json_text(), time=self.arc_time)) + aar_file_tree.add_file(NodeInArchive.from_text(arcpath="AndroidManifest.xml", text=self._get_android_manifest_text(), time=self.arc_time)) with Archiver(zip_path=aar_path) as archiver: - archive_file_tree.add_to_archiver(archive_base="", archiver=archiver) + aar_file_tree.add_to_archiver(archive_base="", archiver=archiver) + archiver.add_git_hash(arcdir="", commit=self.commit, time=self.arc_time) + + android_devel_file_tree.add_file(NodeInArchive.from_fs(arcpath=aar_path.name, path=aar_path)) + android_devel_file_tree.add_file_mapping(arc_dir="", file_mapping=self.release_info["android"]["files"], file_mapping_root=self.root, context=self.get_context(), time=self.arc_time) + with Archiver(zip_path=android_dist_path) as archiver: + android_devel_file_tree.add_to_archiver(archive_base="", archiver=archiver) archiver.add_git_hash(arcdir="", commit=self.commit, time=self.arc_time) - self.artifacts[f"android-aar"] = aar_path + + self.artifacts[f"android-aar"] = android_dist_path def download_dependencies(self): shutil.rmtree(self.deps_path, ignore_errors=True) @@ -1091,7 +1152,7 @@ def verify_dependencies(self): assert len(msvc_matches) == 1, f"Exactly one archive matches msvc {dep} dependency: {msvc_matches}" if "android" in self.release_info: android_matches = glob.glob(self.release_info["android"]["dependencies"][dep]["artifact"], root_dir=self.deps_path) - assert len(android_matches) == 1, f"Exactly one archive matches msvc {dep} dependency: {msvc_matches}" + assert len(android_matches) == 1, f"Exactly one archive matches msvc {dep} dependency: {android_matches}" @staticmethod def _arch_to_vs_platform(arch: str, configuration: str="Release") -> VsArchPlatformConfig: @@ -1217,6 +1278,10 @@ def _build_msvc_cmake(self, arch_platform: VsArchPlatformConfig, dep_roots: list platform_context = self.get_context(extra_context=arch_platform.extra_context()) build_type = "Release" + extra_context = { + "ARCH": arch_platform.arch, + "PLATFORM": arch_platform.platform, + } built_paths = set(install_path / configure_text(f, context=platform_context) for file_mapping in (self.release_info["msvc"]["cmake"]["files-lib"], self.release_info["msvc"]["cmake"]["files-devel"]) for files_list in file_mapping.values() for f in files_list) logger.info("CMake builds these files, to be included in the package: %s", built_paths) @@ -1267,7 +1332,7 @@ def _build_msvc_cmake(self, arch_platform: VsArchPlatformConfig, dep_roots: list logger.info("Collecting files...") archive_file_tree = ArchiveFileTree() archive_file_tree.add_file_mapping(arc_dir="", file_mapping=self.release_info["msvc"]["cmake"]["files-lib"], file_mapping_root=install_path, context=platform_context, time=self.arc_time) - archive_file_tree.add_file_mapping(arc_dir="", file_mapping=self.release_info["msvc"]["files-lib"], file_mapping_root=self.root, context=self.get_context(), time=self.arc_time) + archive_file_tree.add_file_mapping(arc_dir="", file_mapping=self.release_info["msvc"]["files-lib"], file_mapping_root=self.root, context=self.get_context(extra_context=extra_context), time=self.arc_time) logger.info("Creating %s", zip_path) with Archiver(zip_path=zip_path) as archiver: @@ -1331,7 +1396,7 @@ def main(argv=None) -> int: parser.add_argument("--actions", choices=["download", "source", "android", "mingw", "msvc", "dmg"], required=True, nargs="+", dest="actions", help="What to do?") parser.set_defaults(loglevel=logging.INFO) parser.add_argument('--vs-year', dest="vs_year", help="Visual Studio year") - parser.add_argument('--android-api', type=int, dest="android_api", help="Android API version") + parser.add_argument('--android-api', dest="android_api", help="Android API version") parser.add_argument('--android-home', dest="android_home", default=os.environ.get("ANDROID_HOME"), help="Android Home folder") parser.add_argument('--android-ndk-home', dest="android_ndk_home", default=os.environ.get("ANDROID_NDK_HOME"), help="Android NDK Home folder") parser.add_argument('--cmake-generator', dest="cmake_generator", default="Ninja", help="CMake Generator") @@ -1458,14 +1523,27 @@ def main(argv=None) -> int: if args.android_api is None: with section_printer.group("Detect Android APIS"): args.android_api = releaser._detect_android_api(android_home=args.android_home) - if args.android_api is None or not (Path(args.android_home) / f"platforms/android-{args.android_api}").is_dir(): + else: + try: + android_api_ints = tuple(int(v) for v in args.android_api.split(".")) + match len(android_api_ints): + case 1: android_api_name = f"android-{android_api_ints[0]}" + case 2: android_api_name = f"android-{android_api_ints[0]}-ext-{android_api_ints[1]}" + case _: raise ValueError + except ValueError: + logger.error("Invalid --android-api, must be a 'X' or 'X.Y' version") + args.android_api = AndroidApiVersion(ints=android_api_ints, name=android_api_name) + if args.android_api is None: parser.error("Invalid --android-api, and/or could not be detected") + android_api_path = Path(args.android_home) / f"platforms/{args.android_api.name}" + if not android_api_path.is_dir(): + logger.warning(f"Android API directory does not exist ({android_api_path})") with section_printer.group("Android arguments"): print(f"android_home = {args.android_home}") print(f"android_ndk_home = {args.android_ndk_home}") print(f"android_api = {args.android_api}") releaser.create_android_archives( - android_api=args.android_api, + android_api=args.android_api.ints[0], android_home=args.android_home, android_ndk_home=args.android_ndk_home, ) From 545549149d608b0bdc19db6ef5a3e6cc5ed71c28 Mon Sep 17 00:00:00 2001 From: Ozkan Sezer Date: Mon, 11 Aug 2025 06:24:32 +0300 Subject: [PATCH 22/48] update vendored flac and vorbis. --- external/flac | 2 +- external/vorbis | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/external/flac b/external/flac index dac59a8e..b9b41b10 160000 --- a/external/flac +++ b/external/flac @@ -1 +1 @@ -Subproject commit dac59a8eb44f2f9f7006b1246bede041dfb18ea0 +Subproject commit b9b41b10b34d037fee6814c2c36373160bd67915 diff --git a/external/vorbis b/external/vorbis index 0cec9a37..ff6b9b12 160000 --- a/external/vorbis +++ b/external/vorbis @@ -1 +1 @@ -Subproject commit 0cec9a37f057a54a1e6b572301aec659d84840c3 +Subproject commit ff6b9b125fdfc04466389d48c2ddd2b3bedd4a79 From cafe851e243636c3ab1396a88cf8ada3105db711 Mon Sep 17 00:00:00 2001 From: Ozkan Sezer Date: Mon, 11 Aug 2025 08:15:56 +0300 Subject: [PATCH 23/48] update vendored ogg. --- external/ogg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/external/ogg b/external/ogg index 7231a568..f35ee015 160000 --- a/external/ogg +++ b/external/ogg @@ -1 +1 @@ -Subproject commit 7231a5687231bad3eb778399ac08b690589db8d4 +Subproject commit f35ee01578587a54609946ba57d473d069854921 From 0aaee4047c359699fb1df4c37684505dd40f7a31 Mon Sep 17 00:00:00 2001 From: Anonymous Maarten Date: Wed, 13 Aug 2025 15:32:01 +0200 Subject: [PATCH 24/48] Update NDK version to 28 --- build-scripts/build-release.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/build-scripts/build-release.py b/build-scripts/build-release.py index b256e4d5..e25bda8c 100755 --- a/build-scripts/build-release.py +++ b/build-scripts/build-release.py @@ -542,9 +542,7 @@ def __init__(self, name: str, ints: tuple[int, ...]): def __repr__(self) -> str: return f"<{self.name} ({'.'.join(str(v) for v in self.ints)})>" -ANDROID_ABI_EXTRA_LINK_OPTIONS = { - "arm64-v8a": "-Wl,-z,max-page-size=16384 -Wl,-z,common-page-size=16384", -} +ANDROID_ABI_EXTRA_LINK_OPTIONS = {} class Releaser: def __init__(self, release_info: dict, commit: str, revision: str, root: Path, dist_path: Path, section_printer: SectionPrinter, executer: Executer, cmake_generator: str, deps_path: Path, overwrite: bool, github: bool, fast: bool): From 02ddf1c4d4145b84463147fe16c493982dc60a9e Mon Sep 17 00:00:00 2001 From: Ozkan Sezer Date: Thu, 28 Aug 2025 11:23:04 +0300 Subject: [PATCH 25/48] update config.guess and config.sub from git://git.sv.gnu.org/config.git --- build-scripts/config.guess | 17 ++++++++++------- build-scripts/config.sub | 28 +++++++++++++++++++--------- 2 files changed, 29 insertions(+), 16 deletions(-) diff --git a/build-scripts/config.guess b/build-scripts/config.guess index 48a68460..a9d01fde 100755 --- a/build-scripts/config.guess +++ b/build-scripts/config.guess @@ -1,10 +1,10 @@ #! /bin/sh # Attempt to guess a canonical system name. -# Copyright 1992-2024 Free Software Foundation, Inc. +# Copyright 1992-2025 Free Software Foundation, Inc. # shellcheck disable=SC2006,SC2268 # see below for rationale -timestamp='2024-07-27' +timestamp='2025-07-10' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -60,7 +60,7 @@ version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. -Copyright 1992-2024 Free Software Foundation, Inc. +Copyright 1992-2025 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -1597,8 +1597,11 @@ EOF *:Unleashed:*:*) GUESS=$UNAME_MACHINE-unknown-unleashed$UNAME_RELEASE ;; - *:Ironclad:*:*) - GUESS=$UNAME_MACHINE-unknown-ironclad + x86_64:[Ii]ronclad:*:*|i?86:[Ii]ronclad:*:*) + GUESS=$UNAME_MACHINE-pc-ironclad-mlibc + ;; + *:[Ii]ronclad:*:*) + GUESS=$UNAME_MACHINE-unknown-ironclad-mlibc ;; esac @@ -1808,8 +1811,8 @@ fi exit 1 # Local variables: -# eval: (add-hook 'before-save-hook 'time-stamp) +# eval: (add-hook 'before-save-hook 'time-stamp nil t) # time-stamp-start: "timestamp='" -# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-format: "%Y-%02m-%02d" # time-stamp-end: "'" # End: diff --git a/build-scripts/config.sub b/build-scripts/config.sub index 4aaae46f..3d35cde1 100755 --- a/build-scripts/config.sub +++ b/build-scripts/config.sub @@ -1,10 +1,10 @@ #! /bin/sh # Configuration validation subroutine script. -# Copyright 1992-2024 Free Software Foundation, Inc. +# Copyright 1992-2025 Free Software Foundation, Inc. # shellcheck disable=SC2006,SC2268,SC2162 # see below for rationale -timestamp='2024-05-27' +timestamp='2025-07-10' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -76,7 +76,7 @@ Report bugs and patches to ." version="\ GNU config.sub ($timestamp) -Copyright 1992-2024 Free Software Foundation, Inc. +Copyright 1992-2025 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -145,6 +145,7 @@ case $1 in | kfreebsd*-gnu* \ | knetbsd*-gnu* \ | kopensolaris*-gnu* \ + | ironclad-* \ | linux-* \ | managarm-* \ | netbsd*-eabi* \ @@ -242,7 +243,6 @@ case $1 in | rombug \ | semi \ | sequent* \ - | siemens \ | sgi* \ | siemens \ | sim \ @@ -261,7 +261,7 @@ case $1 in basic_machine=$field1-$field2 basic_os= ;; - zephyr*) + tock* | zephyr*) basic_machine=$field1-unknown basic_os=$field2 ;; @@ -1194,7 +1194,7 @@ case $cpu-$vendor in xscale-* | xscalee[bl]-*) cpu=`echo "$cpu" | sed 's/^xscale/arm/'` ;; - arm64-* | aarch64le-*) + arm64-* | aarch64le-* | arm64_32-*) cpu=aarch64 ;; @@ -1321,6 +1321,7 @@ case $cpu-$vendor in | i960 \ | ia16 \ | ia64 \ + | intelgt \ | ip2k \ | iq2000 \ | javascript \ @@ -1522,6 +1523,10 @@ EOF kernel=nto os=`echo "$basic_os" | sed -e 's|nto|qnx|'` ;; + ironclad*) + kernel=ironclad + os=`echo "$basic_os" | sed -e 's|ironclad|mlibc|'` + ;; linux*) kernel=linux os=`echo "$basic_os" | sed -e 's|linux|gnu|'` @@ -1976,6 +1981,7 @@ case $os in | atheos* \ | auroraux* \ | aux* \ + | banan_os* \ | beos* \ | bitrig* \ | bme* \ @@ -2022,7 +2028,6 @@ case $os in | ios* \ | iris* \ | irix* \ - | ironclad* \ | isc* \ | its* \ | l4re* \ @@ -2118,6 +2123,7 @@ case $os in | sysv* \ | tenex* \ | tirtos* \ + | tock* \ | toppers* \ | tops10* \ | tops20* \ @@ -2214,6 +2220,8 @@ case $kernel-$os-$obj in ;; uclinux-uclibc*- | uclinux-gnu*- ) ;; + ironclad-mlibc*-) + ;; managarm-mlibc*- | managarm-kernel*- ) ;; windows*-msvc*-) @@ -2249,6 +2257,8 @@ case $kernel-$os-$obj in ;; *-eabi*- | *-gnueabi*-) ;; + ios*-simulator- | tvos*-simulator- | watchos*-simulator- ) + ;; none--*) # None (no kernel, i.e. freestanding / bare metal), # can be paired with an machine code file format @@ -2347,8 +2357,8 @@ echo "$cpu-$vendor${kernel:+-$kernel}${os:+-$os}${obj:+-$obj}" exit # Local variables: -# eval: (add-hook 'before-save-hook 'time-stamp) +# eval: (add-hook 'before-save-hook 'time-stamp nil t) # time-stamp-start: "timestamp='" -# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-format: "%Y-%02m-%02d" # time-stamp-end: "'" # End: From fb1f938cc926e3fc9768e5f2d76c9c8f55859464 Mon Sep 17 00:00:00 2001 From: Ozkan Sezer Date: Tue, 9 Sep 2025 22:04:04 +0300 Subject: [PATCH 26/48] update vendored flac (cherry picked from commit 6c58afbfe84967eaf381b0128af19c97147dfb75) --- external/flac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/external/flac b/external/flac index b9b41b10..bc9fab60 160000 --- a/external/flac +++ b/external/flac @@ -1 +1 @@ -Subproject commit b9b41b10b34d037fee6814c2c36373160bd67915 +Subproject commit bc9fab609b7ce849952099ecf3d7c2af750de0de From ea68955196bd25442e9cc9dae791d214b4148924 Mon Sep 17 00:00:00 2001 From: Ozkan Sezer Date: Wed, 10 Sep 2025 18:25:50 +0300 Subject: [PATCH 27/48] update vendored libmpg123 (cherry picked from commit f486b4caee97a022462b93cbee691b546aa834c3) --- external/mpg123 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/external/mpg123 b/external/mpg123 index e469105b..7c2c0d1e 160000 --- a/external/mpg123 +++ b/external/mpg123 @@ -1 +1 @@ -Subproject commit e469105b399e2996a473835e4cf25aea596ee58a +Subproject commit 7c2c0d1e28b1844292bd6db313d8893d17722a82 From 6e36a368854d5f589d84a18f9407f1adb482b246 Mon Sep 17 00:00:00 2001 From: Ozkan Sezer Date: Wed, 10 Sep 2025 18:24:10 +0300 Subject: [PATCH 28/48] update vendored flac for yasm support Fixes https://github.com/libsdl-org/SDL_mixer/issues/745 (cherry picked from commit 172997758bb69c9217a2caec57bd9450d86dc558) --- external/flac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/external/flac b/external/flac index bc9fab60..86b36086 160000 --- a/external/flac +++ b/external/flac @@ -1 +1 @@ -Subproject commit bc9fab609b7ce849952099ecf3d7c2af750de0de +Subproject commit 86b360863221d0f6957e01d477710759e18ecdbf From 49e988c99c1559fcff828c88f217d4b6dd445d00 Mon Sep 17 00:00:00 2001 From: Ozkan Sezer Date: Tue, 16 Sep 2025 21:28:10 +0300 Subject: [PATCH 29/48] update dr_flac.h from mainstream. --- src/codecs/dr_libs/dr_flac.h | 213 ++++++++++++++++++++++++++--------- 1 file changed, 158 insertions(+), 55 deletions(-) diff --git a/src/codecs/dr_libs/dr_flac.h b/src/codecs/dr_libs/dr_flac.h index d87a0d67..ff0a1306 100644 --- a/src/codecs/dr_libs/dr_flac.h +++ b/src/codecs/dr_libs/dr_flac.h @@ -1,6 +1,6 @@ /* FLAC audio decoder. Choice of public domain or MIT-0. See license statements at the end of this file. -dr_flac - v0.13.0 - 2025-07-23 +dr_flac - v0.13.2 - TBD David Reid - mackron@gmail.com @@ -126,7 +126,7 @@ extern "C" { #define DRFLAC_VERSION_MAJOR 0 #define DRFLAC_VERSION_MINOR 13 -#define DRFLAC_VERSION_REVISION 0 +#define DRFLAC_VERSION_REVISION 2 #define DRFLAC_VERSION_STRING DRFLAC_XSTRINGIFY(DRFLAC_VERSION_MAJOR) "." DRFLAC_XSTRINGIFY(DRFLAC_VERSION_MINOR) "." DRFLAC_XSTRINGIFY(DRFLAC_VERSION_REVISION) #include /* For size_t. */ @@ -331,6 +331,12 @@ typedef struct */ drflac_uint32 type; + /* The size in bytes of the block and the buffer pointed to by pRawData if it's non-NULL. */ + drflac_uint32 rawDataSize; + + /* The offset in the stream of the raw data. */ + drflac_uint64 rawDataOffset; + /* A pointer to the raw data. This points to a temporary buffer so don't hold on to it. It's best to not modify the contents of this buffer. Use the structures below for more meaningful and structured @@ -338,9 +344,6 @@ typedef struct */ const void* pRawData; - /* The size in bytes of the block and the buffer pointed to by pRawData if it's non-NULL. */ - drflac_uint32 rawDataSize; - union { drflac_streaminfo streaminfo; @@ -392,6 +395,7 @@ typedef struct drflac_uint32 colorDepth; drflac_uint32 indexColorCount; drflac_uint32 pictureDataSize; + drflac_uint64 pictureDataOffset; /* Offset from the start of the stream. */ const drflac_uint8* pPictureData; } picture; } data; @@ -6434,8 +6438,9 @@ static drflac_bool32 drflac__read_and_decode_metadata(drflac_read_proc onRead, d runningFilePos += 4; metadata.type = blockType; - metadata.pRawData = NULL; metadata.rawDataSize = 0; + metadata.rawDataOffset = runningFilePos; + metadata.pRawData = NULL; switch (blockType) { @@ -6712,59 +6717,149 @@ static drflac_bool32 drflac__read_and_decode_metadata(drflac_read_proc onRead, d } if (onMeta) { - void* pRawData; - const char* pRunningData; - const char* pRunningDataEnd; + drflac_bool32 result = DRFLAC_TRUE; + drflac_uint32 blockSizeRemaining = blockSize; + char* pMime = NULL; + char* pDescription = NULL; + void* pPictureData = NULL; + + if (blockSizeRemaining < 4 || onRead(pUserData, &metadata.data.picture.type, 4) != 4) { + result = DRFLAC_FALSE; + goto done_flac; + } + blockSizeRemaining -= 4; + metadata.data.picture.type = drflac__be2host_32(metadata.data.picture.type); - pRawData = drflac__malloc_from_callbacks(blockSize, pAllocationCallbacks); - if (pRawData == NULL) { - return DRFLAC_FALSE; + + if (blockSizeRemaining < 4 || onRead(pUserData, &metadata.data.picture.mimeLength, 4) != 4) { + result = DRFLAC_FALSE; + goto done_flac; } + blockSizeRemaining -= 4; + metadata.data.picture.mimeLength = drflac__be2host_32(metadata.data.picture.mimeLength); - if (onRead(pUserData, pRawData, blockSize) != blockSize) { - drflac__free_from_callbacks(pRawData, pAllocationCallbacks); - return DRFLAC_FALSE; + pMime = (char*)drflac__malloc_from_callbacks(metadata.data.picture.mimeLength + 1, pAllocationCallbacks); /* +1 for null terminator. */ + if (pMime == NULL) { + result = DRFLAC_FALSE; + goto done_flac; } - metadata.pRawData = pRawData; - metadata.rawDataSize = blockSize; + if (blockSizeRemaining < metadata.data.picture.mimeLength || onRead(pUserData, pMime, metadata.data.picture.mimeLength) != metadata.data.picture.mimeLength) { + result = DRFLAC_FALSE; + goto done_flac; + } + blockSizeRemaining -= metadata.data.picture.mimeLength; + pMime[metadata.data.picture.mimeLength] = '\0'; /* Null terminate for safety. */ + metadata.data.picture.mime = (const char*)pMime; - pRunningData = (const char*)pRawData; - pRunningDataEnd = (const char*)pRawData + blockSize; - metadata.data.picture.type = drflac__be2host_32_ptr_unaligned(pRunningData); pRunningData += 4; - metadata.data.picture.mimeLength = drflac__be2host_32_ptr_unaligned(pRunningData); pRunningData += 4; + if (blockSizeRemaining < 4 || onRead(pUserData, &metadata.data.picture.descriptionLength, 4) != 4) { + result = DRFLAC_FALSE; + goto done_flac; + } + blockSizeRemaining -= 4; + metadata.data.picture.descriptionLength = drflac__be2host_32(metadata.data.picture.descriptionLength); - /* Need space for the rest of the block */ - if ((pRunningDataEnd - pRunningData) - 24 < (drflac_int64)metadata.data.picture.mimeLength) { /* <-- Note the order of operations to avoid overflow to a valid value */ - drflac__free_from_callbacks(pRawData, pAllocationCallbacks); - return DRFLAC_FALSE; + pDescription = (char*)drflac__malloc_from_callbacks(metadata.data.picture.descriptionLength + 1, pAllocationCallbacks); /* +1 for null terminator. */ + if (pDescription == NULL) { + result = DRFLAC_FALSE; + goto done_flac; } - metadata.data.picture.mime = pRunningData; pRunningData += metadata.data.picture.mimeLength; - metadata.data.picture.descriptionLength = drflac__be2host_32_ptr_unaligned(pRunningData); pRunningData += 4; - /* Need space for the rest of the block */ - if ((pRunningDataEnd - pRunningData) - 20 < (drflac_int64)metadata.data.picture.descriptionLength) { /* <-- Note the order of operations to avoid overflow to a valid value */ - drflac__free_from_callbacks(pRawData, pAllocationCallbacks); - return DRFLAC_FALSE; + if (blockSizeRemaining < metadata.data.picture.descriptionLength || onRead(pUserData, pDescription, metadata.data.picture.descriptionLength) != metadata.data.picture.descriptionLength) { + result = DRFLAC_FALSE; + goto done_flac; } - metadata.data.picture.description = pRunningData; pRunningData += metadata.data.picture.descriptionLength; - metadata.data.picture.width = drflac__be2host_32_ptr_unaligned(pRunningData); pRunningData += 4; - metadata.data.picture.height = drflac__be2host_32_ptr_unaligned(pRunningData); pRunningData += 4; - metadata.data.picture.colorDepth = drflac__be2host_32_ptr_unaligned(pRunningData); pRunningData += 4; - metadata.data.picture.indexColorCount = drflac__be2host_32_ptr_unaligned(pRunningData); pRunningData += 4; - metadata.data.picture.pictureDataSize = drflac__be2host_32_ptr_unaligned(pRunningData); pRunningData += 4; - metadata.data.picture.pPictureData = (const drflac_uint8*)pRunningData; - - /* Need space for the picture after the block */ - if (pRunningDataEnd - pRunningData < (drflac_int64)metadata.data.picture.pictureDataSize) { /* <-- Note the order of operations to avoid overflow to a valid value */ - drflac__free_from_callbacks(pRawData, pAllocationCallbacks); - return DRFLAC_FALSE; + blockSizeRemaining -= metadata.data.picture.descriptionLength; + pDescription[metadata.data.picture.descriptionLength] = '\0'; /* Null terminate for safety. */ + metadata.data.picture.description = (const char*)pDescription; + + + if (blockSizeRemaining < 4 || onRead(pUserData, &metadata.data.picture.width, 4) != 4) { + result = DRFLAC_FALSE; + goto done_flac; } + blockSizeRemaining -= 4; + metadata.data.picture.width = drflac__be2host_32(metadata.data.picture.width); - onMeta(pUserDataMD, &metadata); + if (blockSizeRemaining < 4 || onRead(pUserData, &metadata.data.picture.height, 4) != 4) { + result = DRFLAC_FALSE; + goto done_flac; + } + blockSizeRemaining -= 4; + metadata.data.picture.height = drflac__be2host_32(metadata.data.picture.height); - drflac__free_from_callbacks(pRawData, pAllocationCallbacks); + if (blockSizeRemaining < 4 || onRead(pUserData, &metadata.data.picture.colorDepth, 4) != 4) { + result = DRFLAC_FALSE; + goto done_flac; + } + blockSizeRemaining -= 4; + metadata.data.picture.colorDepth = drflac__be2host_32(metadata.data.picture.colorDepth); + + if (blockSizeRemaining < 4 || onRead(pUserData, &metadata.data.picture.indexColorCount, 4) != 4) { + result = DRFLAC_FALSE; + goto done_flac; + } + blockSizeRemaining -= 4; + metadata.data.picture.indexColorCount = drflac__be2host_32(metadata.data.picture.indexColorCount); + + + /* Picture data. */ + if (blockSizeRemaining < 4 || onRead(pUserData, &metadata.data.picture.pictureDataSize, 4) != 4) { + result = DRFLAC_FALSE; + goto done_flac; + } + blockSizeRemaining -= 4; + metadata.data.picture.pictureDataSize = drflac__be2host_32(metadata.data.picture.pictureDataSize); + + if (blockSizeRemaining < metadata.data.picture.pictureDataSize) { + result = DRFLAC_FALSE; + goto done_flac; + } + + /* For the actual image data we want to store the offset to the start of the stream. */ + metadata.data.picture.pictureDataOffset = runningFilePos + (blockSize - blockSizeRemaining); + + /* + For the allocation of image data, we can allow memory allocation to fail, in which case we just leave + the pointer as null. If it fails, we need to fall back to seeking past the image data. + */ + #ifndef DR_FLAC_NO_PICTURE_METADATA_MALLOC + pPictureData = drflac__malloc_from_callbacks(metadata.data.picture.pictureDataSize, pAllocationCallbacks); + if (pPictureData != NULL) { + if (onRead(pUserData, pPictureData, metadata.data.picture.pictureDataSize) != metadata.data.picture.pictureDataSize) { + result = DRFLAC_FALSE; + goto done_flac; + } + } else + #endif + { + /* Allocation failed. We need to seek past the picture data. */ + if (!onSeek(pUserData, metadata.data.picture.pictureDataSize, DRFLAC_SEEK_CUR)) { + result = DRFLAC_FALSE; + goto done_flac; + } + } + + blockSizeRemaining -= metadata.data.picture.pictureDataSize; + metadata.data.picture.pPictureData = (const drflac_uint8*)pPictureData; + + + /* Only fire the callback if we actually have a way to read the image data. We must have either a valid offset, or a valid data pointer. */ + if (metadata.data.picture.pictureDataOffset != 0 || metadata.data.picture.pPictureData != NULL) { + onMeta(pUserDataMD, &metadata); + } else { + /* Don't have a valid offset or data pointer, so just pretend we don't have a picture metadata. */ + } + + done_flac: + drflac__free_from_callbacks(pMime, pAllocationCallbacks); + drflac__free_from_callbacks(pDescription, pAllocationCallbacks); + drflac__free_from_callbacks(pPictureData, pAllocationCallbacks); + + if (result != DRFLAC_TRUE) { + return DRFLAC_FALSE; + } } } break; @@ -6800,13 +6895,16 @@ static drflac_bool32 drflac__read_and_decode_metadata(drflac_read_proc onRead, d */ if (onMeta) { void* pRawData = drflac__malloc_from_callbacks(blockSize, pAllocationCallbacks); - if (pRawData == NULL) { - return DRFLAC_FALSE; - } - - if (onRead(pUserData, pRawData, blockSize) != blockSize) { - drflac__free_from_callbacks(pRawData, pAllocationCallbacks); - return DRFLAC_FALSE; + if (pRawData != NULL) { + if (onRead(pUserData, pRawData, blockSize) != blockSize) { + drflac__free_from_callbacks(pRawData, pAllocationCallbacks); + return DRFLAC_FALSE; + } + } else { + /* Allocation failed. We need to seek past the block. */ + if (!onSeek(pUserData, blockSize, DRFLAC_SEEK_CUR)) { + return DRFLAC_FALSE; + } } metadata.pRawData = pRawData; @@ -8699,7 +8797,7 @@ static drflac_bool32 drflac__on_tell_stdio(void* pUserData, drflac_int64* pCurso DRFLAC_ASSERT(pFileStdio != NULL); DRFLAC_ASSERT(pCursor != NULL); -#if defined(_WIN32) +#if defined(_WIN32) && !defined(NXDK) #if defined(_MSC_VER) && _MSC_VER > 1200 result = _ftelli64(pFileStdio); #else @@ -8821,8 +8919,6 @@ static drflac_bool32 drflac__on_seek_memory(void* pUserData, int offset, drflac_ DRFLAC_ASSERT(memoryStream != NULL); - newCursor = memoryStream->currentReadPos; - if (origin == DRFLAC_SEEK_SET) { newCursor = 0; } else if (origin == DRFLAC_SEEK_CUR) { @@ -12077,6 +12173,13 @@ DRFLAC_API drflac_bool32 drflac_next_cuesheet_track(drflac_cuesheet_track_iterat /* REVISION HISTORY ================ +v0.13.2 - TBD + - Improve robustness of the parsing of picture metadata to improve support for memory constrained embedded devices. + - Fix a warning about an assigned by unused variable. + +v0.13.1 - 2025-09-10 + - Fix an error with the NXDK build. + v0.13.0 - 2025-07-23 - API CHANGE: Seek origin enums have been renamed to match the naming convention used by other dr_libs libraries: - drflac_seek_origin_start -> DRFLAC_SEEK_SET From b6bf7e9be754750cae16e0cced8d01d20afa406a Mon Sep 17 00:00:00 2001 From: Ozkan Sezer Date: Thu, 23 Oct 2025 03:02:02 +0300 Subject: [PATCH 30/48] update dr_flac.h from mainstream. --- src/codecs/dr_libs/dr_flac.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/codecs/dr_libs/dr_flac.h b/src/codecs/dr_libs/dr_flac.h index ff0a1306..a5778820 100644 --- a/src/codecs/dr_libs/dr_flac.h +++ b/src/codecs/dr_libs/dr_flac.h @@ -2732,7 +2732,7 @@ static DRFLAC_INLINE drflac_uint32 drflac__clz_lzcnt(drflac_cache_t x) return r; } - #elif defined(DRFLAC_ARM) && (defined(__ARM_ARCH) && __ARM_ARCH >= 5) && !defined(__ARM_ARCH_6M__) && !defined(DRFLAC_64BIT) /* <-- I haven't tested 64-bit inline assembly, so only enabling this for the 32-bit build for now. */ + #elif defined(DRFLAC_ARM) && (defined(__ARM_ARCH) && __ARM_ARCH >= 5) && !defined(__ARM_ARCH_6M__) && !(defined(__thumb__) && !defined(__thumb2__)) && !defined(DRFLAC_64BIT) /* <-- I haven't tested 64-bit inline assembly, so only enabling this for the 32-bit build for now. */ { unsigned int r; __asm__ __volatile__ ( From 07568698fe5abafa5ed54def8f8dccac64ee9dc1 Mon Sep 17 00:00:00 2001 From: Anonymous Maarten Date: Wed, 29 Oct 2025 20:40:03 +0100 Subject: [PATCH 31/48] cmake: don't clear CMAKE_MODULE_PATH in SDL2_mixerConfig.cmake --- SDL2_mixerConfig.cmake.in | 6 ------ 1 file changed, 6 deletions(-) diff --git a/SDL2_mixerConfig.cmake.in b/SDL2_mixerConfig.cmake.in index 6cd95ba2..5ac3e57d 100644 --- a/SDL2_mixerConfig.cmake.in +++ b/SDL2_mixerConfig.cmake.in @@ -54,9 +54,6 @@ if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/SDL2_mixer-shared-targets.cmake") endif() if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/SDL2_mixer-static-targets.cmake") - set(_sdl_cmake_module_path "${CMAKE_MODULE_PATH}") - list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}") - include(CMakeFindDependencyMacro) include(PkgConfigHelper) @@ -108,9 +105,6 @@ if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/SDL2_mixer-static-targets.cmake") find_dependency(wavpack) endif() - set(CMAKE_MODULE_PATH "${_sdl_cmake_module_path}") - unset(_sdl_cmake_module_path) - if((NOT SDL2MIXER_VENDORED AND SDL2MIXER_MOD_MODPLUG) OR (HAIKU AND SDL2MIXER_MIDI_NATIVE)) include(CheckLanguage) check_language(CXX) From a9c17369b01b099e02a127943d9a3bb03adbf53f Mon Sep 17 00:00:00 2001 From: Anonymous Maarten Date: Wed, 29 Oct 2025 20:51:32 +0100 Subject: [PATCH 32/48] cmake: CMAKE_MODULE_PATH only needs to be modified when using a static SDL2_mixer --- SDL2_mixerConfig.cmake.in | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/SDL2_mixerConfig.cmake.in b/SDL2_mixerConfig.cmake.in index 5ac3e57d..f4d5e351 100644 --- a/SDL2_mixerConfig.cmake.in +++ b/SDL2_mixerConfig.cmake.in @@ -43,17 +43,14 @@ set(SDL2MIXER_WAVE @SDL2MIXER_WAVE@) set(SDL2MIXER_WAVPACK @SDL2MIXER_WAVPACK@) set(SDL2MIXER_SDL2_REQUIRED_VERSION @SDL_REQUIRED_VERSION@) - -if(NOT SDL2MIXER_VENDORED) - set(_sdl_cmake_module_path "${CMAKE_MODULE_PATH}") - list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}") -endif() - if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/SDL2_mixer-shared-targets.cmake") include("${CMAKE_CURRENT_LIST_DIR}/SDL2_mixer-shared-targets.cmake") endif() if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/SDL2_mixer-static-targets.cmake") + set(_sdl_cmake_module_path "${CMAKE_MODULE_PATH}") + list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}") + include(CMakeFindDependencyMacro) include(PkgConfigHelper) @@ -113,9 +110,7 @@ if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/SDL2_mixer-static-targets.cmake") endif() endif() include("${CMAKE_CURRENT_LIST_DIR}/SDL2_mixer-static-targets.cmake") -endif() -if(NOT SDL2MIXER_VENDORED) set(CMAKE_MODULE_PATH "${_sdl_cmake_module_path}") unset(_sdl_cmake_module_path) endif() From 3ecc5f37c2a394a0e36311d9283410a9254744f5 Mon Sep 17 00:00:00 2001 From: Ozkan Sezer Date: Mon, 1 Dec 2025 14:04:02 +0300 Subject: [PATCH 33/48] update to latest dr_flac from mainstream (cherry picked from commit 7d6e46ad28cc33ad1e87a46df739a7cba47f57fa) --- src/codecs/dr_libs/dr_flac.h | 66 ++++++++++++++---------------------- 1 file changed, 26 insertions(+), 40 deletions(-) diff --git a/src/codecs/dr_libs/dr_flac.h b/src/codecs/dr_libs/dr_flac.h index a5778820..c36c5515 100644 --- a/src/codecs/dr_libs/dr_flac.h +++ b/src/codecs/dr_libs/dr_flac.h @@ -11798,58 +11798,43 @@ static type* drflac__full_read_and_close_ ## extension (drflac* pFlac, unsigned { \ type* pSampleData = NULL; \ drflac_uint64 totalPCMFrameCount; \ + type buffer[4096]; \ + drflac_uint64 pcmFramesRead; \ + size_t sampleDataBufferSize = sizeof(buffer); \ \ DRFLAC_ASSERT(pFlac != NULL); \ \ - totalPCMFrameCount = pFlac->totalPCMFrameCount; \ + totalPCMFrameCount = 0; \ \ - if (totalPCMFrameCount == 0) { \ - type buffer[4096]; \ - drflac_uint64 pcmFramesRead; \ - size_t sampleDataBufferSize = sizeof(buffer); \ - \ - pSampleData = (type*)drflac__malloc_from_callbacks(sampleDataBufferSize, &pFlac->allocationCallbacks); \ - if (pSampleData == NULL) { \ - goto on_error; \ - } \ - \ - while ((pcmFramesRead = (drflac_uint64)drflac_read_pcm_frames_##extension(pFlac, sizeof(buffer)/sizeof(buffer[0])/pFlac->channels, buffer)) > 0) { \ - if (((totalPCMFrameCount + pcmFramesRead) * pFlac->channels * sizeof(type)) > sampleDataBufferSize) { \ - type* pNewSampleData; \ - size_t newSampleDataBufferSize; \ + pSampleData = (type*)drflac__malloc_from_callbacks(sampleDataBufferSize, &pFlac->allocationCallbacks); \ + if (pSampleData == NULL) { \ + goto on_error; \ + } \ \ - newSampleDataBufferSize = sampleDataBufferSize * 2; \ - pNewSampleData = (type*)drflac__realloc_from_callbacks(pSampleData, newSampleDataBufferSize, sampleDataBufferSize, &pFlac->allocationCallbacks); \ - if (pNewSampleData == NULL) { \ - drflac__free_from_callbacks(pSampleData, &pFlac->allocationCallbacks); \ - goto on_error; \ - } \ + while ((pcmFramesRead = (drflac_uint64)drflac_read_pcm_frames_##extension(pFlac, sizeof(buffer)/sizeof(buffer[0])/pFlac->channels, buffer)) > 0) { \ + if (((totalPCMFrameCount + pcmFramesRead) * pFlac->channels * sizeof(type)) > sampleDataBufferSize) { \ + type* pNewSampleData; \ + size_t newSampleDataBufferSize; \ \ - sampleDataBufferSize = newSampleDataBufferSize; \ - pSampleData = pNewSampleData; \ + newSampleDataBufferSize = sampleDataBufferSize * 2; \ + pNewSampleData = (type*)drflac__realloc_from_callbacks(pSampleData, newSampleDataBufferSize, sampleDataBufferSize, &pFlac->allocationCallbacks); \ + if (pNewSampleData == NULL) { \ + drflac__free_from_callbacks(pSampleData, &pFlac->allocationCallbacks); \ + goto on_error; \ } \ \ - DRFLAC_COPY_MEMORY(pSampleData + (totalPCMFrameCount*pFlac->channels), buffer, (size_t)(pcmFramesRead*pFlac->channels*sizeof(type))); \ - totalPCMFrameCount += pcmFramesRead; \ + sampleDataBufferSize = newSampleDataBufferSize; \ + pSampleData = pNewSampleData; \ } \ \ - /* At this point everything should be decoded, but we just want to fill the unused part buffer with silence - need to \ - protect those ears from random noise! */ \ - DRFLAC_ZERO_MEMORY(pSampleData + (totalPCMFrameCount*pFlac->channels), (size_t)(sampleDataBufferSize - totalPCMFrameCount*pFlac->channels*sizeof(type))); \ - } else { \ - drflac_uint64 dataSize = totalPCMFrameCount*pFlac->channels*sizeof(type); \ - if (dataSize > (drflac_uint64)DRFLAC_SIZE_MAX) { \ - goto on_error; /* The decoded data is too big. */ \ - } \ - \ - pSampleData = (type*)drflac__malloc_from_callbacks((size_t)dataSize, &pFlac->allocationCallbacks); /* <-- Safe cast as per the check above. */ \ - if (pSampleData == NULL) { \ - goto on_error; \ - } \ - \ - totalPCMFrameCount = drflac_read_pcm_frames_##extension(pFlac, pFlac->totalPCMFrameCount, pSampleData); \ + DRFLAC_COPY_MEMORY(pSampleData + (totalPCMFrameCount*pFlac->channels), buffer, (size_t)(pcmFramesRead*pFlac->channels*sizeof(type))); \ + totalPCMFrameCount += pcmFramesRead; \ } \ \ + /* At this point everything should be decoded, but we just want to fill the unused part buffer with silence - need to \ + protect those ears from random noise! */ \ + DRFLAC_ZERO_MEMORY(pSampleData + (totalPCMFrameCount*pFlac->channels), (size_t)(sampleDataBufferSize - totalPCMFrameCount*pFlac->channels*sizeof(type))); \ + \ if (sampleRateOut) *sampleRateOut = pFlac->sampleRate; \ if (channelsOut) *channelsOut = pFlac->channels; \ if (totalPCMFrameCountOut) *totalPCMFrameCountOut = totalPCMFrameCount; \ @@ -12176,6 +12161,7 @@ REVISION HISTORY v0.13.2 - TBD - Improve robustness of the parsing of picture metadata to improve support for memory constrained embedded devices. - Fix a warning about an assigned by unused variable. + - Improvements to drflac_open_and_read_pcm_frames_*() and family to avoid excessively large memory allocations from malformed files. v0.13.1 - 2025-09-10 - Fix an error with the NXDK build. From 0610da571ce22c93ef7cdd11660e6edfa076faf3 Mon Sep 17 00:00:00 2001 From: Ozkan Sezer Date: Tue, 9 Dec 2025 03:25:56 +0300 Subject: [PATCH 34/48] update vendored mpg123 for SIZEOF_OFF_T issues --- external/mpg123 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/external/mpg123 b/external/mpg123 index 7c2c0d1e..e1938431 160000 --- a/external/mpg123 +++ b/external/mpg123 @@ -1 +1 @@ -Subproject commit 7c2c0d1e28b1844292bd6db313d8893d17722a82 +Subproject commit e1938431b1a9fcc62aadd67590efb6a6dabcaca3 From de722cb68108413db06b3ddb5af5e86a489611ac Mon Sep 17 00:00:00 2001 From: Ozkan Sezer Date: Wed, 10 Dec 2025 01:33:14 +0300 Subject: [PATCH 35/48] update vendored wavpack. --- external/wavpack | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/external/wavpack b/external/wavpack index 532b786d..7ede03e0 160000 --- a/external/wavpack +++ b/external/wavpack @@ -1 +1 @@ -Subproject commit 532b786d9609855509e77c9b992c7bc4e2486be4 +Subproject commit 7ede03e0df6901eea2f5d056e0c894c9b39a4a6f From d66f44c677c4611b410040a150bb3bab1a407b95 Mon Sep 17 00:00:00 2001 From: Ozkan Sezer Date: Wed, 10 Dec 2025 20:39:32 +0300 Subject: [PATCH 36/48] update vendored wavpack. --- external/wavpack | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/external/wavpack b/external/wavpack index 7ede03e0..112a5641 160000 --- a/external/wavpack +++ b/external/wavpack @@ -1 +1 @@ -Subproject commit 7ede03e0df6901eea2f5d056e0c894c9b39a4a6f +Subproject commit 112a56419d45dd4bf0f80f6ca89989c574262580 From 845e7426ae2612b03358df00fb1e4bd9bc890c2f Mon Sep 17 00:00:00 2001 From: Ozkan Sezer Date: Tue, 16 Dec 2025 20:30:20 +0300 Subject: [PATCH 37/48] update to latest dr_flac from mainstream --- src/codecs/dr_libs/dr_flac.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/codecs/dr_libs/dr_flac.h b/src/codecs/dr_libs/dr_flac.h index c36c5515..c95a78c3 100644 --- a/src/codecs/dr_libs/dr_flac.h +++ b/src/codecs/dr_libs/dr_flac.h @@ -1,6 +1,6 @@ /* FLAC audio decoder. Choice of public domain or MIT-0. See license statements at the end of this file. -dr_flac - v0.13.2 - TBD +dr_flac - v0.13.2 - 2025-12-02 David Reid - mackron@gmail.com @@ -12158,7 +12158,7 @@ DRFLAC_API drflac_bool32 drflac_next_cuesheet_track(drflac_cuesheet_track_iterat /* REVISION HISTORY ================ -v0.13.2 - TBD +v0.13.2 - 2025-12-02 - Improve robustness of the parsing of picture metadata to improve support for memory constrained embedded devices. - Fix a warning about an assigned by unused variable. - Improvements to drflac_open_and_read_pcm_frames_*() and family to avoid excessively large memory allocations from malformed files. From c16689e3f234b05d8a3a12db118d6d37b8d2f17b Mon Sep 17 00:00:00 2001 From: Ozkan Sezer Date: Thu, 18 Dec 2025 21:35:50 +0300 Subject: [PATCH 38/48] update vendored libxmp and libgme (cherry picked from commit c0994b42f4862d30c74005d49aa849f983c94e13) --- external/libgme | 2 +- external/libxmp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/external/libgme b/external/libgme index f7216c15..8ebb4f65 160000 --- a/external/libgme +++ b/external/libgme @@ -1 +1 @@ -Subproject commit f7216c15bda1dccdaecab56d47810802b6f0e218 +Subproject commit 8ebb4f65096fdf980b39be2283699d523ddc09af diff --git a/external/libxmp b/external/libxmp index ce107d52..1e4b00d6 160000 --- a/external/libxmp +++ b/external/libxmp @@ -1 +1 @@ -Subproject commit ce107d522ee1bd40331b5cba8f81a0aeaf7e1008 +Subproject commit 1e4b00d677c217ba303ffaa4f5d4a0e6a0cbf22c From 95402d6ce6d2438cc60c4863167922c14fe0d483 Mon Sep 17 00:00:00 2001 From: Ozkan Sezer Date: Thu, 18 Dec 2025 23:05:40 +0300 Subject: [PATCH 39/48] update timidity.tar.gz url in README file. --- README.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.txt b/README.txt index 0a62a6ab..b853164e 100644 --- a/README.txt +++ b/README.txt @@ -15,7 +15,7 @@ If you have built with FluidSynth support, you'll need to set the SDL_SOUNDFONTS (On some Linux distributions you can install the fluid-soundfont-gm package) To play MIDI files using Timidity, you'll need to get a complete set of GUS patches from: -http://www.libsdl.org/projects/mixer/timidity/timidity.tar.gz +https://www.libsdl.org/projects/old/SDL_mixer/timidity/timidity.tar.gz and unpack them in /usr/local/lib under UNIX, and C:\ under Win32. This library is under the zlib license, see the file "LICENSE.txt" for details. From 8634f8bb8f41bb5e59aa675738d1332859148159 Mon Sep 17 00:00:00 2001 From: Ozkan Sezer Date: Sun, 21 Dec 2025 11:15:04 +0300 Subject: [PATCH 40/48] bump vendored opusfile (cherry picked from commit ddaf5af8d73c8381f9ec98681c5cc56422497c3b) --- .gitmodules | 2 +- external/opusfile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitmodules b/.gitmodules index 055e9628..969f1e08 100644 --- a/.gitmodules +++ b/.gitmodules @@ -17,7 +17,7 @@ [submodule "external/opusfile"] path = external/opusfile url = https://github.com/libsdl-org/opusfile.git - branch = v0.12-SDL + branch = v0.13-git-SDL [submodule "external/tremor"] path = external/tremor url = https://github.com/libsdl-org/tremor.git diff --git a/external/opusfile b/external/opusfile index d820a66a..7d26ff56 160000 --- a/external/opusfile +++ b/external/opusfile @@ -1 +1 @@ -Subproject commit d820a66af7ba7fdda346b5b439baca9a2f04dd7f +Subproject commit 7d26ff56278aa6cd7f2a5046498932e838f0ea3a From e097e5113ef562930a695f3b5f5e106c1e5f52c5 Mon Sep 17 00:00:00 2001 From: Ozkan Sezer Date: Sun, 21 Dec 2025 11:13:02 +0300 Subject: [PATCH 41/48] bump vendored opus (cherry picked from commit 2ae577ff49569334d8856ddb5d6a40c39038ef61) --- .gitmodules | 2 +- external/opus | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitmodules b/.gitmodules index 969f1e08..3e31df3d 100644 --- a/.gitmodules +++ b/.gitmodules @@ -13,7 +13,7 @@ [submodule "external/opus"] path = external/opus url = https://github.com/libsdl-org/opus.git - branch = v1.4-SDL + branch = v1.4.x-SDL [submodule "external/opusfile"] path = external/opusfile url = https://github.com/libsdl-org/opusfile.git diff --git a/external/opus b/external/opus index 123a9faf..e6fd7f5d 160000 --- a/external/opus +++ b/external/opus @@ -1 +1 @@ -Subproject commit 123a9faf5598ceef6fcb6d44bbadc4f9469945a6 +Subproject commit e6fd7f5d1fe41d36033980efe2809d8c2cc0f320 From defaefc06e2c5ba22901ee3a2c068fc76d5a0b4f Mon Sep 17 00:00:00 2001 From: Ozkan Sezer Date: Sun, 21 Dec 2025 14:01:50 +0300 Subject: [PATCH 42/48] MSVC project: updated opus, opusfile and wavpack dll builds. --- VisualC/external/include/opus/opusfile.h | 155 ++++++++---------- .../external/optional/x64/LICENSE.opus.txt | 4 - .../optional/x64/LICENSE.opusfile.txt | 4 - VisualC/external/optional/x64/libopus-0.dll | Bin 370176 -> 367616 bytes .../external/optional/x64/libopusfile-0.dll | Bin 51200 -> 48640 bytes .../external/optional/x64/libwavpack-1.dll | Bin 175616 -> 171520 bytes .../external/optional/x86/LICENSE.opus.txt | 4 - .../optional/x86/LICENSE.opusfile.txt | 4 - VisualC/external/optional/x86/libopus-0.dll | Bin 348672 -> 347136 bytes .../external/optional/x86/libopusfile-0.dll | Bin 51712 -> 51200 bytes .../external/optional/x86/libwavpack-1.dll | Bin 167936 -> 165376 bytes 11 files changed, 71 insertions(+), 100 deletions(-) diff --git a/VisualC/external/include/opus/opusfile.h b/VisualC/external/include/opus/opusfile.h index 296d8d9a..ffc7abb9 100644 --- a/VisualC/external/include/opus/opusfile.h +++ b/VisualC/external/include/opus/opusfile.h @@ -147,18 +147,18 @@ typedef struct OggOpusFile OggOpusFile; /**@endcond*/ /**\defgroup error_codes Error Codes*/ -/*@{*/ +/**@{*/ /**\name List of possible error codes Many of the functions in this library return a negative error code when a function fails. This list provides a brief explanation of the common errors. See each individual function for more details on what a specific error code means in that context.*/ -/*@{*/ +/**@{*/ /**A request did not succeed.*/ #define OP_FALSE (-1) -/*Currently not used externally.*/ +/**Currently not used externally.**/ #define OP_EOF (-2) /**There was a hole in the page sequence numbers (e.g., a page was corrupt or missing).*/ @@ -185,7 +185,7 @@ typedef struct OggOpusFile OggOpusFile; #define OP_EBADHEADER (-133) /**The ID header contained an unrecognized version number.*/ #define OP_EVERSION (-134) -/*Currently not used at all.*/ +/**Currently not used at all.**/ #define OP_ENOTAUDIO (-135) /**An audio packet failed to decode properly. This is usually caused by a multistream Ogg packet where the durations of @@ -200,11 +200,11 @@ typedef struct OggOpusFile OggOpusFile; /**The first or last granule position of a link failed basic validity checks.*/ #define OP_EBADTIMESTAMP (-139) -/*@}*/ -/*@}*/ +/**@}*/ +/**@}*/ /**\defgroup header_info Header Information*/ -/*@{*/ +/**@{*/ /**The maximum number of channels in an Ogg Opus stream.*/ #define OPUS_CHANNEL_COUNT_MAX (255) @@ -311,7 +311,7 @@ struct OpusTags{ }; /**\name Picture tag image formats*/ -/*@{*/ +/**@{*/ /**The MIME type was not recognized, or the image data did not match the declared MIME type.*/ @@ -325,7 +325,7 @@ struct OpusTags{ /**The image is a GIF.*/ #define OP_PIC_FORMAT_GIF (3) -/*@}*/ +/**@}*/ /**The contents of a METADATA_BLOCK_PICTURE tag.*/ struct OpusPictureTag{ @@ -398,7 +398,7 @@ struct OpusPictureTag{ These can be used to query the headers returned by libopusfile, or to parse Opus headers from sources other than an Ogg Opus stream, provided they use the same format.*/ -/*@{*/ +/**@{*/ /**Parses the contents of the ID header packet of an Ogg Opus stream. \param[out] _head Returns the contents of the parsed packet. @@ -671,12 +671,12 @@ void opus_picture_tag_init(OpusPictureTag *_pic) OP_ARG_NONNULL(1); \param _pic The #OpusPictureTag structure to clear.*/ void opus_picture_tag_clear(OpusPictureTag *_pic) OP_ARG_NONNULL(1); -/*@}*/ +/**@}*/ -/*@}*/ +/**@}*/ /**\defgroup url_options URL Reading Options*/ -/*@{*/ +/**@{*/ /**\name URL reading options Options for op_url_stream_create() and associated functions. These allow you to provide proxy configuration parameters, skip SSL @@ -685,7 +685,7 @@ void opus_picture_tag_clear(OpusPictureTag *_pic) OP_ARG_NONNULL(1); times, only the value specified by the last occurrence has an effect (unless otherwise specified). They may be expanded in the future.*/ -/*@{*/ +/**@{*/ /**@cond PRIVATE*/ @@ -843,11 +843,11 @@ void opus_server_info_clear(OpusServerInfo *_info) OP_ARG_NONNULL(1); #define OP_GET_SERVER_INFO(_info) \ OP_URL_OPT(OP_GET_SERVER_INFO_REQUEST),OP_CHECK_SERVER_INFO_PTR(_info) -/*@}*/ -/*@}*/ +/**@}*/ +/**@}*/ /**\defgroup stream_callbacks Abstract Stream Reading Interface*/ -/*@{*/ +/**@{*/ /**\name Functions for reading from streams These functions define the interface used to read from and seek in a stream of data. @@ -856,7 +856,7 @@ void opus_server_info_clear(OpusServerInfo *_info) OP_ARG_NONNULL(1); These functions also include some convenience routines for working with standard FILE pointers, complete streams stored in a single block of memory, or URLs.*/ -/*@{*/ +/**@{*/ /**Reads up to \a _nbytes bytes of data from \a _stream. \param _stream The stream to read from. @@ -1034,18 +1034,18 @@ OP_WARN_UNUSED_RESULT void *op_url_stream_vcreate(OpusFileCallbacks *_cb, OP_WARN_UNUSED_RESULT void *op_url_stream_create(OpusFileCallbacks *_cb, const char *_url,...) OP_ARG_NONNULL(1) OP_ARG_NONNULL(2); -/*@}*/ -/*@}*/ +/**@}*/ +/**@}*/ /**\defgroup stream_open_close Opening and Closing*/ -/*@{*/ +/**@{*/ /**\name Functions for opening and closing streams These functions allow you to test a stream to see if it is Opus, open it, and close it. Several flavors are provided for each of the built-in stream types, plus a more general version which takes a set of application-provided callbacks.*/ -/*@{*/ +/**@{*/ /**Test to see if this is an Opus stream. For good results, you will need at least 57 bytes (for a pure Opus-only @@ -1159,20 +1159,16 @@ OP_WARN_UNUSED_RESULT OggOpusFile *op_open_url(const char *_url, This value will be passed verbatim as the first argument to all of the callbacks. \param _cb The callbacks with which to access the stream. - read() must - be implemented. - seek() and - tell() may - be NULL, or may always return -1 to - indicate a stream is unseekable, but if - seek() is - implemented and succeeds on a particular stream, then - tell() must - also. - close() may - be NULL, but if it is not, it will be - called when the \c OggOpusFile is destroyed by - op_free(). + \ref op_read_func "read()" must be implemented. + \ref op_seek_func "seek()" and \ref op_tell_func + "tell()" may be NULL, or may always + return -1 to indicate a stream is unseekable, but if + \ref op_seek_func "seek()" is implemented and + succeeds on a particular stream, then \ref + op_tell_func "tell()" must also. + \ref op_close_func "close()" may be NULL, + but if it is not, it will be called when the \c + OggOpusFile is destroyed by op_free(). It will not be called if op_open_callbacks() fails with an error. \param _initial_data An initial buffer of data from the start of the @@ -1183,10 +1179,8 @@ OP_WARN_UNUSED_RESULT OggOpusFile *op_open_url(const char *_url, stream to be opened, even if it is unseekable. \param _initial_bytes The number of bytes in \a _initial_data. If the stream is seekable, its current position (as - reported by - tell() - at the start of this function) must be equal to - \a _initial_bytes. + reported by \ref op_tell_func "tell()" at the start + of this function) must be equal to \a _initial_bytes. Otherwise, seeking to absolute positions will generate inconsistent results. \param[out] _error Returns 0 on success, or a failure code on error. @@ -1206,11 +1200,10 @@ OP_WARN_UNUSED_RESULT OggOpusFile *op_open_url(const char *_url, implemented, such as an unsupported channel family.
    #OP_EINVAL
    -
    seek() - was implemented and succeeded on this source, but - tell() - did not, or the starting position indicator was - not equal to \a _initial_bytes.
    +
    \ref op_seek_func "seek()" was implemented and + succeeded on this source, but \ref op_tell_func + "tell()" did not, or the starting position + indicator was not equal to \a _initial_bytes.
    #OP_ENOTFORMAT
    The stream contained a link that did not have any logical Opus streams in it.
    @@ -1341,20 +1334,16 @@ OP_WARN_UNUSED_RESULT OggOpusFile *op_test_url(const char *_url, This value will be passed verbatim as the first argument to all of the callbacks. \param _cb The callbacks with which to access the stream. - read() must - be implemented. - seek() and - tell() may - be NULL, or may always return -1 to - indicate a stream is unseekable, but if - seek() is - implemented and succeeds on a particular stream, then - tell() must - also. - close() may - be NULL, but if it is not, it will be - called when the \c OggOpusFile is destroyed by - op_free(). + \ref op_read_func "read()" must be implemented. + \ref op_seek_func "seek()" and \ref op_tell_func + "tell()" may be NULL, or may always + return -1 to indicate a stream is unseekable, but if + \ref op_seek_func "seek()" is implemented and + succeeds on a particular stream, then \ref + op_tell_func "tell()" must also. + \ref op_close_func "close()" may be NULL, + but if it is not, it will be called when the \c + OggOpusFile is destroyed by op_free(). It will not be called if op_open_callbacks() fails with an error. \param _initial_data An initial buffer of data from the start of the @@ -1367,9 +1356,8 @@ OP_WARN_UNUSED_RESULT OggOpusFile *op_test_url(const char *_url, \param _initial_bytes The number of bytes in \a _initial_data. If the stream is seekable, its current position (as reported by - tell() - at the start of this function) must be equal to - \a _initial_bytes. + \ref op_tell_func "tell()" at the start of this + function) must be equal to \a _initial_bytes. Otherwise, seeking to absolute positions will generate inconsistent results. \param[out] _error Returns 0 on success, or a failure code on error. @@ -1418,11 +1406,11 @@ int op_test_open(OggOpusFile *_of) OP_ARG_NONNULL(1); \param _of The \c OggOpusFile to free.*/ void op_free(OggOpusFile *_of); -/*@}*/ -/*@}*/ +/**@}*/ +/**@}*/ /**\defgroup stream_info Stream Information*/ -/*@{*/ +/**@{*/ /**\name Functions for obtaining information about streams These functions allow you to get basic information about a stream, including @@ -1437,18 +1425,17 @@ void op_free(OggOpusFile *_of); streams returned by op_test_callbacks() or one of the associated convenience functions. Their documention will indicate so explicitly.*/ -/*@{*/ +/**@{*/ /**Returns whether or not the stream being read is seekable. This is true if
      -
    1. The seek() and - tell() callbacks are both - non-NULL,
    2. -
    3. The seek() callback was - successfully executed at least once, and
    4. -
    5. The tell() callback was - successfully able to report the position indicator afterwards.
    6. +
    7. The \ref op_seek_func "seek()" and \ref op_tell_func "tell()" + callbacks are both non-NULL,
    8. +
    9. The \ref op_seek_func "seek()" callback was successfully executed at + least once, and
    10. +
    11. The \ref op_tell_func "tell()" callback was successfully able to report + the position indicator afterwards.
    This function may be called on partially-opened streams. \param _of The \c OggOpusFile whose seekable status is to be returned. @@ -1638,11 +1625,11 @@ opus_int64 op_raw_tell(const OggOpusFile *_of) OP_ARG_NONNULL(1); \retval #OP_EINVAL The stream was only partially open.*/ ogg_int64_t op_pcm_tell(const OggOpusFile *_of) OP_ARG_NONNULL(1); -/*@}*/ -/*@}*/ +/**@}*/ +/**@}*/ /**\defgroup stream_seeking Seeking*/ -/*@{*/ +/**@{*/ /**\name Functions for seeking in Opus streams These functions let you seek in Opus streams, if the underlying stream @@ -1667,7 +1654,7 @@ ogg_int64_t op_pcm_tell(const OggOpusFile *_of) OP_ARG_NONNULL(1); values as would be obtained by decoding the stream straight through. However, such differences are expected to be smaller than the loss introduced by Opus's lossy compression.*/ -/*@{*/ +/**@{*/ /**Seek to a byte offset relative to the compressed data. This also scans packets to update the PCM cursor. @@ -1702,11 +1689,11 @@ int op_raw_seek(OggOpusFile *_of,opus_int64 _byte_offset) OP_ARG_NONNULL(1); seeking to the target destination was impossible.*/ int op_pcm_seek(OggOpusFile *_of,ogg_int64_t _pcm_offset) OP_ARG_NONNULL(1); -/*@}*/ -/*@}*/ +/**@}*/ +/**@}*/ /**\defgroup stream_decoding Decoding*/ -/*@{*/ +/**@{*/ /**\name Functions for decoding audio data These functions retrieve actual decoded audio data from the stream. @@ -1744,7 +1731,7 @@ int op_pcm_seek(OggOpusFile *_of,ogg_int64_t _pcm_offset) OP_ARG_NONNULL(1); If you are reading from an URL (particularly if seeking is not supported), you should make sure to check for this error and warn the user appropriately.*/ -/*@{*/ +/**@{*/ /**Indicates that the decoding callback should produce signed 16-bit native-endian output samples.*/ @@ -1829,7 +1816,7 @@ void op_set_decode_callback(OggOpusFile *_of, #define OP_TRACK_GAIN (3008) /**Gain offset type that indicates that the provided offset should be used as - the gain directly, without applying any the header or track gains.*/ + the gain directly, without applying any of the header or track gains.*/ #define OP_ABSOLUTE_GAIN (3009) /**Sets the gain to be used for decoded output. @@ -2150,8 +2137,8 @@ OP_WARN_UNUSED_RESULT int op_read_stereo(OggOpusFile *_of, OP_WARN_UNUSED_RESULT int op_read_float_stereo(OggOpusFile *_of, float *_pcm,int _buf_size) OP_ARG_NONNULL(1); -/*@}*/ -/*@}*/ +/**@}*/ +/**@}*/ # if OP_GNUC_PREREQ(4,0) # pragma GCC visibility pop diff --git a/VisualC/external/optional/x64/LICENSE.opus.txt b/VisualC/external/optional/x64/LICENSE.opus.txt index c43fe9c0..fb6f3e40 100644 --- a/VisualC/external/optional/x64/LICENSE.opus.txt +++ b/VisualC/external/optional/x64/LICENSE.opus.txt @@ -1,7 +1,3 @@ -The source code to this library used with SDL_mixer can be found here: -https://hg.libsdl.org/SDL_mixer/file/default/external ---- - Copyright 2001-2011 Xiph.Org, Skype Limited, Octasic, Jean-Marc Valin, Timothy B. Terriberry, CSIRO, Gregory Maxwell, Mark Borgerding, diff --git a/VisualC/external/optional/x64/LICENSE.opusfile.txt b/VisualC/external/optional/x64/LICENSE.opusfile.txt index e62a20bd..d7461f15 100644 --- a/VisualC/external/optional/x64/LICENSE.opusfile.txt +++ b/VisualC/external/optional/x64/LICENSE.opusfile.txt @@ -1,7 +1,3 @@ -The source code to this library used with SDL_mixer can be found here: -https://hg.libsdl.org/SDL_mixer/file/default/external ---- - Copyright (c) 1994-2013 Xiph.Org Foundation and contributors Redistribution and use in source and binary forms, with or without diff --git a/VisualC/external/optional/x64/libopus-0.dll b/VisualC/external/optional/x64/libopus-0.dll index 5991eb7e5199d11b7b7db31db3b87e2835b75bd6..21becbc164884369579496228e1cdcbd0558fab0 100644 GIT binary patch delta 37767 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 diff --git a/VisualC/external/optional/x64/libopusfile-0.dll b/VisualC/external/optional/x64/libopusfile-0.dll index 8a5134c2e6f4a342416cb967e8923ae9bff92b87..0d4eaaca2646a9e7192f8b5aa1d2c3faae9eae2a 100644 GIT binary patch delta 13487 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 pdwaun*Y@V^^7hv4?c3RyV-c8i_~%{0&?ZK0bV( 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 FzW^t5Z9xD4 diff --git a/VisualC/external/optional/x64/libwavpack-1.dll b/VisualC/external/optional/x64/libwavpack-1.dll index a0d7874e73026c8cf2fe0ef6b2edaac38c5d5c7a..fc76fbbd521dbab1be70fa2b8b6f30c106cf7205 100644 GIT binary patch delta 16018 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 ZT~=FGUq)~fKx*+&2KhRxASyha{x1cTx{v?> delta 20371 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 aJ5r6kDZpFF76kiC?yfJ09VeZ5`o92>uYVB$ diff --git a/VisualC/external/optional/x86/LICENSE.opus.txt b/VisualC/external/optional/x86/LICENSE.opus.txt index c43fe9c0..fb6f3e40 100644 --- a/VisualC/external/optional/x86/LICENSE.opus.txt +++ b/VisualC/external/optional/x86/LICENSE.opus.txt @@ -1,7 +1,3 @@ -The source code to this library used with SDL_mixer can be found here: -https://hg.libsdl.org/SDL_mixer/file/default/external ---- - Copyright 2001-2011 Xiph.Org, Skype Limited, Octasic, Jean-Marc Valin, Timothy B. Terriberry, CSIRO, Gregory Maxwell, Mark Borgerding, diff --git a/VisualC/external/optional/x86/LICENSE.opusfile.txt b/VisualC/external/optional/x86/LICENSE.opusfile.txt index e62a20bd..d7461f15 100644 --- a/VisualC/external/optional/x86/LICENSE.opusfile.txt +++ b/VisualC/external/optional/x86/LICENSE.opusfile.txt @@ -1,7 +1,3 @@ -The source code to this library used with SDL_mixer can be found here: -https://hg.libsdl.org/SDL_mixer/file/default/external ---- - Copyright (c) 1994-2013 Xiph.Org Foundation and contributors Redistribution and use in source and binary forms, with or without diff --git a/VisualC/external/optional/x86/libopus-0.dll b/VisualC/external/optional/x86/libopus-0.dll index a963b65107f47032d8e0a538fed94fa43bec3f2b..b1804755883f62a500247dfd085c72715a104d5b 100644 GIT binary patch delta 33057 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 delta 34193 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

    u$I2`$K8gj5H9TkBQXQ(4y2O-fsUBo8 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 delta 13861 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 Date: Sun, 21 Dec 2025 17:01:20 +0300 Subject: [PATCH 43/48] MSVC project: updated libogg dll builds. (cherry picked from commit e245b92c86c9e0f85708892342819dfa38124683) --- .../optional/x64/LICENSE.ogg-vorbis.txt | 6 +----- VisualC/external/optional/x64/libogg-0.dll | Bin 35328 -> 32768 bytes .../optional/x86/LICENSE.ogg-vorbis.txt | 6 +----- VisualC/external/optional/x86/libogg-0.dll | Bin 30720 -> 29696 bytes 4 files changed, 2 insertions(+), 10 deletions(-) diff --git a/VisualC/external/optional/x64/LICENSE.ogg-vorbis.txt b/VisualC/external/optional/x64/LICENSE.ogg-vorbis.txt index c15bc2b7..f23d66ea 100644 --- a/VisualC/external/optional/x64/LICENSE.ogg-vorbis.txt +++ b/VisualC/external/optional/x64/LICENSE.ogg-vorbis.txt @@ -1,8 +1,4 @@ -The source code to this library used with SDL_mixer can be found here: -https://hg.libsdl.org/SDL_mixer/file/default/external ---- - -Copyright (c) 2002-2018 Xiph.org Foundation +Copyright (c) 2002-2020 Xiph.org Foundation Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions diff --git a/VisualC/external/optional/x64/libogg-0.dll b/VisualC/external/optional/x64/libogg-0.dll index 5ec1f1e61729b7493d90265fbfb4e5f418df8552..e656f78ffc5ea929f4d0fd0982be0491fdf550c0 100644 GIT binary patch delta 7542 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 delta 10086 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 Kt5&+eWc?j~PY=ET delta 6990 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 G$NV4Swh$`- From e2a734dce43314b8776575d766e704ddfd7bf5da Mon Sep 17 00:00:00 2001 From: Anonymous Maarten Date: Thu, 8 Jan 2026 23:07:59 +0100 Subject: [PATCH 44/48] cmake: update PrivateSdlFunctions.cmake --- cmake/PrivateSdlFunctions.cmake | 1 - 1 file changed, 1 deletion(-) diff --git a/cmake/PrivateSdlFunctions.cmake b/cmake/PrivateSdlFunctions.cmake index 1f3786c0..a0b170cb 100644 --- a/cmake/PrivateSdlFunctions.cmake +++ b/cmake/PrivateSdlFunctions.cmake @@ -278,7 +278,6 @@ endmacro() function(sdl_target_link_options_no_undefined TARGET) if(NOT MSVC AND NOT CMAKE_SYSTEM_NAME MATCHES ".*OpenBSD.*") if(CMAKE_C_COMPILER_ID MATCHES "AppleClang") - target_link_options(${TARGET} PRIVATE "-Wl,-undefined,error") else() sdl_check_linker_flag("-Wl,--no-undefined" HAVE_WL_NO_UNDEFINED) if(HAVE_WL_NO_UNDEFINED AND NOT ((CMAKE_C_COMPILER_ID MATCHES "Clang") AND WIN32)) From 03306cf667646dd207eee28e773e3ec9543b283f Mon Sep 17 00:00:00 2001 From: "Daniel K. O. (dkosmari)" Date: Mon, 19 Jan 2026 21:26:13 -0300 Subject: [PATCH 45/48] - Remap channels from vorbis and opus sources to match SDL channels. - Don't discard decoded samples when stream configuration changes. --- CMakeLists.txt | 1 + src/codecs/music_ogg.c | 30 ++++-- src/codecs/music_opus.c | 30 ++++-- src/codecs/remap_channels.c | 210 ++++++++++++++++++++++++++++++++++++ src/codecs/remap_channels.h | 29 +++++ 5 files changed, 281 insertions(+), 19 deletions(-) create mode 100644 src/codecs/remap_channels.c create mode 100644 src/codecs/remap_channels.h diff --git a/CMakeLists.txt b/CMakeLists.txt index e56c1818..1a962e87 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -233,6 +233,7 @@ add_library(SDL2_mixer src/codecs/music_wav.c src/codecs/music_wavpack.c src/codecs/music_xmp.c + src/codecs/remap_channels.c src/effect_position.c src/effect_stereoreverse.c src/effects_internal.c diff --git a/src/codecs/music_ogg.c b/src/codecs/music_ogg.c index a5ebd956..0338ac8c 100644 --- a/src/codecs/music_ogg.c +++ b/src/codecs/music_ogg.c @@ -26,6 +26,7 @@ #include "SDL_loadso.h" #include "music_ogg.h" +#include "remap_channels.h" #include "utils.h" #define OV_EXCLUDE_STATIC_CALLBACKS @@ -195,6 +196,7 @@ static void OGG_Delete(void *context); static int OGG_UpdateSection(OGG_music *music) { vorbis_info *vi; + int new_buffer_size; vi = vorbis.ov_info(&music->vf, -1); if (!vi) { @@ -206,11 +208,6 @@ static int OGG_UpdateSection(OGG_music *music) } SDL_memcpy(&music->vi, vi, sizeof(*vi)); - if (music->buffer) { - SDL_free(music->buffer); - music->buffer = NULL; - } - if (music->stream) { SDL_FreeAudioStream(music->stream); music->stream = NULL; @@ -219,13 +216,24 @@ static int OGG_UpdateSection(OGG_music *music) music->stream = SDL_NewAudioStream(AUDIO_S16SYS, (Uint8)vi->channels, (int)vi->rate, music_spec.format, music_spec.channels, music_spec.freq); if (!music->stream) { + SDL_free(music->buffer); + music->buffer = NULL; + music->buffer_size = 0; return -1; } - music->buffer_size = music_spec.samples * (int)sizeof(Sint16) * vi->channels; - music->buffer = (char *)SDL_malloc((size_t)music->buffer_size); - if (!music->buffer) { - return -1; + /* Note: never shrink the buffer, we just decoded data in there. */ + new_buffer_size = music_spec.samples * (int)sizeof(Sint16) * vi->channels; + if (new_buffer_size > music->buffer_size) { + char *new_buffer = (char *)SDL_realloc(music->buffer, new_buffer_size); + if (!new_buffer) { + SDL_free(music->buffer); + music->buffer = NULL; + music->buffer_size = 0; + return -1; + } + music->buffer = new_buffer; + music->buffer_size = new_buffer_size; } return 0; } @@ -387,7 +395,7 @@ static int OGG_GetSome(void *context, void *data, int bytes, SDL_bool *done) #ifdef OGG_USE_TREMOR amount = (int)vorbis.ov_read(&music->vf, music->buffer, music->buffer_size, §ion); #else - amount = (int)vorbis.ov_read(&music->vf, music->buffer, music->buffer_size, SDL_BYTEORDER == SDL_BIG_ENDIAN, 2, 1, §ion); + amount = (int)vorbis.ov_read(&music->vf, music->buffer, music->buffer_size, SDL_BYTEORDER == SDL_BIG_ENDIAN, (int)sizeof(Sint16), 1, §ion); #endif if (amount < 0) { return set_ov_error("ov_read", amount); @@ -400,6 +408,8 @@ static int OGG_GetSome(void *context, void *data, int bytes, SDL_bool *done) } } + remap_channels_vorbis((Sint16 *)music->buffer, amount / (int)sizeof(Sint16), music->vi.channels); + pcmPos = vorbis.ov_pcm_tell(&music->vf); if (music->loop && (music->play_count != 1) && (pcmPos >= music->loop_end)) { amount -= (int)((pcmPos - music->loop_end) * music->vi.channels) * (int)sizeof(Sint16); diff --git a/src/codecs/music_opus.c b/src/codecs/music_opus.c index a367fbaa..648d50cb 100644 --- a/src/codecs/music_opus.c +++ b/src/codecs/music_opus.c @@ -26,6 +26,7 @@ #include "SDL_loadso.h" #include "music_opus.h" +#include "remap_channels.h" #include "utils.h" #ifdef OPUSFILE_HEADER @@ -169,6 +170,7 @@ static void OPUS_Delete(void*); static int OPUS_UpdateSection(OPUS_music *music) { const OpusHead *op_info; + int new_buffer_size; op_info = opus.op_head(music->of, -1); if (!op_info) { @@ -180,11 +182,6 @@ static int OPUS_UpdateSection(OPUS_music *music) } music->op_info = op_info; - if (music->buffer) { - SDL_free(music->buffer); - music->buffer = NULL; - } - if (music->stream) { SDL_FreeAudioStream(music->stream); music->stream = NULL; @@ -193,13 +190,24 @@ static int OPUS_UpdateSection(OPUS_music *music) music->stream = SDL_NewAudioStream(AUDIO_S16SYS, (Uint8)op_info->channel_count, 48000, music_spec.format, music_spec.channels, music_spec.freq); if (!music->stream) { + SDL_free(music->buffer); + music->buffer = NULL; + music->buffer_size = 0; return -1; } - music->buffer_size = (int)music_spec.samples * (int)sizeof(opus_int16) * op_info->channel_count; - music->buffer = (char *)SDL_malloc((size_t)music->buffer_size); - if (!music->buffer) { - return -1; + /* Note: never shrink the buffer, we just decoded data in there. */ + new_buffer_size = (int)music_spec.samples * (int)sizeof(opus_int16) * op_info->channel_count; + if (new_buffer_size > music->buffer_size) { + char *new_buffer = (char *)SDL_realloc(music->buffer, (size_t)new_buffer_size); + if (!new_buffer) { + SDL_free(music->buffer); + music->buffer = NULL; + music->buffer_size = 0; + return -1; + } + music->buffer = new_buffer; + music->buffer_size = new_buffer_size; } return 0; } @@ -378,6 +386,10 @@ static int OPUS_GetSome(void *context, void *data, int bytes, SDL_bool *done) } } + if (music->op_info->mapping_family == 1) { + remap_channels_vorbis((Sint16 *)music->buffer, samples * music->op_info->channel_count, music->op_info->channel_count); + } + pcmPos = opus.op_pcm_tell(music->of); if (music->loop && (music->play_count != 1) && (pcmPos >= music->loop_end)) { samples -= (int)((pcmPos - music->loop_end) * music->op_info->channel_count) * (int)sizeof(Sint16); diff --git a/src/codecs/remap_channels.c b/src/codecs/remap_channels.c new file mode 100644 index 00000000..552b06c1 --- /dev/null +++ b/src/codecs/remap_channels.c @@ -0,0 +1,210 @@ +/* + SDL_mixer: An audio mixer library based on the SDL library + Copyright (C) 2026 Daniel K. O. + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/* + * Comparison of channel orders: + * + * | Num. | chan. | SDL | FLAC | MS/USB | Vorbis | + * |------:|------:|-----|------|--------|--------| + * | 2 | 1 | FL | FL | FL | FL | + * | | 2 | FR | FR | FR | FR | + * |-------|-------|-----|------|--------|--------| + * | 3 | 1 | FL | FL | FL | FL | + * | | 2 | FR | FR | FR | FC | + * | | 3 | LFE | FC | FC/LFE | FR | + * |-------|-------|-----|------|--------|--------| + * | 4 | 1 | FL | FL | FL | FL | + * | | 2 | FR | FR | FR | FR | + * | | 3 | RL | RL | RL | RL | + * | | 4 | RR | RR | RR | RR | + * |-------|-------|-----|------|--------|--------| + * | 5 | 1 | FL | FL | FL | FL | + * | (5.0) | 2 | FR | FR | FR | FC | + * | | 3 | LFE | FC | FC/LFE | FR | + * | | 4 | RL | RL | RL | RL | + * | | 5 | RR | RR | RR | RR | + * |-------|-------|-----|------|--------|--------| + * | 6 | 1 | FL | FL | FL | FL | + * | (5.1) | 2 | FR | FR | FR | FC | + * | | 3 | FC | FC | FC | FR | + * | | 4 | LFE | LFE | LFE | RL | + * | | 5 | RL | RL | RR | RR | + * | | 6 | RR | RR | RR | LFE | + * |-------|-------|-----|------|--------|--------| + * | 7 | 1 | FL | FL | FL | FL | + * | | 2 | FR | FR | FR | FC | + * | | 3 | FC | FC | FC | FR | + * | | 4 | LFE | LFE | LFE | SL | + * | | 5 | RC | RC | RC | SR | + * | | 6 | SL | SL | SL | RC | + * | | 7 | SR | SR | SR | LFE | + * |-------|-------|-----|------|--------|--------| + * | 8 | 1 | FL | FL | FL | FL | + * | (7.1) | 2 | FR | FR | FR | FC | + * | | 3 | FC | FC | FC | FR | + * | | 4 | LFE | LFE | LFE | SL | + * | | 5 | RL | RL | RL | SR | + * | | 6 | RR | RR | RR | RL | + * | | 7 | SL | SL | SL | RR | + * | | 8 | SR | SR | SR | LFE | + * + * + * **Note:** USB/MS use a bitmask to indicate which channels are present. The only + * requirement is that they must appear in a fixed order, if present: + * + * - FL (Front Center) + * - FR (Front Right) + * - FC (Front Center) + * - LFE (Low Frequency Enhancement) + * - BL (Back Left) aka RL (Rear LEft) + * - BR (Back Right) aka RR (Rear Right) + * - FLC (Front Left of Center) + * - FRC (Front Right of Center) + * - BC (Back Center) aka RC (Rear Center) + * - SL (Side Left) + * - SR (Side Right) + * - TC (Top Center) + * - TFL (Top Front Left) + * - TFC (Top Front Center) + * - TFR (Top Front Right) + * - TBL (Top Back Left) + * - TBC (Top Back Center) + * - TBR (Top Back Right) + * + * + * **Note:** WavPack documentation claims that ALL MS/USB channels (up to the max) must be + * present. So to contain all the 7.1 channels, a .wv file must have 11 channels, with + * silent FLC, FRC, BC/RC channels. + * + * + * Sources: + * - Vorbis: https://www.rfc-editor.org/rfc/rfc7845.html#section-5.1.1.2 + * - SDL: https://github.com/libsdl-org/SDL/blob/main/include/SDL3/SDL_audio.h + * - FLAC: https://www.rfc-editor.org/rfc/rfc9639.html#name-channels-bits + * - WavPack (WV): https://www.wavpack.com/wavpack_doc.html + * - USB: https://www.usb.org/sites/default/files/audio10.pdf (see "3.7.2.3 Audio Channel Cluster Format") + * - MS: https://learn.microsoft.com/en-us/windows/win32/api/mmreg/ns-mmreg-waveformatextensible + */ + +#include "remap_channels.h" + + +static void remap_channels_vorbis_3(Sint16 *samples, int num_samples) +{ + /* Note: this isn't perfect, because we map FC to LFE */ + int i; + for (i = 0; i < num_samples; i += 3) { + Sint16 FC = samples[i + 1]; + Sint16 FR = samples[i + 2]; + samples[i + 1] = FR; + samples[i + 2] = FC; + } +} + +static void remap_channels_vorbis_5(Sint16 *samples, int num_samples) +{ + /* Note: this isn't perfect, because we map FC to LFE. */ + int i; + for (i = 0; i < num_samples; i += 5) { + Sint16 FC = samples[i + 1]; + Sint16 FR = samples[i + 2]; + samples[i + 1] = FR; + samples[i + 2] = FC; + } +} + +static void remap_channels_vorbis_5_1(Sint16 *samples, int num_samples) +{ + int i; + for (i = 0; i < num_samples; i += 6) { + Sint16 FC = samples[i + 1]; + Sint16 FR = samples[i + 2]; + Sint16 RL = samples[i + 3]; + Sint16 RR = samples[i + 4]; + Sint16 LFE = samples[i + 5]; + samples[i + 1] = FR; + samples[i + 2] = FC; + samples[i + 3] = LFE; + samples[i + 4] = RL; + samples[i + 5] = RR; + } +} + +static void remap_channels_vorbis_7(Sint16 *samples, int num_samples) +{ + int i = 0; + for (i = 0; i < num_samples; i += 7) { + Sint16 FC = samples[i + 1]; + Sint16 FR = samples[i + 2]; + Sint16 SL = samples[i + 3]; + Sint16 SR = samples[i + 4]; + Sint16 RC = samples[i + 5]; + Sint16 LFE = samples[i + 6]; + samples[i + 1] = FR; + samples[i + 2] = FC; + samples[i + 3] = LFE; + samples[i + 4] = RC; + samples[i + 5] = SL; + samples[i + 6] = SR; + } +} + +static void remap_channels_vorbis_7_1(Sint16 *samples, int num_samples) +{ + int i = 0; + for (i = 0; i < num_samples; i += 8) { + Sint16 FC = samples[i + 1]; + Sint16 FR = samples[i + 2]; + Sint16 SL = samples[i + 3]; + Sint16 SR = samples[i + 4]; + Sint16 RL = samples[i + 5]; + Sint16 RR = samples[i + 6]; + Sint16 LFE = samples[i + 7]; + samples[i + 1] = FR; + samples[i + 2] = FC; + samples[i + 3] = LFE; + samples[i + 4] = RL; + samples[i + 5] = RR; + samples[i + 6] = SL; + samples[i + 7] = SR; + } +} + +void remap_channels_vorbis(Sint16 *samples, int num_samples, int num_channels) +{ + switch (num_channels) { + case 3: + remap_channels_vorbis_3(samples, num_samples); + break; + case 5: + remap_channels_vorbis_5(samples, num_samples); + break; + case 6: + remap_channels_vorbis_5_1(samples, num_samples); + break; + case 7: + remap_channels_vorbis_7(samples, num_samples); + break; + case 8: + remap_channels_vorbis_7_1(samples, num_samples); + break; + } +} diff --git a/src/codecs/remap_channels.h b/src/codecs/remap_channels.h new file mode 100644 index 00000000..23536487 --- /dev/null +++ b/src/codecs/remap_channels.h @@ -0,0 +1,29 @@ +/* + SDL_mixer: An audio mixer library based on the SDL library + Copyright (C) 2026 Daniel K. O. + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +#ifndef REMAP_CHANNELS_H_ +#define REMAP_CHANNELS_H_ + +#include "SDL_types.h" + +extern void remap_channels_vorbis(Sint16 *samples, int num_samples, int num_channels); + +#endif /* CHANNEL_REMAP_H_ */ From 790b35d9504e23d9ff7ec9c7de067e832dc7364b Mon Sep 17 00:00:00 2001 From: "Daniel K. O. (dkosmari)" Date: Mon, 19 Jan 2026 22:13:21 -0300 Subject: [PATCH 46/48] Remap and don't discard buffers also on music_ogg_stb backend. --- src/codecs/music_ogg.c | 7 +- src/codecs/music_ogg_stb.c | 60 +++++++++-------- src/codecs/music_opus.c | 7 +- src/codecs/remap_channels.c | 124 ++++++++++++++++++++++++++++++++---- src/codecs/remap_channels.h | 4 +- 5 files changed, 160 insertions(+), 42 deletions(-) diff --git a/src/codecs/music_ogg.c b/src/codecs/music_ogg.c index 0338ac8c..a1580162 100644 --- a/src/codecs/music_ogg.c +++ b/src/codecs/music_ogg.c @@ -222,8 +222,9 @@ static int OGG_UpdateSection(OGG_music *music) return -1; } - /* Note: never shrink the buffer, we just decoded data in there. */ new_buffer_size = music_spec.samples * (int)sizeof(Sint16) * vi->channels; + + /* Note: never shrink the buffer, we just decoded data in there. */ if (new_buffer_size > music->buffer_size) { char *new_buffer = (char *)SDL_realloc(music->buffer, new_buffer_size); if (!new_buffer) { @@ -408,7 +409,9 @@ static int OGG_GetSome(void *context, void *data, int bytes, SDL_bool *done) } } - remap_channels_vorbis((Sint16 *)music->buffer, amount / (int)sizeof(Sint16), music->vi.channels); + remap_channels_vorbis_s16((Sint16 *)music->buffer, + amount / (int)sizeof(Sint16), + music->vi.channels); pcmPos = vorbis.ov_pcm_tell(&music->vf); if (music->loop && (music->play_count != 1) && (pcmPos >= music->loop_end)) { diff --git a/src/codecs/music_ogg_stb.c b/src/codecs/music_ogg_stb.c index f9b36d46..c3e7386e 100644 --- a/src/codecs/music_ogg_stb.c +++ b/src/codecs/music_ogg_stb.c @@ -24,6 +24,7 @@ /* This file supports Ogg Vorbis music streams using a modified stb_vorbis module */ #include "music_ogg.h" +#include "remap_channels.h" #include "utils.h" #include "SDL_assert.h" @@ -74,7 +75,6 @@ typedef struct { int volume; stb_vorbis *vf; stb_vorbis_info vi; - int section; SDL_AudioStream *stream; char *buffer; int buffer_size; @@ -123,18 +123,15 @@ static void OGG_Delete(void *context); static int OGG_UpdateSection(OGG_music *music) { stb_vorbis_info vi; + int new_buffer_size; vi = stb_vorbis_get_info(music->vf); if (vi.channels == music->vi.channels && vi.sample_rate == music->vi.sample_rate) { return 0; } - SDL_memcpy(&music->vi, &vi, sizeof(vi)); - if (music->buffer) { - SDL_free(music->buffer); - music->buffer = NULL; - } + music->vi = vi; if (music->stream) { SDL_FreeAudioStream(music->stream); @@ -144,17 +141,30 @@ static int OGG_UpdateSection(OGG_music *music) music->stream = SDL_NewAudioStream(AUDIO_F32SYS, (Uint8)vi.channels, (int)vi.sample_rate, music_spec.format, music_spec.channels, music_spec.freq); if (!music->stream) { + SDL_free(music->buffer); + music->buffer = NULL; + music->buffer_size = 0; return -1; } - music->buffer_size = music_spec.samples * (int)sizeof(float) * vi.channels; - if (music->buffer_size <= 0) { + new_buffer_size = music_spec.samples * (int)sizeof(float) * vi.channels; + if (new_buffer_size <= 0) { + music->buffer = NULL; + music->buffer_size = 0; return -1; } - music->buffer = (char *)SDL_malloc((size_t)music->buffer_size); - if (!music->buffer) { - return -1; + /* Note: never shrink the buffer, we just decoded data in there. */ + if (new_buffer_size > music->buffer_size) { + char *new_buffer = (char *)SDL_realloc(music->buffer, new_buffer_size); + if (!new_buffer) { + SDL_free(music->buffer); + music->buffer = NULL; + music->buffer_size = 0; + return -1; + } + music->buffer = new_buffer; + music->buffer_size = new_buffer_size; } return 0; } @@ -175,7 +185,6 @@ static void *OGG_CreateFromRW(SDL_RWops *src, int freesrc) } music->src = src; music->volume = MIX_MAX_VOLUME; - music->section = -1; music->vf = stb_vorbis_open_rwops(src, 0, &error, NULL); @@ -308,8 +317,7 @@ static int OGG_GetSome(void *context, void *data, int bytes, SDL_bool *done) { OGG_music *music = (OGG_music *)context; SDL_bool looped = SDL_FALSE; - int filled, amount, result; - int section; + int filled, amount, samples, result; Sint64 pcmPos; filled = SDL_AudioStreamGet(music->stream, data, bytes); @@ -323,21 +331,21 @@ static int OGG_GetSome(void *context, void *data, int bytes, SDL_bool *done) return 0; } - section = music->section; - amount = stb_vorbis_get_samples_float_interleaved(music->vf, - music->vi.channels, - (float *)music->buffer, - music_spec.samples * music->vi.channels); + samples = stb_vorbis_get_samples_float_interleaved(music->vf, + music->vi.channels, + (float *)music->buffer, + music->buffer_size / (int)sizeof(float)); - amount *= music->vi.channels * sizeof(float); - - if (section != music->section) { - music->section = section; - if (OGG_UpdateSection(music) < 0) { - return -1; - } + if (OGG_UpdateSection(music) < 0) { + return -1; } + amount = samples * music->vi.channels * sizeof(float); + + remap_channels_vorbis_flt((float *)music->buffer, + samples * music->vi.channels, + music->vi.channels); + pcmPos = stb_vorbis_get_playback_sample_offset(music->vf); if (music->loop && (music->play_count != 1) && (pcmPos >= music->loop_end)) { amount -= (int)((pcmPos - music->loop_end) * music->vi.channels) * (int)sizeof(float); diff --git a/src/codecs/music_opus.c b/src/codecs/music_opus.c index 648d50cb..4ddae9f1 100644 --- a/src/codecs/music_opus.c +++ b/src/codecs/music_opus.c @@ -196,8 +196,9 @@ static int OPUS_UpdateSection(OPUS_music *music) return -1; } - /* Note: never shrink the buffer, we just decoded data in there. */ new_buffer_size = (int)music_spec.samples * (int)sizeof(opus_int16) * op_info->channel_count; + + /* Note: never shrink the buffer, we just decoded data in there. */ if (new_buffer_size > music->buffer_size) { char *new_buffer = (char *)SDL_realloc(music->buffer, (size_t)new_buffer_size); if (!new_buffer) { @@ -387,7 +388,9 @@ static int OPUS_GetSome(void *context, void *data, int bytes, SDL_bool *done) } if (music->op_info->mapping_family == 1) { - remap_channels_vorbis((Sint16 *)music->buffer, samples * music->op_info->channel_count, music->op_info->channel_count); + remap_channels_vorbis_s16((Sint16 *)music->buffer, + samples * music->op_info->channel_count, + music->op_info->channel_count); } pcmPos = opus.op_pcm_tell(music->of); diff --git a/src/codecs/remap_channels.c b/src/codecs/remap_channels.c index 552b06c1..9c057e6d 100644 --- a/src/codecs/remap_channels.c +++ b/src/codecs/remap_channels.c @@ -107,7 +107,7 @@ #include "remap_channels.h" -static void remap_channels_vorbis_3(Sint16 *samples, int num_samples) +static void remap_channels_vorbis_3_s16(Sint16 *samples, int num_samples) { /* Note: this isn't perfect, because we map FC to LFE */ int i; @@ -119,7 +119,19 @@ static void remap_channels_vorbis_3(Sint16 *samples, int num_samples) } } -static void remap_channels_vorbis_5(Sint16 *samples, int num_samples) +static void remap_channels_vorbis_3_flt(float *samples, int num_samples) +{ + /* Note: this isn't perfect, because we map FC to LFE */ + int i; + for (i = 0; i < num_samples; i += 3) { + float FC = samples[i + 1]; + float FR = samples[i + 2]; + samples[i + 1] = FR; + samples[i + 2] = FC; + } +} + +static void remap_channels_vorbis_5_s16(Sint16 *samples, int num_samples) { /* Note: this isn't perfect, because we map FC to LFE. */ int i; @@ -131,7 +143,19 @@ static void remap_channels_vorbis_5(Sint16 *samples, int num_samples) } } -static void remap_channels_vorbis_5_1(Sint16 *samples, int num_samples) +static void remap_channels_vorbis_5_flt(float *samples, int num_samples) +{ + /* Note: this isn't perfect, because we map FC to LFE. */ + int i; + for (i = 0; i < num_samples; i += 5) { + float FC = samples[i + 1]; + float FR = samples[i + 2]; + samples[i + 1] = FR; + samples[i + 2] = FC; + } +} + +static void remap_channels_vorbis_5_1_s16(Sint16 *samples, int num_samples) { int i; for (i = 0; i < num_samples; i += 6) { @@ -148,7 +172,24 @@ static void remap_channels_vorbis_5_1(Sint16 *samples, int num_samples) } } -static void remap_channels_vorbis_7(Sint16 *samples, int num_samples) +static void remap_channels_vorbis_5_1_flt(float *samples, int num_samples) +{ + int i; + for (i = 0; i < num_samples; i += 6) { + float FC = samples[i + 1]; + float FR = samples[i + 2]; + float RL = samples[i + 3]; + float RR = samples[i + 4]; + float LFE = samples[i + 5]; + samples[i + 1] = FR; + samples[i + 2] = FC; + samples[i + 3] = LFE; + samples[i + 4] = RL; + samples[i + 5] = RR; + } +} + +static void remap_channels_vorbis_7_s16(Sint16 *samples, int num_samples) { int i = 0; for (i = 0; i < num_samples; i += 7) { @@ -167,7 +208,26 @@ static void remap_channels_vorbis_7(Sint16 *samples, int num_samples) } } -static void remap_channels_vorbis_7_1(Sint16 *samples, int num_samples) +static void remap_channels_vorbis_7_flt(float *samples, int num_samples) +{ + int i = 0; + for (i = 0; i < num_samples; i += 7) { + float FC = samples[i + 1]; + float FR = samples[i + 2]; + float SL = samples[i + 3]; + float SR = samples[i + 4]; + float RC = samples[i + 5]; + float LFE = samples[i + 6]; + samples[i + 1] = FR; + samples[i + 2] = FC; + samples[i + 3] = LFE; + samples[i + 4] = RC; + samples[i + 5] = SL; + samples[i + 6] = SR; + } +} + +static void remap_channels_vorbis_7_1_s16(Sint16 *samples, int num_samples) { int i = 0; for (i = 0; i < num_samples; i += 8) { @@ -188,23 +248,65 @@ static void remap_channels_vorbis_7_1(Sint16 *samples, int num_samples) } } -void remap_channels_vorbis(Sint16 *samples, int num_samples, int num_channels) +static void remap_channels_vorbis_7_1_flt(float *samples, int num_samples) +{ + int i = 0; + for (i = 0; i < num_samples; i += 8) { + float FC = samples[i + 1]; + float FR = samples[i + 2]; + float SL = samples[i + 3]; + float SR = samples[i + 4]; + float RL = samples[i + 5]; + float RR = samples[i + 6]; + float LFE = samples[i + 7]; + samples[i + 1] = FR; + samples[i + 2] = FC; + samples[i + 3] = LFE; + samples[i + 4] = RL; + samples[i + 5] = RR; + samples[i + 6] = SL; + samples[i + 7] = SR; + } +} + +void remap_channels_vorbis_s16(Sint16 *samples, int num_samples, int num_channels) +{ + switch (num_channels) { + case 3: + remap_channels_vorbis_3_s16(samples, num_samples); + break; + case 5: + remap_channels_vorbis_5_s16(samples, num_samples); + break; + case 6: + remap_channels_vorbis_5_1_s16(samples, num_samples); + break; + case 7: + remap_channels_vorbis_7_s16(samples, num_samples); + break; + case 8: + remap_channels_vorbis_7_1_s16(samples, num_samples); + break; + } +} + +void remap_channels_vorbis_flt(float *samples, int num_samples, int num_channels) { switch (num_channels) { case 3: - remap_channels_vorbis_3(samples, num_samples); + remap_channels_vorbis_3_flt(samples, num_samples); break; case 5: - remap_channels_vorbis_5(samples, num_samples); + remap_channels_vorbis_5_flt(samples, num_samples); break; case 6: - remap_channels_vorbis_5_1(samples, num_samples); + remap_channels_vorbis_5_1_flt(samples, num_samples); break; case 7: - remap_channels_vorbis_7(samples, num_samples); + remap_channels_vorbis_7_flt(samples, num_samples); break; case 8: - remap_channels_vorbis_7_1(samples, num_samples); + remap_channels_vorbis_7_1_flt(samples, num_samples); break; } } diff --git a/src/codecs/remap_channels.h b/src/codecs/remap_channels.h index 23536487..3f5d03bb 100644 --- a/src/codecs/remap_channels.h +++ b/src/codecs/remap_channels.h @@ -24,6 +24,8 @@ #include "SDL_types.h" -extern void remap_channels_vorbis(Sint16 *samples, int num_samples, int num_channels); +extern void remap_channels_vorbis_s16(Sint16 *samples, int num_samples, int num_channels); + +extern void remap_channels_vorbis_flt(float *samples, int num_samples, int num_channels); #endif /* CHANNEL_REMAP_H_ */ From 298fcf55803fb792828b6a21802ad044e199223e Mon Sep 17 00:00:00 2001 From: "Daniel K. O. (dkosmari)" Date: Mon, 19 Jan 2026 23:56:32 -0300 Subject: [PATCH 47/48] Fixed comment. --- src/codecs/remap_channels.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/codecs/remap_channels.h b/src/codecs/remap_channels.h index 3f5d03bb..3479680d 100644 --- a/src/codecs/remap_channels.h +++ b/src/codecs/remap_channels.h @@ -28,4 +28,4 @@ extern void remap_channels_vorbis_s16(Sint16 *samples, int num_samples, int num_ extern void remap_channels_vorbis_flt(float *samples, int num_samples, int num_channels); -#endif /* CHANNEL_REMAP_H_ */ +#endif /* REMAP_CHANNELS_H_ */ From c1f8423caebad7da0afee53484a0e54de150a264 Mon Sep 17 00:00:00 2001 From: Ozkan Sezer Date: Tue, 20 Jan 2026 07:23:02 +0300 Subject: [PATCH 48/48] Makefile.os2: add new source remap_channels.c to build. --- Makefile.os2 | 1 + 1 file changed, 1 insertion(+) diff --git a/Makefile.os2 b/Makefile.os2 index 64f150ef..09601948 100644 --- a/Makefile.os2 +++ b/Makefile.os2 @@ -59,6 +59,7 @@ SRCS = utils.c effect_position.c effects_internal.c effect_stereoreverse.c mixer # codec sources: SRCS+= load_aiff.c load_voc.c music_wav.c & music_ogg.c music_ogg_stb.c music_opus.c & + remap_channels.c & music_flac.c music_drflac.c music_wavpack.c & mp3utils.c music_mpg123.c music_minimp3.c & music_xmp.c music_modplug.c music_gme.c &