From: <sv...@op...> - 2024-11-25 18:39:19
|
Author: sagamusix Date: Mon Nov 25 19:39:07 2024 New Revision: 22309 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=22309 Log: [Mod] After seeking, inform plugins about the new playback position immediately if playback is stopped (https://bugs.openmpt.org/view.php?id=1731). Modified: trunk/OpenMPT/soundlib/Snd_fx.cpp trunk/OpenMPT/soundlib/Sndfile.cpp trunk/OpenMPT/soundlib/Sndfile.h Modified: trunk/OpenMPT/soundlib/Snd_fx.cpp ============================================================================== --- trunk/OpenMPT/soundlib/Snd_fx.cpp Mon Nov 25 19:35:24 2024 (r22308) +++ trunk/OpenMPT/soundlib/Snd_fx.cpp Mon Nov 25 19:39:07 2024 (r22309) @@ -1428,6 +1428,8 @@ { m_MixPlugins[plug].fDryRatio = dryWetRatio; } + + UpdatePluginPositions(); #endif // NO_PLUGINS } else if(adjustMode != eAdjustOnSuccess) { Modified: trunk/OpenMPT/soundlib/Sndfile.cpp ============================================================================== --- trunk/OpenMPT/soundlib/Sndfile.cpp Mon Nov 25 19:35:24 2024 (r22308) +++ trunk/OpenMPT/soundlib/Sndfile.cpp Mon Nov 25 19:39:07 2024 (r22309) @@ -1019,6 +1019,25 @@ } +void CSoundFile::UpdatePluginPositions() +{ +#ifndef NO_PLUGINS + float out = 0.0f; + for(auto &plugin : m_MixPlugins) + { + IMixPlugin *pPlugin = plugin.pMixPlugin; + if(pPlugin != nullptr && !pPlugin->IsResumed()) + { + pPlugin->PositionChanged(); + pPlugin->Resume(); + pPlugin->Process(&out, &out, 0); + pPlugin->Suspend(); + } + } +#endif // NO_PLUGINS +} + + void CSoundFile::StopAllVsti() { #ifndef NO_PLUGINS Modified: trunk/OpenMPT/soundlib/Sndfile.h ============================================================================== --- trunk/OpenMPT/soundlib/Sndfile.h Mon Nov 25 19:35:24 2024 (r22308) +++ trunk/OpenMPT/soundlib/Sndfile.h Mon Nov 25 19:39:07 2024 (r22309) @@ -966,6 +966,7 @@ // Real-time sound functions void SuspendPlugins(); void ResumePlugins(); + void UpdatePluginPositions(); void StopAllVsti(); void RecalculateGainForAllPlugs(); void ResetChannels(); |