From: <sv...@op...> - 2024-06-18 19:19:53
|
Author: sagamusix Date: Tue Jun 18 21:19:41 2024 New Revision: 21042 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=21042 Log: [Fix] IT/MPTM: Previous commit was still incomplete for files with less named channels that channels with plugin assignments. Modified: trunk/OpenMPT/soundlib/Load_it.cpp trunk/OpenMPT/soundlib/Sndfile.h Modified: trunk/OpenMPT/soundlib/Load_it.cpp ============================================================================== --- trunk/OpenMPT/soundlib/Load_it.cpp Tue Jun 18 21:08:26 2024 (r21041) +++ trunk/OpenMPT/soundlib/Load_it.cpp Tue Jun 18 21:19:41 2024 (r21042) @@ -700,7 +700,7 @@ // Read mix plugins information FileReader pluginChunk = file.ReadChunk((minPtr >= file.GetPosition()) ? minPtr - file.GetPosition() : file.BytesLeft()); - const auto [hasPluginChunks, isBeRoTracker] = LoadMixPlugins(pluginChunk); + const auto [hasPluginChunks, isBeRoTracker] = LoadMixPlugins(pluginChunk, false); if(hasPluginChunks) hasModPlugExtensions = true; @@ -2112,7 +2112,7 @@ #endif // MODPLUG_NO_FILESAVE -std::pair<bool, bool> CSoundFile::LoadMixPlugins(FileReader &file) +std::pair<bool, bool> CSoundFile::LoadMixPlugins(FileReader &file, bool ignoreChannelCount) { bool hasPluginChunks = false, isBeRoTracker = false; while(file.CanRead(9)) @@ -2134,9 +2134,9 @@ // Channel FX if(!memcmp(code, "CHFX", 4)) { - if(GetNumChannels() == 0) + if(!ignoreChannelCount) { - ChnSettings.resize(std::min(MAX_BASECHANNELS, static_cast<CHANNELINDEX>(chunkSize / 4))); + ChnSettings.resize(std::clamp(static_cast<CHANNELINDEX>(chunkSize / 4), GetNumChannels(), MAX_BASECHANNELS)); } for(auto &chn : ChnSettings) { Modified: trunk/OpenMPT/soundlib/Sndfile.h ============================================================================== --- trunk/OpenMPT/soundlib/Sndfile.h Tue Jun 18 21:08:26 2024 (r21041) +++ trunk/OpenMPT/soundlib/Sndfile.h Tue Jun 18 21:19:41 2024 (r21042) @@ -1222,7 +1222,7 @@ uint32 MapMidiInstrument(uint8 program, uint16 bank, uint8 midiChannel, uint8 note, bool isXG, std::bitset<16> drumChns); size_t ITInstrToMPT(FileReader &file, ModInstrument &ins, uint16 trkvers); - std::pair<bool, bool> LoadMixPlugins(FileReader &file); + std::pair<bool, bool> LoadMixPlugins(FileReader &file, bool ignoreChannelCount = true); #ifndef NO_PLUGINS static void ReadMixPluginChunk(FileReader &file, SNDMIXPLUGIN &plugin); void ProcessMidiOut(CHANNELINDEX nChn); |