From: <sv...@op...> - 2024-03-17 18:00:36
|
Author: sagamusix Date: Sun Mar 17 19:00:20 2024 New Revision: 20417 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=20417 Log: [Mod] Increase internal pattern row count limit from 1024 to 4096. This allows some MED files with longer patterns to be loaded properly (e.g. crybaby 5.mmd3, mellodrone.mmd3, see https://www.un4seen.com/forum/?topic=15448.msg142562#msg142562). For XM/IT/MPTM, the maximum pattern length the user can choose remains at 1024 for now. Modified: trunk/OpenMPT/mptrack/Mpdlgs.cpp trunk/OpenMPT/mptrack/TrackerSettings.cpp trunk/OpenMPT/soundlib/Load_mid.cpp trunk/OpenMPT/soundlib/Snd_defs.h Modified: trunk/OpenMPT/mptrack/Mpdlgs.cpp ============================================================================== --- trunk/OpenMPT/mptrack/Mpdlgs.cpp Sun Mar 17 17:34:14 2024 (r20416) +++ trunk/OpenMPT/mptrack/Mpdlgs.cpp Sun Mar 17 19:00:20 2024 (r20417) @@ -20,6 +20,7 @@ #include "WindowMessages.h" #include "../common/Dither.h" #include "../common/mptStringBuffer.h" +#include "../soundlib/mod_specifications.h" #include "mpt/parse/parse.hpp" #include "openmpt/sounddevice/SoundDevice.hpp" #include "openmpt/sounddevice/SoundDeviceManager.hpp" @@ -1790,8 +1791,8 @@ m_Quantize.SetCurSel(item); } } - m_SpinSpd.SetRange(2, 16); - m_SpinPat.SetRange(1, MAX_PATTERN_ROWS); + m_SpinSpd.SetRange32(2, 16); + m_SpinPat.SetRange32(ModSpecs::mptm.patternRowsMin, ModSpecs::mptm.patternRowsMax); return TRUE; } @@ -1871,8 +1872,11 @@ GetDlgItemText(IDC_EDIT4, cc); TrackerSettings::Instance().midiIgnoreCCs = StringToIgnoredCCs(mpt::ToUnicode(cc)); - TrackerSettings::Instance().midiImportTicks = static_cast<uint8>(Clamp(GetDlgItemInt(IDC_EDIT1), uint8(2), uint8(16))); - TrackerSettings::Instance().midiImportPatternLen = Clamp(GetDlgItemInt(IDC_EDIT2), ROWINDEX(1), MAX_PATTERN_ROWS); + int minVal, maxVal; + m_SpinSpd.GetRange32(minVal, maxVal); + TrackerSettings::Instance().midiImportTicks = static_cast<uint8>(Clamp(static_cast<int>(GetDlgItemInt(IDC_EDIT1)), minVal, maxVal)); + m_SpinPat.GetRange32(minVal, maxVal); + TrackerSettings::Instance().midiImportPatternLen = static_cast<ROWINDEX>(Clamp(static_cast<int>(GetDlgItemInt(IDC_EDIT2)), minVal, maxVal)); if(m_Quantize.GetCurSel() != -1) { TrackerSettings::Instance().midiImportQuantize = static_cast<uint32>(m_Quantize.GetItemData(m_Quantize.GetCurSel())); Modified: trunk/OpenMPT/mptrack/TrackerSettings.cpp ============================================================================== --- trunk/OpenMPT/mptrack/TrackerSettings.cpp Sun Mar 17 17:34:14 2024 (r20416) +++ trunk/OpenMPT/mptrack/TrackerSettings.cpp Sun Mar 17 19:00:20 2024 (r20417) @@ -890,7 +890,7 @@ MigrateTunings(storedVersion); // Sanitize MIDI import data - if(midiImportPatternLen < 1 || midiImportPatternLen > MAX_PATTERN_ROWS) + if(midiImportPatternLen < ModSpecs::mptm.patternRowsMin || midiImportPatternLen > ModSpecs::mptm.patternRowsMax) midiImportPatternLen = 128; if(midiImportQuantize < 4 || midiImportQuantize > 256) midiImportQuantize = 32; Modified: trunk/OpenMPT/soundlib/Load_mid.cpp ============================================================================== --- trunk/OpenMPT/soundlib/Load_mid.cpp Sun Mar 17 17:34:14 2024 (r20416) +++ trunk/OpenMPT/soundlib/Load_mid.cpp Sun Mar 17 19:00:20 2024 (r20417) @@ -12,6 +12,7 @@ #include "Loaders.h" #include "Dlsbank.h" #include "MIDIEvents.h" +#include "mod_specifications.h" #ifdef MODPLUG_TRACKER #include "../mptrack/TrackerSettings.h" #include "../mptrack/Moddoc.h" @@ -625,7 +626,7 @@ #ifdef MODPLUG_TRACKER const uint32 quantize = Clamp(TrackerSettings::Instance().midiImportQuantize.Get(), 4u, 256u); - const ROWINDEX patternLen = Clamp(TrackerSettings::Instance().midiImportPatternLen.Get(), ROWINDEX(1), MAX_PATTERN_ROWS); + const ROWINDEX patternLen = Clamp(TrackerSettings::Instance().midiImportPatternLen.Get(), GetModSpecifications().patternRowsMin, GetModSpecifications().patternRowsMax); const uint8 ticksPerRow = Clamp(TrackerSettings::Instance().midiImportTicks.Get(), uint8(2), uint8(16)); #else const uint32 quantize = 32; // Must be 4 or higher Modified: trunk/OpenMPT/soundlib/Snd_defs.h ============================================================================== --- trunk/OpenMPT/soundlib/Snd_defs.h Sun Mar 17 17:34:14 2024 (r20416) +++ trunk/OpenMPT/soundlib/Snd_defs.h Sun Mar 17 19:00:20 2024 (r20417) @@ -42,7 +42,7 @@ inline constexpr SmpLength MAX_SAMPLE_LENGTH = 0x10000000; // Sample length in frames. Sample size in bytes can be more than this (= 256 MB). -inline constexpr ROWINDEX MAX_PATTERN_ROWS = 1024; +inline constexpr ROWINDEX MAX_PATTERN_ROWS = 4096; inline constexpr ROWINDEX MAX_ROWS_PER_BEAT = 65536; inline constexpr ORDERINDEX MAX_ORDERS = ORDERINDEX_MAX + 1; inline constexpr PATTERNINDEX MAX_PATTERNS = 4000; |