From: <sag...@us...> - 2013-03-13 00:46:21
|
Revision: 1568 http://sourceforge.net/p/modplug/code/1568 Author: saga-games Date: 2013-03-13 00:46:11 +0000 (Wed, 13 Mar 2013) Log Message: ----------- [Ref] More refactoring, mostly getting rid of unncessary includes. Modified Paths: -------------- trunk/OpenMPT/mptrack/EffectInfo.h trunk/OpenMPT/soundlib/Fastmix.cpp trunk/OpenMPT/soundlib/ITTools.cpp trunk/OpenMPT/soundlib/ITTools.h trunk/OpenMPT/soundlib/Load_itp.cpp trunk/OpenMPT/soundlib/pattern.cpp Modified: trunk/OpenMPT/mptrack/EffectInfo.h =================================================================== --- trunk/OpenMPT/mptrack/EffectInfo.h 2013-03-12 19:43:19 UTC (rev 1567) +++ trunk/OpenMPT/mptrack/EffectInfo.h 2013-03-13 00:46:11 UTC (rev 1568) @@ -10,7 +10,8 @@ #pragma once -#include "Moddoc.h" +#include "modcommand.h" +class CSoundFile; //============== class EffectInfo Modified: trunk/OpenMPT/soundlib/Fastmix.cpp =================================================================== --- trunk/OpenMPT/soundlib/Fastmix.cpp 2013-03-12 19:43:19 UTC (rev 1567) +++ trunk/OpenMPT/soundlib/Fastmix.cpp 2013-03-13 00:46:11 UTC (rev 1568) @@ -339,44 +339,66 @@ // Filter values are clipped to double the input range (assuming input is 16-Bit, which it currently is) #define ClipFilter(x) Clamp(x, 2.0f * (float)int16_min, 2.0f * (float)int16_max) -// Mono -#define MIX_BEGIN_FILTER\ - float fy1 = pChannel->nFilter_Y1;\ - float fy2 = pChannel->nFilter_Y2; +// Resonant filter for Mono samples +static inline void ProcessMonoFilter(int &vol, ModChannel *pChn) +//-------------------------------------------------------------- +{ + float fy1 = pChn->nFilter_Y1; + float fy2 = pChn->nFilter_Y2; -#define MIX_END_FILTER\ - pChannel->nFilter_Y1 = fy1;\ - pChannel->nFilter_Y2 = fy2; - -#define SNDMIX_PROCESSFILTER\ - float fy = ((float)vol * pChn->nFilter_A0 + ClipFilter(fy1) * pChn->nFilter_B0 + ClipFilter(fy2) * pChn->nFilter_B1);\ - fy2 = fy1;\ - fy1 = fy - (float)(vol & pChn->nFilter_HP);\ + float fy = ((float)vol * pChn->nFilter_A0 + ClipFilter(fy1) * pChn->nFilter_B0 + ClipFilter(fy2) * pChn->nFilter_B1); + fy2 = fy1; + fy1 = fy - (float)(vol & pChn->nFilter_HP); vol = (int)fy; - -// Stereo -#define MIX_BEGIN_STEREO_FILTER\ - float fy1 = pChannel->nFilter_Y1;\ - float fy2 = pChannel->nFilter_Y2;\ - float fy3 = pChannel->nFilter_Y3;\ - float fy4 = pChannel->nFilter_Y4; + pChn->nFilter_Y1 = fy1; + pChn->nFilter_Y2 = fy2; +} -#define MIX_END_STEREO_FILTER\ - pChannel->nFilter_Y1 = fy1;\ - pChannel->nFilter_Y2 = fy2;\ - pChannel->nFilter_Y3 = fy3;\ - pChannel->nFilter_Y4 = fy4; -#define SNDMIX_PROCESSSTEREOFILTER\ - float fy = ((float)vol_l * pChn->nFilter_A0 + ClipFilter(fy1) * pChn->nFilter_B0 + ClipFilter(fy2) * pChn->nFilter_B1);\ - fy2 = fy1; fy1 = fy - (float)(vol_l & pChn->nFilter_HP);\ - vol_l = (int)fy;\ - fy = ((float)vol_r * pChn->nFilter_A0 + ClipFilter(fy3) * pChn->nFilter_B0 + ClipFilter(fy4) * pChn->nFilter_B1);\ - fy4 = fy3; fy3 = fy - (float)(vol_r & pChn->nFilter_HP);\ +// Resonant filter for Stereo samples +static inline void ProcessStereoFilter(int &vol_l, int &vol_r, ModChannel *pChn) +//------------------------------------------------------------------------------ +{ + // Left channel + + float fy1 = pChn->nFilter_Y1; + float fy2 = pChn->nFilter_Y2; + + float fy = ((float)vol_l * pChn->nFilter_A0 + ClipFilter(fy1) * pChn->nFilter_B0 + ClipFilter(fy2) * pChn->nFilter_B1); + fy2 = fy1; + fy1 = fy - (float)(vol_l & pChn->nFilter_HP); + vol_l = (int)fy; + + pChn->nFilter_Y1 = fy1; + pChn->nFilter_Y2 = fy2; + + // Right channel + + fy1 = pChn->nFilter_Y3; + fy2 = pChn->nFilter_Y4; + + fy = ((float)vol_r * pChn->nFilter_A0 + ClipFilter(fy1) * pChn->nFilter_B0 + ClipFilter(fy2) * pChn->nFilter_B1); + fy2 = fy1; + fy1 = fy - (float)(vol_r & pChn->nFilter_HP); vol_r = (int)fy; + pChn->nFilter_Y3 = fy1; + pChn->nFilter_Y4 = fy2; +} + +// Mono +#define SNDMIX_PROCESSFILTER \ + ProcessMonoFilter(vol, pChn); + + +// Stereo +#define SNDMIX_PROCESSSTEREOFILTER \ + ProcessStereoFilter(vol_l, vol_r, pChn); + + + ////////////////////////////////////////////////////////// // Interfaces @@ -420,24 +442,20 @@ // Mono Resonant Filters #define BEGIN_MIX_FLT_INTERFACE(func)\ - BEGIN_MIX_INTERFACE(func)\ - MIX_BEGIN_FILTER - + BEGIN_MIX_INTERFACE(func) + #define END_MIX_FLT_INTERFACE()\ SNDMIX_ENDSAMPLELOOP\ - MIX_END_FILTER\ } #define BEGIN_RAMPMIX_FLT_INTERFACE(func)\ BEGIN_MIX_INTERFACE(func)\ LONG nRampRightVol = pChannel->nRampRightVol;\ - LONG nRampLeftVol = pChannel->nRampLeftVol;\ - MIX_BEGIN_FILTER + LONG nRampLeftVol = pChannel->nRampLeftVol; #define END_RAMPMIX_FLT_INTERFACE()\ SNDMIX_ENDSAMPLELOOP\ - MIX_END_FILTER\ pChannel->nRampRightVol = nRampRightVol;\ pChannel->nRightVol = nRampRightVol >> VOLUMERAMPPRECISION;\ pChannel->nRampLeftVol = nRampLeftVol;\ @@ -446,24 +464,20 @@ // Stereo Resonant Filters #define BEGIN_MIX_STFLT_INTERFACE(func)\ - BEGIN_MIX_INTERFACE(func)\ - MIX_BEGIN_STEREO_FILTER - + BEGIN_MIX_INTERFACE(func) + #define END_MIX_STFLT_INTERFACE()\ SNDMIX_ENDSAMPLELOOP\ - MIX_END_STEREO_FILTER\ } #define BEGIN_RAMPMIX_STFLT_INTERFACE(func)\ BEGIN_MIX_INTERFACE(func)\ LONG nRampRightVol = pChannel->nRampRightVol;\ - LONG nRampLeftVol = pChannel->nRampLeftVol;\ - MIX_BEGIN_STEREO_FILTER + LONG nRampLeftVol = pChannel->nRampLeftVol; #define END_RAMPMIX_STFLT_INTERFACE()\ SNDMIX_ENDSAMPLELOOP\ - MIX_END_STEREO_FILTER\ pChannel->nRampRightVol = nRampRightVol;\ pChannel->nRightVol = nRampRightVol >> VOLUMERAMPPRECISION;\ pChannel->nRampLeftVol = nRampLeftVol;\ @@ -1458,7 +1472,7 @@ { LPLONG pOfsL, pOfsR; DWORD nchused, nchmixed; - + if (!count) return 0; BOOL bSurround; if (gnChannels > 2) X86_InitMixBuffer(MixRearBuffer, count*2); @@ -1506,7 +1520,7 @@ //Look for plugins associated with this implicit tracker channel. PLUGINDEX nMixPlugin = GetBestPlugin(ChnMix[nChn], PrioritiseInstrument, RespectMutes); - + //rewbs.instroVSTi /* UINT nMixPlugin=0; if (pChannel->pModInstrument && pChannel->pInstrument) { // first try intrument VST @@ -1514,12 +1528,12 @@ nMixPlugin = pChannel->pModInstrument->nMixPlug; } if (!nMixPlugin && (nMasterCh > 0) && (nMasterCh <= m_nChannels)) { // Then try Channel VST - if(!(pChannel->dwFlags & CHN_NOFX)) + if(!(pChannel->dwFlags & CHN_NOFX)) nMixPlugin = ChnSettings[nMasterCh-1].nMixPlugin; } */ - //end rewbs.instroVSTi + //end rewbs.instroVSTi if ((nMixPlugin > 0) && (nMixPlugin <= MAX_MIXPLUGINS)) { SNDMIXPLUGINSTATE *pPlugin = m_MixPlugins[nMixPlugin - 1].pMixState; @@ -1640,7 +1654,7 @@ // default: ; } } - + //didn't manage to get flag from instrument header, use channel flags. if(pChannel->dwFlags[CHN_HQSRC]) { @@ -1651,7 +1665,7 @@ { return MIXNDX_LINEARSRC; } - + return 0; } @@ -1660,10 +1674,10 @@ //------------------------------------------ { // Setup float inputs - for (UINT iPlug=0; iPlug<MAX_MIXPLUGINS; iPlug++) + for(PLUGINDEX plug = 0; plug < MAX_MIXPLUGINS; plug++) { - SNDMIXPLUGIN &plugin = m_MixPlugins[iPlug]; - if (plugin.pMixPlugin != nullptr && plugin.pMixState != nullptr + SNDMIXPLUGIN &plugin = m_MixPlugins[plug]; + if(plugin.pMixPlugin != nullptr && plugin.pMixState != nullptr && plugin.pMixState->pMixBuffer != nullptr && plugin.pMixState->pOutBufferL != nullptr && plugin.pMixState->pOutBufferR != nullptr) @@ -1703,18 +1717,18 @@ FLOAT *pMixR = MixFloatBuffer + MIXBUFFERSIZE; // Process Plugins - for (UINT iDoPlug=0; iDoPlug<MAX_MIXPLUGINS; iDoPlug++) + for(PLUGINDEX plug = 0; plug < MAX_MIXPLUGINS; plug++) { - SNDMIXPLUGIN &plugin = m_MixPlugins[iDoPlug]; + SNDMIXPLUGIN &plugin = m_MixPlugins[plug]; if (plugin.pMixPlugin != nullptr && plugin.pMixState != nullptr && plugin.pMixState->pMixBuffer != nullptr && plugin.pMixState->pOutBufferL != nullptr && plugin.pMixState->pOutBufferR != nullptr) { - BOOL bMasterMix = FALSE; + bool isMasterMix = false; if (pMixL == plugin.pMixState->pOutBufferL) { - bMasterMix = TRUE; + isMasterMix = true; pMixL = MixFloatBuffer; pMixR = MixFloatBuffer + MIXBUFFERSIZE; } @@ -1726,7 +1740,7 @@ if (!plugin.IsOutputToMaster()) { PLUGINDEX nOutput = plugin.GetOutputPlugin(); - if(nOutput > iDoPlug && nOutput != PLUGINDEX_INVALID + if(nOutput > plug && nOutput != PLUGINDEX_INVALID && m_MixPlugins[nOutput].pMixState != nullptr) { SNDMIXPLUGINSTATE *pOutState = m_MixPlugins[nOutput].pMixState; @@ -1748,13 +1762,12 @@ pOutputs[2 * nOutput] = pOutState->pOutBufferL; pOutputs[2 * (nOutput + 1)] = pOutState->pOutBufferR; } - - } -*/ + }*/ + if (plugin.IsMasterEffect()) { - if (!bMasterMix) + if (!isMasterMix) { FLOAT *pInL = pState->pOutBufferL; FLOAT *pInR = pState->pOutBufferR; @@ -1860,7 +1873,7 @@ return; } } - X86_MonoMixToFloat(pSrc, pOut, nCount, m_pConfig->getIntToFloat()); + X86_MonoMixToFloat(pSrc, pOut, nCount, m_pConfig->getIntToFloat()); } @@ -2373,4 +2386,3 @@ } #endif // NO_AGC - Modified: trunk/OpenMPT/soundlib/ITTools.cpp =================================================================== --- trunk/OpenMPT/soundlib/ITTools.cpp 2013-03-12 19:43:19 UTC (rev 1567) +++ trunk/OpenMPT/soundlib/ITTools.cpp 2013-03-13 00:46:11 UTC (rev 1568) @@ -642,6 +642,8 @@ #ifdef MODPLUG_TRACKER +#include "../mptrack/Moddoc.h" + // Convert all multi-byte numeric values to current platform's endianness or vice versa. void ITHistoryStruct::ConvertEndianness() //--------------------------------------- Modified: trunk/OpenMPT/soundlib/ITTools.h =================================================================== --- trunk/OpenMPT/soundlib/ITTools.h 2013-03-12 19:43:19 UTC (rev 1567) +++ trunk/OpenMPT/soundlib/ITTools.h 2013-03-13 00:46:11 UTC (rev 1568) @@ -300,14 +300,11 @@ STATIC_ASSERT(sizeof(ITSample) == 80); -#pragma pack(pop) #ifdef MODPLUG_TRACKER -#include "../mptrack/Moddoc.h" +struct FileHistory; #endif // MODPLUG_TRACKER -#pragma pack(push, 1) - // IT Header extension: Save history struct ITHistoryStruct { Modified: trunk/OpenMPT/soundlib/Load_itp.cpp =================================================================== --- trunk/OpenMPT/soundlib/Load_itp.cpp 2013-03-12 19:43:19 UTC (rev 1567) +++ trunk/OpenMPT/soundlib/Load_itp.cpp 2013-03-13 00:46:11 UTC (rev 1568) @@ -403,7 +403,7 @@ fwrite(&id, 1, sizeof(id), f); // patterns data content - for(UINT npat=0; npat<MAX_PATTERNS; npat++) + for(PATTERNINDEX npat = 0; npat < MAX_PATTERNS; npat++) { // pattern size (number of rows) id = Patterns[npat] ? Patterns[npat].GetNumRows() : 0; Modified: trunk/OpenMPT/soundlib/pattern.cpp =================================================================== --- trunk/OpenMPT/soundlib/pattern.cpp 2013-03-12 19:43:19 UTC (rev 1567) +++ trunk/OpenMPT/soundlib/pattern.cpp 2013-03-13 00:46:11 UTC (rev 1568) @@ -15,6 +15,7 @@ #include "../common/version.h" #include "../common/AudioCriticalSection.h" #include "ITTools.h" +#include "Sndfile.h" CSoundFile& CPattern::GetSoundFile() { return m_rPatternContainer.GetSoundFile(); } @@ -446,14 +447,7 @@ bool CPattern::WriteITPdata(FILE* f) const //---------------------------------------- { - for(ROWINDEX r = 0; r < GetNumRows(); r++) - { - for(CHANNELINDEX c = 0; c < GetNumChannels(); c++) - { - ModCommand mc = GetModCommand(r,c); - fwrite(&mc, sizeof(ModCommand), 1, f); - } - } + fwrite(m_ModCommands, sizeof(ModCommand), GetNumRows() * GetNumChannels(), f); return false; } @@ -465,7 +459,7 @@ //////////////////////////////////////////////////////////////////////// -static enum maskbits +enum maskbits { noteBit = (1 << 0), instrBit = (1 << 1), @@ -511,8 +505,8 @@ } -uint8 CreateDiffMask(ModCommand chnMC, ModCommand newMC) -//------------------------------------------------------ +static uint8 CreateDiffMask(const ModCommand &chnMC, const ModCommand &newMC) +//--------------------------------------------------------------------------- { uint8 mask = 0; if(chnMC.note != newMC.note) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |