Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package libopenmpt for openSUSE:Factory checked in at 2025-09-15 19:50:21 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/libopenmpt (Old) and /work/SRC/openSUSE:Factory/.libopenmpt.new.1977 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libopenmpt" Mon Sep 15 19:50:21 2025 rev:56 rq:1304594 version:0.8.3 Changes: -------- --- /work/SRC/openSUSE:Factory/libopenmpt/libopenmpt.changes 2025-07-22 12:54:05.708543905 +0200 +++ /work/SRC/openSUSE:Factory/.libopenmpt.new.1977/libopenmpt.changes 2025-09-15 19:54:21.602768067 +0200 @@ -1,0 +2,12 @@ +Sun Sep 14 00:00:56 UTC 2025 - Mia Herkt <[email protected]> + +- Update to 0.8.3: + * [Bug] libopenmpt is now compatible with most non-standard + builds of libmpg123 which do not by default output signed + 16bit PCM. + * [Bug] openmpt123: Pausing playback using the space key did + not work since 0.8.0. + * IT: Even when the filter cutoff envelope is stopped before its + first tick is applied, the filter should still be activated. + +------------------------------------------------------------------- Old: ---- libopenmpt-0.8.2+release.autotools.tar.gz New: ---- libopenmpt-0.8.3+release.autotools.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ libopenmpt.spec ++++++ --- /var/tmp/diff_new_pack.mJmnyX/_old 2025-09-15 19:54:22.058787187 +0200 +++ /var/tmp/diff_new_pack.mJmnyX/_new 2025-09-15 19:54:22.058787187 +0200 @@ -1,7 +1,7 @@ # # spec file for package libopenmpt # -# Copyright (c) 2025 SUSE LLC +# Copyright (c) 2025 SUSE LLC and contributors # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -21,7 +21,7 @@ %define libopenmpt_modplug_version 0.8.9.0 Name: libopenmpt -Version: 0.8.2 +Version: 0.8.3 Release: 0 Summary: C++ and C library to decode tracker music files License: BSD-3-Clause ++++++ libopenmpt-0.8.2+release.autotools.tar.gz -> libopenmpt-0.8.3+release.autotools.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.8.2+release.autotools/common/versionNumber.h new/libopenmpt-0.8.3+release.autotools/common/versionNumber.h --- old/libopenmpt-0.8.2+release.autotools/common/versionNumber.h 2025-07-19 12:36:55.000000000 +0200 +++ new/libopenmpt-0.8.3+release.autotools/common/versionNumber.h 2025-09-06 15:30:03.000000000 +0200 @@ -15,5 +15,5 @@ // Version definitions. The only thing that needs to be changed when changing version number. #define VER_MAJORMAJOR 1 #define VER_MAJOR 32 -#define VER_MINOR 03 +#define VER_MINOR 04 #define VER_MINORMINOR 00 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.8.2+release.autotools/configure new/libopenmpt-0.8.3+release.autotools/configure --- old/libopenmpt-0.8.2+release.autotools/configure 2025-07-19 15:11:22.000000000 +0200 +++ new/libopenmpt-0.8.3+release.autotools/configure 2025-09-06 17:39:02.000000000 +0200 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.71 for libopenmpt 0.8.2+release.autotools. +# Generated by GNU Autoconf 2.71 for libopenmpt 0.8.3+release.autotools. # # Report bugs to <https://bugs.openmpt.org/>. # @@ -621,8 +621,8 @@ # Identity of this package. PACKAGE_NAME='libopenmpt' PACKAGE_TARNAME='libopenmpt' -PACKAGE_VERSION='0.8.2+release.autotools' -PACKAGE_STRING='libopenmpt 0.8.2+release.autotools' +PACKAGE_VERSION='0.8.3+release.autotools' +PACKAGE_STRING='libopenmpt 0.8.3+release.autotools' PACKAGE_BUGREPORT='https://bugs.openmpt.org/' PACKAGE_URL='https://lib.openmpt.org/' @@ -1514,7 +1514,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures libopenmpt 0.8.2+release.autotools to adapt to many kinds of systems. +\`configure' configures libopenmpt 0.8.3+release.autotools to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1585,7 +1585,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of libopenmpt 0.8.2+release.autotools:";; + short | recursive ) echo "Configuration of libopenmpt 0.8.3+release.autotools:";; esac cat <<\_ACEOF @@ -1772,7 +1772,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -libopenmpt configure 0.8.2+release.autotools +libopenmpt configure 0.8.3+release.autotools generated by GNU Autoconf 2.71 Copyright (C) 2021 Free Software Foundation, Inc. @@ -2152,7 +2152,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by libopenmpt $as_me 0.8.2+release.autotools, which was +It was created by libopenmpt $as_me 0.8.3+release.autotools, which was generated by GNU Autoconf 2.71. Invocation command line was $ $0$ac_configure_args_raw @@ -3648,7 +3648,7 @@ # Define the identity of the package. PACKAGE='libopenmpt' - VERSION='0.8.2+release.autotools' + VERSION='0.8.3+release.autotools' printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h @@ -23188,13 +23188,13 @@ -printf "%s\n" "#define MPT_SVNURL \"https://source.openmpt.org/svn/openmpt/tags/libopenmpt-0.8.2\"" >>confdefs.h +printf "%s\n" "#define MPT_SVNURL \"https://source.openmpt.org/svn/openmpt/tags/libopenmpt-0.8.3\"" >>confdefs.h -printf "%s\n" "#define MPT_SVNVERSION \"23826\"" >>confdefs.h +printf "%s\n" "#define MPT_SVNVERSION \"24141\"" >>confdefs.h -printf "%s\n" "#define MPT_SVNDATE \"2025-07-19T10:45:24.126020Z\"" >>confdefs.h +printf "%s\n" "#define MPT_SVNDATE \"2025-09-06T13:42:08.986313Z\"" >>confdefs.h printf "%s\n" "#define MPT_PACKAGE true" >>confdefs.h @@ -27166,7 +27166,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by libopenmpt $as_me 0.8.2+release.autotools, which was +This file was extended by libopenmpt $as_me 0.8.3+release.autotools, which was generated by GNU Autoconf 2.71. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -27226,7 +27226,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ -libopenmpt config.status 0.8.2+release.autotools +libopenmpt config.status 0.8.3+release.autotools configured by $0, generated by GNU Autoconf 2.71, with options \\"\$ac_cs_config\\" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.8.2+release.autotools/configure.ac new/libopenmpt-0.8.3+release.autotools/configure.ac --- old/libopenmpt-0.8.2+release.autotools/configure.ac 2025-07-19 15:10:54.000000000 +0200 +++ new/libopenmpt-0.8.3+release.autotools/configure.ac 2025-09-06 17:38:36.000000000 +0200 @@ -1,4 +1,4 @@ -AC_INIT([libopenmpt], [0.8.2+release.autotools], [https://bugs.openmpt.org/], [libopenmpt], [https://lib.openmpt.org/]) +AC_INIT([libopenmpt], [0.8.3+release.autotools], [https://bugs.openmpt.org/], [libopenmpt], [https://lib.openmpt.org/]) AC_PREREQ([2.69]) # we do want 2.70, but distributions are not ready yet #AC_PREREQ([2.70]) @@ -88,9 +88,9 @@ AC_SUBST([LIBOPENMPT_LTVER_REVISION]) AC_SUBST([LIBOPENMPT_LTVER_AGE]) -AC_DEFINE([MPT_SVNURL], ["https://source.openmpt.org/svn/openmpt/tags/libopenmpt-0.8.2"], [svn version]) -AC_DEFINE([MPT_SVNVERSION], ["23826"], [svn version]) -AC_DEFINE([MPT_SVNDATE], ["2025-07-19T10:45:24.126020Z"], [svn date]) +AC_DEFINE([MPT_SVNURL], ["https://source.openmpt.org/svn/openmpt/tags/libopenmpt-0.8.3"], [svn version]) +AC_DEFINE([MPT_SVNVERSION], ["24141"], [svn version]) +AC_DEFINE([MPT_SVNDATE], ["2025-09-06T13:42:08.986313Z"], [svn date]) AC_DEFINE([MPT_PACKAGE], [true], [is package]) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.8.2+release.autotools/doc/libopenmpt/changelog.md new/libopenmpt-0.8.3+release.autotools/doc/libopenmpt/changelog.md --- old/libopenmpt-0.8.2+release.autotools/doc/libopenmpt/changelog.md 2025-07-19 12:45:16.000000000 +0200 +++ new/libopenmpt-0.8.3+release.autotools/doc/libopenmpt/changelog.md 2025-09-06 15:42:06.000000000 +0200 @@ -5,6 +5,27 @@ For fully detailed change log, please see the source repository directly. This is just a high-level summary. +### libopenmpt 0.8.3 (2025-09-06) + + * [**Bug**] libopenmpt is now compatible with most non-standard builds of + libmpg123 which do not by default output signed 16bit PCM. + * [**Bug**] openmpt123: Pausing playback using the space key did not work + since 0.8.0. + * [**Bug**] Windows 10 binaries wrongly targeted Windows 11 22H2. They now + target Windows 10 2004. + * [**Bug**] in_openmpt: in_openmpt for Windows XP or later did not ever work + in Winamp 2.x. We now provide a build specifically for Winamp 2.x in the + `Winamp2/` folder inside the `retro.winxp` package. The `retro.win98` build + was not affected. + + * [**Change**] in_openmpt: Modern and legacy builds of in_openmpt now + officially only support Winamp 5.x. + + * IT: Even when the filter cutoff envelope is stopped before its first tick is + applied, the filter should still be activated. + + * mpg123: Update to v1.33.2 (2025-08-05). + ### libopenmpt 0.8.2 (2025-07-19) * [**Sec**] Possible out-of-bounds sample data read in a specific combination diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.8.2+release.autotools/libopenmpt/libopenmpt_version.h new/libopenmpt-0.8.3+release.autotools/libopenmpt/libopenmpt_version.h --- old/libopenmpt-0.8.2+release.autotools/libopenmpt/libopenmpt_version.h 2025-07-19 12:45:16.000000000 +0200 +++ new/libopenmpt-0.8.3+release.autotools/libopenmpt/libopenmpt_version.h 2025-09-06 15:42:06.000000000 +0200 @@ -21,7 +21,7 @@ /*! \brief libopenmpt minor version number */ #define OPENMPT_API_VERSION_MINOR 8 /*! \brief libopenmpt patch version number */ -#define OPENMPT_API_VERSION_PATCH 2 +#define OPENMPT_API_VERSION_PATCH 3 /*! \brief libopenmpt pre-release tag */ #define OPENMPT_API_VERSION_PREREL "" /*! \brief libopenmpt pre-release flag */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.8.2+release.autotools/libopenmpt/libopenmpt_version.mk new/libopenmpt-0.8.3+release.autotools/libopenmpt/libopenmpt_version.mk --- old/libopenmpt-0.8.2+release.autotools/libopenmpt/libopenmpt_version.mk 2025-07-19 12:45:16.000000000 +0200 +++ new/libopenmpt-0.8.3+release.autotools/libopenmpt/libopenmpt_version.mk 2025-09-06 15:42:06.000000000 +0200 @@ -1,8 +1,8 @@ LIBOPENMPT_VERSION_MAJOR=0 LIBOPENMPT_VERSION_MINOR=8 -LIBOPENMPT_VERSION_PATCH=2 +LIBOPENMPT_VERSION_PATCH=3 LIBOPENMPT_VERSION_PREREL= LIBOPENMPT_LTVER_CURRENT=5 -LIBOPENMPT_LTVER_REVISION=2 +LIBOPENMPT_LTVER_REVISION=3 LIBOPENMPT_LTVER_AGE=5 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.8.2+release.autotools/man/openmpt123.1 new/libopenmpt-0.8.3+release.autotools/man/openmpt123.1 --- old/libopenmpt-0.8.2+release.autotools/man/openmpt123.1 2025-07-19 15:10:52.000000000 +0200 +++ new/libopenmpt-0.8.3+release.autotools/man/openmpt123.1 2025-09-06 17:38:35.000000000 +0200 @@ -1,12 +1,12 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.3. -.TH OPENMPT123 "1" "July 2025" "openmpt123 v0.8.2" "User Commands" +.TH OPENMPT123 "1" "September 2025" "openmpt123 v0.8.3" "User Commands" .SH NAME openmpt123 - command line module music player based on libopenmpt .SH SYNOPSIS .B openmpt123 [\fI\,options\/\fR] [\fI\,--\/\fR] \fI\,file1 \/\fR[\fI\,file2\/\fR] ... .SH DESCRIPTION -openmpt123 v0.8.2, libopenmpt 0.8.2+r23826 (OpenMPT 1.32.03.00 https://source.openmpt.org/svn/openmpt/tags/libopenmpt\-0.8.2@23826 (2025\-07\-19T10:45:24.126020Z) clean) +openmpt123 v0.8.3, libopenmpt 0.8.3+r24141 (OpenMPT 1.32.04.00 https://source.openmpt.org/svn/openmpt/tags/libopenmpt\-0.8.3@24141 (2025\-09\-06T13:42:08.986313Z) clean) Copyright \(co 2013\-2025 OpenMPT Project Developers and Contributors <https://lib.openmpt.org/> .PP openmpt123 plays module music files. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.8.2+release.autotools/openmpt123/openmpt123.cpp new/libopenmpt-0.8.3+release.autotools/openmpt123/openmpt123.cpp --- old/libopenmpt-0.8.2+release.autotools/openmpt123/openmpt123.cpp 2025-07-11 10:23:12.000000000 +0200 +++ new/libopenmpt-0.8.3+release.autotools/openmpt123/openmpt123.cpp 2025-08-11 13:53:15.000000000 +0200 @@ -343,6 +343,9 @@ void write( const std::vector<std::int16_t*> buffers, std::size_t frames ) override { impl->write( buffers, frames ); } + bool pause() override { + return impl->pause(); + } bool unpause() override { return impl->unpause(); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.8.2+release.autotools/soundlib/SampleFormatMP3.cpp new/libopenmpt-0.8.3+release.autotools/soundlib/SampleFormatMP3.cpp --- old/libopenmpt-0.8.2+release.autotools/soundlib/SampleFormatMP3.cpp 2025-06-07 20:02:11.000000000 +0200 +++ new/libopenmpt-0.8.3+release.autotools/soundlib/SampleFormatMP3.cpp 2025-08-03 09:14:03.000000000 +0200 @@ -388,7 +388,7 @@ { return false; } - if((channels != 1 && channels != 2) || (encoding & (MPG123_ENC_16 | MPG123_ENC_SIGNED)) != (MPG123_ENC_16 | MPG123_ENC_SIGNED)) + if((channels != 1) && (channels != 2)) { return false; } @@ -485,7 +485,7 @@ { return false; } - if((channels != 1 && channels != 2) || (encoding & (MPG123_ENC_16 | MPG123_ENC_SIGNED)) != (MPG123_ENC_16 | MPG123_ENC_SIGNED)) + if((channels != 1) && (channels != 2)) { return false; } @@ -553,6 +553,88 @@ { return false; } +#if (MPG123_API_VERSION >= 45) + if(mpg123_param(mh, MPG123_REMOVE_FLAGS, MPG123_FLOAT_FALLBACK, 0.0)) // allow float + { + return false; + } +#endif +#if (MPG123_API_VERSION >= 45) + if(mpg123_format_none(mh)) + { + return false; + } + if(mpg123_format2(mh, 0, MPG123_MONO | MPG123_STEREO, MPG123_ENC_UNSIGNED_8)) + { + return false; + } + if(mpg123_format2(mh, 0, MPG123_MONO | MPG123_STEREO, MPG123_ENC_SIGNED_8)) + { + return false; + } + if(mpg123_format2(mh, 0, MPG123_MONO | MPG123_STEREO, MPG123_ENC_SIGNED_16)) + { + return false; + } + if(mpg123_format2(mh, 0, MPG123_MONO | MPG123_STEREO, MPG123_ENC_SIGNED_24)) + { + return false; + } + if(mpg123_format2(mh, 0, MPG123_MONO | MPG123_STEREO, MPG123_ENC_SIGNED_32)) + { + return false; + } + if(mpg123_format2(mh, 0, MPG123_MONO | MPG123_STEREO, MPG123_ENC_FLOAT_32)) + { + return false; + } + if(mpg123_format2(mh, 0, MPG123_MONO | MPG123_STEREO, MPG123_ENC_FLOAT_64)) + { + return false; + } +#else + const long *rates = nullptr; + size_t num_rates = 0; + mpg123_rates(&rates, &num_rates); + if(rates && (num_rates > 0)) + { + if(mpg123_format_none(mh)) + { + return false; + } + for(std::size_t i = 0; i < num_rates; ++i) + { + if(mpg123_format(mh, rates[i], MPG123_MONO | MPG123_STEREO, MPG123_ENC_UNSIGNED_8)) + { + return false; + } + if(mpg123_format(mh, rates[i], MPG123_MONO | MPG123_STEREO, MPG123_ENC_SIGNED_8)) + { + return false; + } + if(mpg123_format(mh, rates[i], MPG123_MONO | MPG123_STEREO, MPG123_ENC_SIGNED_16)) + { + return false; + } + if(mpg123_format(mh, rates[i], MPG123_MONO | MPG123_STEREO, MPG123_ENC_SIGNED_24)) + { + return false; + } + if(mpg123_format(mh, rates[i], MPG123_MONO | MPG123_STEREO, MPG123_ENC_SIGNED_32)) + { + return false; + } + if(mpg123_format(mh, rates[i], MPG123_MONO | MPG123_STEREO, MPG123_ENC_FLOAT_32)) + { + return false; + } + if(mpg123_format(mh, rates[i], MPG123_MONO | MPG123_STEREO, MPG123_ENC_FLOAT_64)) + { + return false; + } + } + } +#endif #if (MPG123_API_VERSION >= 48) && MPT_USE_MPG123_PORTABLE_API if(mpg123_reader64(mh, ComponentMPG123::FileReaderRead, ComponentMPG123::FileReaderSeek, 0)) { @@ -586,10 +668,41 @@ { return false; } - if((channels != 1 && channels != 2) || (encoding & (MPG123_ENC_16 | MPG123_ENC_SIGNED)) != (MPG123_ENC_16 | MPG123_ENC_SIGNED)) + int samplesize = mpg123_encsize(encoding); + if((channels != 1) && (channels != 2)) { return false; } + if(encoding == 0) + { + MPT_ASSERT(false); + return false; + } else if(encoding == MPG123_ENC_UNSIGNED_8) + { + MPT_ASSERT(samplesize == sizeof(uint8)); + } else if(encoding == MPG123_ENC_SIGNED_8) + { + MPT_ASSERT(samplesize == sizeof(int8)); + } else if(encoding == MPG123_ENC_SIGNED_16) + { + MPT_ASSERT(samplesize == sizeof(int16)); + } else if(encoding == MPG123_ENC_SIGNED_24) + { + MPT_ASSERT(samplesize == sizeof(int24)); + } else if(encoding == MPG123_ENC_SIGNED_32) + { + MPT_ASSERT(samplesize == sizeof(int32)); + } else if(encoding == MPG123_ENC_FLOAT_32) + { + MPT_ASSERT(samplesize == sizeof(somefloat32)); + } else if(encoding == MPG123_ENC_FLOAT_64) + { + MPT_ASSERT(samplesize == sizeof(somefloat64)); + } else + { + MPT_ASSERT(false); + return false; + } mpg123_frameinfo frameinfo; MemsetZero(frameinfo); if(mpg123_info(mh, &frameinfo)) @@ -635,30 +748,69 @@ } std::vector<std::byte> buf_bytes; + std::vector<uint8> buf_samples_u8; + std::vector<int8> buf_samples_s8; + std::vector<int16> buf_samples_s16; + std::vector<int24> buf_samples_s24; + std::vector<int32> buf_samples_s32; + std::vector<somefloat32> buf_samples_f32; + std::vector<somefloat64> buf_samples_f64; std::vector<int16> buf_samples; bool decode_error = false; bool decode_done = false; while(!decode_error && !decode_done) { buf_bytes.resize(mpg123_outblock(mh)); - buf_samples.resize(buf_bytes.size() / sizeof(int16)); #if (MPG123_API_VERSION >= 48) && MPT_USE_MPG123_PORTABLE_API size_t buf_bytes_decoded = 0; #else mpg123_size_t buf_bytes_decoded = 0; #endif int mpg123_read_result = mpg123_read(mh, mpt::byte_cast<unsigned char*>(buf_bytes.data()), buf_bytes.size(), &buf_bytes_decoded); - std::memcpy(buf_samples.data(), buf_bytes.data(), buf_bytes_decoded); - mpt::append(data, buf_samples.data(), buf_samples.data() + buf_bytes_decoded / sizeof(int16)); - if((data.size() / channels) > MAX_SAMPLE_LENGTH) - { - break; - } if(mpg123_read_result == MPG123_OK) { // continue } else if(mpg123_read_result == MPG123_NEW_FORMAT) { + if(mpg123_getformat(mh, &rate, &channels, &encoding)) + { + decode_error = true; + } + samplesize = mpg123_encsize(encoding); + if((channels != 1) && (channels != 2)) + { + decode_error = true; + } + if(encoding == 0) + { + MPT_ASSERT(false); + decode_error = true; + } else if(encoding == MPG123_ENC_UNSIGNED_8) + { + MPT_ASSERT(samplesize == sizeof(uint8)); + } else if(encoding == MPG123_ENC_SIGNED_8) + { + MPT_ASSERT(samplesize == sizeof(int8)); + } else if(encoding == MPG123_ENC_SIGNED_16) + { + MPT_ASSERT(samplesize == sizeof(int16)); + } else if(encoding == MPG123_ENC_SIGNED_24) + { + MPT_ASSERT(samplesize == sizeof(int24)); + } else if(encoding == MPG123_ENC_SIGNED_32) + { + MPT_ASSERT(samplesize == sizeof(int32)); + } else if(encoding == MPG123_ENC_FLOAT_32) + { + MPT_ASSERT(samplesize == sizeof(somefloat32)); + } else if(encoding == MPG123_ENC_FLOAT_64) + { + MPT_ASSERT(samplesize == sizeof(somefloat64)); + } else + { + MPT_ASSERT(false); + decode_error = true; + } // continue } else if(mpg123_read_result == MPG123_DONE) { @@ -667,6 +819,66 @@ { decode_error = true; } + if(decode_error) + { + break; + } + const std::size_t num_frames = buf_bytes_decoded / (samplesize * channels); + buf_samples.resize(num_frames * channels); + if(encoding == 0) + { + MPT_ASSERT(false); + } else if(encoding == MPG123_ENC_UNSIGNED_8) + { + MPT_ASSERT(samplesize == sizeof(uint8)); + buf_samples_u8.resize(num_frames * channels); + std::memcpy(buf_samples_u8.data(), buf_bytes.data(), num_frames * channels * samplesize); + CopyAudio(mpt::audio_span_interleaved<int16>(buf_samples.data(), channels, num_frames), mpt::audio_span_interleaved<uint8>(buf_samples_u8.data(), channels, num_frames)); + } else if(encoding == MPG123_ENC_SIGNED_8) + { + MPT_ASSERT(samplesize == sizeof(int8)); + buf_samples_s8.resize(num_frames * channels); + std::memcpy(buf_samples_s8.data(), buf_bytes.data(), num_frames * channels * samplesize); + CopyAudio(mpt::audio_span_interleaved<int16>(buf_samples.data(), channels, num_frames), mpt::audio_span_interleaved<int8>(buf_samples_s8.data(), channels, num_frames)); + } else if(encoding == MPG123_ENC_SIGNED_16) + { + MPT_ASSERT(samplesize == sizeof(int16)); + buf_samples_s16.resize(num_frames * channels); + std::memcpy(buf_samples_s16.data(), buf_bytes.data(), num_frames * channels * samplesize); + CopyAudio(mpt::audio_span_interleaved<int16>(buf_samples.data(), channels, num_frames), mpt::audio_span_interleaved<int16>(buf_samples_s16.data(), channels, num_frames)); + } else if(encoding == MPG123_ENC_SIGNED_24) + { + MPT_ASSERT(samplesize == sizeof(int24)); + buf_samples_s24.resize(num_frames * channels); + std::memcpy(buf_samples_s24.data(), buf_bytes.data(), num_frames * channels * samplesize); + CopyAudio(mpt::audio_span_interleaved<int16>(buf_samples.data(), channels, num_frames), mpt::audio_span_interleaved<int24>(buf_samples_s24.data(), channels, num_frames)); + } else if(encoding == MPG123_ENC_SIGNED_32) + { + MPT_ASSERT(samplesize == sizeof(int32)); + buf_samples_s32.resize(num_frames * channels); + std::memcpy(buf_samples_s32.data(), buf_bytes.data(), num_frames * channels * samplesize); + CopyAudio(mpt::audio_span_interleaved<int16>(buf_samples.data(), channels, num_frames), mpt::audio_span_interleaved<int32>(buf_samples_s32.data(), channels, num_frames)); + } else if(encoding == MPG123_ENC_FLOAT_32) + { + MPT_ASSERT(samplesize == sizeof(somefloat32)); + buf_samples_f32.resize(num_frames * channels); + std::memcpy(buf_samples_f32.data(), buf_bytes.data(), num_frames * channels * samplesize); + CopyAudio(mpt::audio_span_interleaved<int16>(buf_samples.data(), channels, num_frames), mpt::audio_span_interleaved<somefloat32>(buf_samples_f32.data(), channels, num_frames)); + } else if(encoding == MPG123_ENC_FLOAT_64) + { + MPT_ASSERT(samplesize == sizeof(somefloat64)); + buf_samples_f64.resize(num_frames * channels); + std::memcpy(buf_samples_f64.data(), buf_bytes.data(), num_frames * channels * samplesize); + CopyAudio(mpt::audio_span_interleaved<int16>(buf_samples.data(), channels, num_frames), mpt::audio_span_interleaved<somefloat64>(buf_samples_f64.data(), channels, num_frames)); + } else + { + MPT_ASSERT(false); + } + mpt::append(data, buf_samples.data(), buf_samples.data() + (num_frames * channels)); + if((data.size() / channels) > MAX_SAMPLE_LENGTH) + { + break; + } } if((data.size() / channels) > MAX_SAMPLE_LENGTH) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.8.2+release.autotools/soundlib/Snd_defs.h new/libopenmpt-0.8.3+release.autotools/soundlib/Snd_defs.h --- old/libopenmpt-0.8.2+release.autotools/soundlib/Snd_defs.h 2025-07-12 23:07:46.000000000 +0200 +++ new/libopenmpt-0.8.3+release.autotools/soundlib/Snd_defs.h 2025-08-31 17:10:41.000000000 +0200 @@ -619,6 +619,7 @@ kFT2OffsetMemoryRequiresNote, // Offset memory is only updated when offset command is next to a note kITNoteCutWithPorta, // Note Cut (SCx) resets note frequency and interacts with tone portamento with row delay kITVolColNoSlidePropagation, // Don't propagate volume command c/d parameter to regular command D memory + kITStoppedFilterEnvAtStart, // Stopped filter envelope is still applied even when its first tick has not been processed yet // Add new play behaviours here. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.8.2+release.autotools/soundlib/Sndfile.cpp new/libopenmpt-0.8.3+release.autotools/soundlib/Sndfile.cpp --- old/libopenmpt-0.8.2+release.autotools/soundlib/Sndfile.cpp 2025-07-12 23:07:46.000000000 +0200 +++ new/libopenmpt-0.8.3+release.autotools/soundlib/Sndfile.cpp 2025-08-31 17:10:41.000000000 +0200 @@ -1229,6 +1229,7 @@ playBehaviour.set(kITCarryAfterNoteOff); playBehaviour.set(kITNoteCutWithPorta); playBehaviour.set(kITVolColNoSlidePropagation); + playBehaviour.set(kITStoppedFilterEnvAtStart); break; case MOD_TYPE_XM: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.8.2+release.autotools/soundlib/Sndmix.cpp new/libopenmpt-0.8.3+release.autotools/soundlib/Sndmix.cpp --- old/libopenmpt-0.8.2+release.autotools/soundlib/Sndmix.cpp 2025-01-19 23:08:35.000000000 +0100 +++ new/libopenmpt-0.8.3+release.autotools/soundlib/Sndmix.cpp 2025-09-01 20:04:53.000000000 +0200 @@ -1176,7 +1176,12 @@ if(m_playBehaviour[kITEnvelopePositionHandling] && chn.PitchEnv.nEnvPosition == 0) { // If the envelope is disabled at the very same moment as it is triggered, we do not process anything. - return -1; + // However, Impulse Tracker still applies the filter settings as if the envelope was at its midway. + // Test case: S7B_StillAppliesFilter.it + if(m_playBehaviour[kITStoppedFilterEnvAtStart] && chn.PitchEnv.flags[ENV_FILTER]) + return SetupChannelFilter(chn, !chn.dwFlags[CHN_FILTER], 0); + else + return -1; } const int envpos = chn.PitchEnv.nEnvPosition - (m_playBehaviour[kITEnvelopePositionHandling] ? 1 : 0); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.8.2+release.autotools/soundlib/UpgradeModule.cpp new/libopenmpt-0.8.3+release.autotools/soundlib/UpgradeModule.cpp --- old/libopenmpt-0.8.2+release.autotools/soundlib/UpgradeModule.cpp 2025-07-12 23:07:46.000000000 +0200 +++ new/libopenmpt-0.8.3+release.autotools/soundlib/UpgradeModule.cpp 2025-08-31 17:10:41.000000000 +0200 @@ -605,6 +605,7 @@ { kITCarryAfterNoteOff, MPT_V("1.32.00.40") }, { kITNoteCutWithPorta, MPT_V("1.32.01.02") }, { kITVolColNoSlidePropagation, MPT_V("1.32.02.03") }, + { kITStoppedFilterEnvAtStart, MPT_V("1.32.03.04") }, }; for(const auto &b : behaviours) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.8.2+release.autotools/soundlib/pattern.cpp new/libopenmpt-0.8.3+release.autotools/soundlib/pattern.cpp --- old/libopenmpt-0.8.2+release.autotools/soundlib/pattern.cpp 2025-05-04 20:45:19.000000000 +0200 +++ new/libopenmpt-0.8.3+release.autotools/soundlib/pattern.cpp 2025-08-29 22:31:11.000000000 +0200 @@ -655,6 +655,8 @@ mpt::IO::ReadIntLE<uint8>(iStrm, size); iStrm.ignore(size); } + if(!m.IsPcNote()) + m.Clear(); } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.8.2+release.autotools/soundlib/plugins/PluginManager.cpp new/libopenmpt-0.8.3+release.autotools/soundlib/plugins/PluginManager.cpp --- old/libopenmpt-0.8.2+release.autotools/soundlib/plugins/PluginManager.cpp 2025-03-10 11:58:03.000000000 +0100 +++ new/libopenmpt-0.8.3+release.autotools/soundlib/plugins/PluginManager.cpp 2025-07-20 18:31:16.000000000 +0200 @@ -397,7 +397,7 @@ DWORD datatype = REG_SZ; DWORD datasize = sizeof(name); - if(ERROR_SUCCESS == RegQueryValueEx(hksub, nullptr, 0, &datatype, (LPBYTE)name, &datasize)) + if(ERROR_SUCCESS == RegQueryValueEx(hksub, nullptr, 0, &datatype, reinterpret_cast<LPBYTE>(name), &datasize)) { auto &plug = pluginList.emplace_back(std::make_unique<VSTPluginLib>(DMOPlugin::Create, true, mpt::PathString::FromNative(mpt::GUIDToString(clsid)), mpt::PathString::FromNative(ParseMaybeNullTerminatedStringFromBufferWithSizeInBytes<mpt::winstring>(name, datasize)))); plug->pluginId1 = kDmoMagic; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.8.2+release.autotools/src/mpt/base/detect_os.hpp new/libopenmpt-0.8.3+release.autotools/src/mpt/base/detect_os.hpp --- old/libopenmpt-0.8.2+release.autotools/src/mpt/base/detect_os.hpp 2025-01-03 16:57:34.000000000 +0100 +++ new/libopenmpt-0.8.3+release.autotools/src/mpt/base/detect_os.hpp 2025-08-14 15:32:54.000000000 +0200 @@ -41,25 +41,48 @@ #define MPT_WIN_8 MPT_WIN_MAKE_VERSION(0x06, 0x02, 0x00, 0x00) #define MPT_WIN_81 MPT_WIN_MAKE_VERSION(0x06, 0x03, 0x00, 0x00) -#define MPT_WIN_10_PRE MPT_WIN_MAKE_VERSION(0x06, 0x04, 0x00, 0x00) -#define MPT_WIN_10 MPT_WIN_MAKE_VERSION(0x0a, 0x00, 0x00, 0x00) // NTDDI_WIN10 1507 -#define MPT_WIN_10_1511 MPT_WIN_MAKE_VERSION(0x0a, 0x00, 0x00, 0x01) // NTDDI_WIN10_TH2 1511 -#define MPT_WIN_10_1607 MPT_WIN_MAKE_VERSION(0x0a, 0x00, 0x00, 0x02) // NTDDI_WIN10_RS1 1607 -#define MPT_WIN_10_1703 MPT_WIN_MAKE_VERSION(0x0a, 0x00, 0x00, 0x03) // NTDDI_WIN10_RS2 1703 -#define MPT_WIN_10_1709 MPT_WIN_MAKE_VERSION(0x0a, 0x00, 0x00, 0x04) // NTDDI_WIN10_RS3 1709 -#define MPT_WIN_10_1803 MPT_WIN_MAKE_VERSION(0x0a, 0x00, 0x00, 0x05) // NTDDI_WIN10_RS4 1803 -#define MPT_WIN_10_1809 MPT_WIN_MAKE_VERSION(0x0a, 0x00, 0x00, 0x06) // NTDDI_WIN10_RS5 1809 -#define MPT_WIN_10_1903 MPT_WIN_MAKE_VERSION(0x0a, 0x00, 0x00, 0x07) // NTDDI_WIN10_19H1 1903/19H1 -#define MPT_WIN_10_1909 MPT_WIN_MAKE_VERSION(0x0a, 0x00, 0x00, 0x08) // NTDDI_WIN10_VB 1909/19H2 -#define MPT_WIN_10_2004 MPT_WIN_MAKE_VERSION(0x0a, 0x00, 0x00, 0x09) // NTDDI_WIN10_MN 2004/20H1 -#define MPT_WIN_10_20H2 MPT_WIN_MAKE_VERSION(0x0a, 0x00, 0x00, 0x0a) // NTDDI_WIN10_FE 20H2 -#define MPT_WIN_10_21H1 MPT_WIN_MAKE_VERSION(0x0a, 0x00, 0x00, 0x0b) // NTDDI_WIN10_CO 21H1 -#define MPT_WIN_10_21H2 MPT_WIN_MAKE_VERSION(0x0a, 0x00, 0x00, 0x0c) // NTDDI_WIN10_NI 21H2 -#define MPT_WIN_10_22H2 MPT_WIN_MAKE_VERSION(0x0a, 0x00, 0x00, 0x0d) // NTDDI_WIN10_CU 22H2 - -#define MPT_WIN_11 MPT_WIN_MAKE_VERSION(0x0a, 0x00, 0x00, 0x0e) // NTDDI_WIN11_ZN 21H2 -#define MPT_WIN_11_22H2 MPT_WIN_MAKE_VERSION(0x0a, 0x00, 0x00, 0x0f) // NTDDI_WIN11_GA 22H2 -#define MPT_WIN_11_23H2 MPT_WIN_MAKE_VERSION(0x0a, 0x00, 0x00, 0x10) // NTDDI_WIN11_GE 23H2 +// Now, this is some very elaborate serious clusterfuck with basically no documentation. + +// https://blog.yuo.be/2025/02/12/what-do-all-the-recent-ntddi-version-values-mean/ +// https://learn.microsoft.com/en-gb/windows/win32/winprog/using-the-windows-headers#macros-for-conditional-declarations +// https://en.wikipedia.org/wiki/Windows_10_version_history +// https://en.wikipedia.org/wiki/Windows_11_version_history +// https://www.windowslatest.com/2021/09/03/windows-11-build-22449-is-now-available-with-new-loading-animation/ + +// Release NTDDI-version NTDDI-constant Release Build.Sub Codename Semester Semester Semester Marketing-Name min-SDK-Version WDK_NTDDI_VERSION +// .Version Codename Date + +#define MPT_WIN_10_PRE MPT_WIN_MAKE_VERSION(0x06, 0x04, 0x00, 0x00) // Threshold - - +#define MPT_WIN_10 MPT_WIN_MAKE_VERSION(0x0a, 0x00, 0x00, 0x00) // NTDDI_WIN10 Win10.1507 10240 Threshold 1507 - 10.0.19041.0 NTDDI_WIN10_VB +#define MPT_WIN_10_1511 MPT_WIN_MAKE_VERSION(0x0a, 0x00, 0x00, 0x01) // NTDDI_WIN10_TH2 Win10.1511 10586 Threshold 2 1511 November Update 10.0.19041.0 NTDDI_WIN10_VB +#define MPT_WIN_10_1607 MPT_WIN_MAKE_VERSION(0x0a, 0x00, 0x00, 0x02) // NTDDI_WIN10_RS1 Win10.1607 14393 Redstone 1607 Anniversary Update 10.0.19041.0 NTDDI_WIN10_VB +#define MPT_WIN_10_1703 MPT_WIN_MAKE_VERSION(0x0a, 0x00, 0x00, 0x03) // NTDDI_WIN10_RS2 Win10.1703 15063 Redstone 2 1703 Creators Update 10.0.19041.0 NTDDI_WIN10_VB +#define MPT_WIN_10_1709 MPT_WIN_MAKE_VERSION(0x0a, 0x00, 0x00, 0x04) // NTDDI_WIN10_RS3 Win10.1709 16299 Redstone 3 1709 Fall Creators Update 10.0.19041.0 NTDDI_WIN10_VB +#define MPT_WIN_10_1803 MPT_WIN_MAKE_VERSION(0x0a, 0x00, 0x00, 0x05) // NTDDI_WIN10_RS4 Win10.1803 17134 Redstone 4 1803 April 2018 Update 10.0.19041.0 NTDDI_WIN10_VB +#define MPT_WIN_10_1809 MPT_WIN_MAKE_VERSION(0x0a, 0x00, 0x00, 0x06) // NTDDI_WIN10_RS5 Win10.1809 17763 Redstone 5 1809 October 2018 Update 10.0.19041.0 NTDDI_WIN10_VB +#define MPT_WIN_10_1903 MPT_WIN_MAKE_VERSION(0x0a, 0x00, 0x00, 0x07) // NTDDI_WIN10_19H1 Win10.1903 18362 Titanium R1 Titanium 19H1 May 2019 Update 10.0.19041.0 NTDDI_WIN10_VB +// MPT_WIN_10_1909 MPT_WIN_MAKE_VERSION(0x0a, 0x00, 0x00, 0x07) // Win10.1909 18363 Titanium R2 Vanadium 19H2 November 2019 Update 10.0.19041.0 NTDDI_WIN10_VB +#define MPT_WIN_10_2004 MPT_WIN_MAKE_VERSION(0x0a, 0x00, 0x00, 0x08) // NTDDI_WIN10_VB Win10.2004 19041 Vibranium R1 Vibranium 20H1 May 2020 Update 10.0.19041.0 NTDDI_WIN10_VB +// MPT_WIN_10_20H2 MPT_WIN_MAKE_VERSION(0x0a, 0x00, 0x00, 0x08) // Win10.20H2 19042 Vibranium R2 Manganese 20H2 October 2020 Update 10.0.19041.0 NTDDI_WIN10_VB +// MPT_WIN_10_21H1 MPT_WIN_MAKE_VERSION(0x0a, 0x00, 0x00, 0x08) // Win10.21H1 19043 Vibranium R3 Iron 21H1 May 2021 Update 10.0.19041.0 NTDDI_WIN10_VB +// MPT_WIN_10_21H2 MPT_WIN_MAKE_VERSION(0x0a, 0x00, 0x00, 0x08) // Win10.21H2 19044 Vibranium R4 Cobalt 21H2 November 2021 Update 10.0.19041.0 NTDDI_WIN10_VB +// MPT_WIN_10_22H2 MPT_WIN_MAKE_VERSION(0x0a, 0x00, 0x00, 0x08) // Win10.22H2 19045 Vibranium R5 Nickel 22H2 2022 Update 10.0.19041.0 NTDDI_WIN10_VB + +// MPT_WIN_MAKE_VERSION(0x0a, 0x00, 0x00, 0x09) // NTDDI_WIN10_MN 20H2 Manganese 20H2 10.0.22621.? NTDDI_WIN10_NI +// MPT_WIN_MAKE_VERSION(0x0a, 0x00, 0x00, 0x0a) // NTDDI_WIN10_FE 21H1 Iron 21H1 10.0.22621.? NTDDI_WIN10_NI +#define MPT_WIN_11 MPT_WIN_MAKE_VERSION(0x0a, 0x00, 0x00, 0x0b) // NTDDI_WIN10_CO Win11.21H2 22000 Sun Valley Cobalt Cobalt 21H2 - 10.0.22621.? NTDDI_WIN10_NI +#define MPT_WIN_11_22H2 MPT_WIN_MAKE_VERSION(0x0a, 0x00, 0x00, 0x0c) // NTDDI_WIN10_NI Win11.22H2 22621 Sun Valley 2 Nickel R1 Nickel 22H2 2022 Update 10.0.22621.? NTDDI_WIN10_NI +// MPT_WIN_MAKE_VERSION(0x0a, 0x00, 0x00, 0x0c) // Win11.22H2 22621.675 Sun Valley 2 Nickel R1 Nickel 22H2 2022 Update Moment 1 10.0.22621.? NTDDI_WIN10_NI +// MPT_WIN_MAKE_VERSION(0x0a, 0x00, 0x00, 0x0c) // Win11.22H2 22621.1344 Sun Valley 2 Nickel R1 Nickel 22H2 2022 Update Moment 2 10.0.22621.? NTDDI_WIN10_NI +// MPT_WIN_MAKE_VERSION(0x0a, 0x00, 0x00, 0x0c) // Win11.22H2 22621.1778 Sun Valley 2 Nickel R1 Nickel 22H2 2022 Update Moment 3 10.0.22621.? NTDDI_WIN10_NI +// MPT_WIN_MAKE_VERSION(0x0a, 0x00, 0x00, 0x0c) // Win11.22H2 22621.2361 Sun Valley 2 Nickel R1 Nickel 22H2 2022 Update Moment 4 10.0.22621.? NTDDI_WIN10_NI +// MPT_WIN_MAKE_VERSION(0x0a, 0x00, 0x00, 0x0c) // Win11.22H2 22621.3235 Sun Valley 2 Nickel R1 Nickel 22H2 2022 Update Moment 5 10.0.22621.? NTDDI_WIN10_NI +// MPT_WIN_11_23H2 MPT_WIN_MAKE_VERSION(0x0a, 0x00, 0x00, 0x0c) // Win11.23H2 22631 Sun Valley 3 Nickel R2 Zinc 23H2 2023 Update 10.0.22621.? NTDDI_WIN10_NI +// MPT_WIN_MAKE_VERSION(0x0a, 0x00, 0x00, 0x0c) // Win11.23H2 22631.3235 Sun Valley 3 Nickel R2 Zinc 23H2 2023 Update Moment 5 10.0.22621.? NTDDI_WIN10_NI +// MPT_WIN_MAKE_VERSION(0x0a, 0x00, 0x00, 0x0d) // NTDDI_WIN10_CU 23H1 Copper 23H1 10.0.26100.? NTDDI_WIN11_GE +// MPT_WIN_MAKE_VERSION(0x0a, 0x00, 0x00, 0x0e) // NTDDI_WIN11_ZN 23H2 Zinc 23H2 10.0.26100.? NTDDI_WIN11_GE +// MPT_WIN_MAKE_VERSION(0x0a, 0x00, 0x00, 0x0f) // NTDDI_WIN11_GA 24H1 Gallium 24H1 10.0.26100.? NTDDI_WIN11_GE +#define MPT_WIN_11_24H2 MPT_WIN_MAKE_VERSION(0x0a, 0x00, 0x00, 0x10) // NTDDI_WIN11_GE Win11.24H2 26100 Hudson Valley Germanium R1 Germanium 24H2 2024 Update 10.0.26100.? NTDDI_WIN11_GE // MPT_WIN_API_DESKTOP : Windows 8/10 Desktop Application (Win32) // MPT_WIN_API_UNIVERSAL : Windows 10 Store App / Universal App @@ -225,32 +248,50 @@ #ifdef NTDDI_WIN10_19H1 static_assert(NTDDI_WIN10_19H1 == MPT_WIN_10_1903); #endif +//#ifdef NTDDI_WIN10_19H1 +//static_assert(NTDDI_WIN10_19H1 == MPT_WIN_10_1909); +//#endif #ifdef NTDDI_WIN10_VB -static_assert(NTDDI_WIN10_VB == MPT_WIN_10_1909); -#endif -#ifdef NTDDI_WIN10_MN -static_assert(NTDDI_WIN10_MN == MPT_WIN_10_2004); -#endif -#ifdef NTDDI_WIN10_FE -static_assert(NTDDI_WIN10_FE == MPT_WIN_10_20H2); +static_assert(NTDDI_WIN10_VB == MPT_WIN_10_2004); #endif +//#ifdef NTDDI_WIN10_VB +//static_assert(NTDDI_WIN10_VB == MPT_WIN_10_20H2); +//#endif +//#ifdef NTDDI_WIN10_VB +//static_assert(NTDDI_WIN10_VB == MPT_WIN_10_21H1); +//#endif +//#ifdef NTDDI_WIN10_VB +//static_assert(NTDDI_WIN10_VB == MPT_WIN_10_21H2); +//#endif +//#ifdef NTDDI_WIN10_VB +//static_assert(NTDDI_WIN10_VB == MPT_WIN_10_22H2); +//#endif +//#ifdef NTDDI_WIN10_MN +//static_assert(NTDDI_WIN10_MN == ???); +//#endif +//#ifdef NTDDI_WIN10_FE +//static_assert(NTDDI_WIN10_FE == ???); +//#endif #ifdef NTDDI_WIN10_CO -static_assert(NTDDI_WIN10_CO == MPT_WIN_10_21H1); +static_assert(NTDDI_WIN10_CO == MPT_WIN_11); #endif #ifdef NTDDI_WIN10_NI -static_assert(NTDDI_WIN10_NI == MPT_WIN_10_21H2); -#endif -#ifdef NTDDI_WIN10_CU -static_assert(NTDDI_WIN10_CU == MPT_WIN_10_22H2); -#endif -#ifdef NTDDI_WIN11_ZN -static_assert(NTDDI_WIN11_ZN == MPT_WIN_11); -#endif -#ifdef NTDDI_WIN11_GA -static_assert(NTDDI_WIN11_GA == MPT_WIN_11_22H2); +static_assert(NTDDI_WIN10_NI == MPT_WIN_11_22H2); #endif +//#ifdef NTDDI_WIN10_NI +//static_assert(NTDDI_WIN10_NI == MPT_WIN_11_23H2); +//#endif +//#ifdef NTDDI_WIN10_CU +//static_assert(NTDDI_WIN10_CU == ???); +//#endif +//#ifdef NTDDI_WIN10_ZN +//static_assert(NTDDI_WIN10_ZN == ???); +//#endif +//#ifdef NTDDI_WIN11_GA +//static_assert(NTDDI_WIN11_GA == ???); +//#endif #ifdef NTDDI_WIN11_GE -static_assert(NTDDI_WIN11_GE == MPT_WIN_11_23H2); +static_assert(NTDDI_WIN11_GE == MPT_WIN_11_24H2); #endif #endif #if defined(WINAPI_FAMILY) @@ -321,6 +362,9 @@ #define MPT_WIN_AT_LEAST(v) 0 #define MPT_WIN_BEFORE(v) 1 #endif +#if (MPT_OS_WINDOWS_WINNT || MPT_OS_WINDOWS_WINRT) && defined(WDK_NTDDI_VERSION) +static_assert(WDK_NTDDI_VERSION >= MPT_WIN_VERSION); +#endif #elif defined(__APPLE__) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libopenmpt-0.8.2+release.autotools/src/mpt/osinfo/windows_version.hpp new/libopenmpt-0.8.3+release.autotools/src/mpt/osinfo/windows_version.hpp --- old/libopenmpt-0.8.2+release.autotools/src/mpt/osinfo/windows_version.hpp 2024-08-15 20:45:56.000000000 +0200 +++ new/libopenmpt-0.8.3+release.autotools/src/mpt/osinfo/windows_version.hpp 2025-08-14 15:32:23.000000000 +0200 @@ -131,24 +131,26 @@ static mpt::osinfo::windows::Version FromSDK() noexcept { // Initialize to used SDK version -#if MPT_WINNT_AT_LEAST(MPT_WIN_11_23H2) - return mpt::osinfo::windows::Version(mpt::osinfo::windows::Version::Win10, mpt::osinfo::windows::Version::ServicePack(0, 0), 22631, 0); +#if MPT_WINNT_AT_LEAST(MPT_WIN_11_24H2) + return mpt::osinfo::windows::Version(mpt::osinfo::windows::Version::Win10, mpt::osinfo::windows::Version::ServicePack(0, 0), 26100, 0); +//#elif MPT_WINNT_AT_LEAST(MPT_WIN_11_23H2) +// return mpt::osinfo::windows::Version(mpt::osinfo::windows::Version::Win10, mpt::osinfo::windows::Version::ServicePack(0, 0), 22631, 0); #elif MPT_WINNT_AT_LEAST(MPT_WIN_11_22H2) return mpt::osinfo::windows::Version(mpt::osinfo::windows::Version::Win10, mpt::osinfo::windows::Version::ServicePack(0, 0), 22621, 0); #elif MPT_WINNT_AT_LEAST(MPT_WIN_11) // 21H2 return mpt::osinfo::windows::Version(mpt::osinfo::windows::Version::Win10, mpt::osinfo::windows::Version::ServicePack(0, 0), 22000, 0); -#elif MPT_WINNT_AT_LEAST(MPT_WIN_10_22H2) - return mpt::osinfo::windows::Version(mpt::osinfo::windows::Version::Win10, mpt::osinfo::windows::Version::ServicePack(0, 0), 19045, 0); -#elif MPT_WINNT_AT_LEAST(MPT_WIN_10_21H2) - return mpt::osinfo::windows::Version(mpt::osinfo::windows::Version::Win10, mpt::osinfo::windows::Version::ServicePack(0, 0), 19044, 0); -#elif MPT_WINNT_AT_LEAST(MPT_WIN_10_21H1) - return mpt::osinfo::windows::Version(mpt::osinfo::windows::Version::Win10, mpt::osinfo::windows::Version::ServicePack(0, 0), 19043, 0); -#elif MPT_WINNT_AT_LEAST(MPT_WIN_10_20H2) - return mpt::osinfo::windows::Version(mpt::osinfo::windows::Version::Win10, mpt::osinfo::windows::Version::ServicePack(0, 0), 19042, 0); +//#elif MPT_WINNT_AT_LEAST(MPT_WIN_10_22H2) +// return mpt::osinfo::windows::Version(mpt::osinfo::windows::Version::Win10, mpt::osinfo::windows::Version::ServicePack(0, 0), 19045, 0); +//#elif MPT_WINNT_AT_LEAST(MPT_WIN_10_21H2) +// return mpt::osinfo::windows::Version(mpt::osinfo::windows::Version::Win10, mpt::osinfo::windows::Version::ServicePack(0, 0), 19044, 0); +//#elif MPT_WINNT_AT_LEAST(MPT_WIN_10_21H1) +// return mpt::osinfo::windows::Version(mpt::osinfo::windows::Version::Win10, mpt::osinfo::windows::Version::ServicePack(0, 0), 19043, 0); +//#elif MPT_WINNT_AT_LEAST(MPT_WIN_10_20H2) +// return mpt::osinfo::windows::Version(mpt::osinfo::windows::Version::Win10, mpt::osinfo::windows::Version::ServicePack(0, 0), 19042, 0); #elif MPT_WINNT_AT_LEAST(MPT_WIN_10_2004) return mpt::osinfo::windows::Version(mpt::osinfo::windows::Version::Win10, mpt::osinfo::windows::Version::ServicePack(0, 0), 19041, 0); -#elif MPT_WINNT_AT_LEAST(MPT_WIN_10_1909) - return mpt::osinfo::windows::Version(mpt::osinfo::windows::Version::Win10, mpt::osinfo::windows::Version::ServicePack(0, 0), 18363, 0); +//#elif MPT_WINNT_AT_LEAST(MPT_WIN_10_1909) +// return mpt::osinfo::windows::Version(mpt::osinfo::windows::Version::Win10, mpt::osinfo::windows::Version::ServicePack(0, 0), 18363, 0); #elif MPT_WINNT_AT_LEAST(MPT_WIN_10_1903) return mpt::osinfo::windows::Version(mpt::osinfo::windows::Version::Win10, mpt::osinfo::windows::Version::ServicePack(0, 0), 18362, 0); #elif MPT_WINNT_AT_LEAST(MPT_WIN_10_1809)
