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);
|