diff --git a/src/projectM-engine/KeyHandler.cpp b/src/projectM-engine/KeyHandler.cpp index f079c8924..ff1bdee16 100755 --- a/src/projectM-engine/KeyHandler.cpp +++ b/src/projectM-engine/KeyHandler.cpp @@ -178,8 +178,7 @@ void projectM::default_key_handler( projectMEvent event, projectMKeycode keycode } m_activePreset = m_presetPos->allocate(this->presetInputs, this->presetOutputs); - renderer->setPresetName(m_activePreset->presetName()); - presetInputs.frame = 0; + renderer->setPresetName(m_activePreset->presetName()); timeKeeper->StartPreset(); break; @@ -195,7 +194,7 @@ void projectM::default_key_handler( projectMEvent event, projectMKeycode keycode assert(m_activePreset.get()); renderer->setPresetName(m_activePreset->presetName()); - presetInputs.frame = 0; + timeKeeper->StartPreset(); break; case PROJECTM_K_p: @@ -219,7 +218,7 @@ void projectM::default_key_handler( projectMEvent event, projectMKeycode keycode m_activePreset = m_presetPos->allocate(this->presetInputs, this->presetOutputs); renderer->setPresetName(m_activePreset->presetName()); - presetInputs.frame = 0; + timeKeeper->StartPreset(); break; case PROJECTM_K_l: diff --git a/src/projectM-engine/TimeKeeper.cpp b/src/projectM-engine/TimeKeeper.cpp index f67e2db31..87afc1c1c 100644 --- a/src/projectM-engine/TimeKeeper.cpp +++ b/src/projectM-engine/TimeKeeper.cpp @@ -29,22 +29,28 @@ TimeKeeper::TimeKeeper(double presetDuration, double smoothDuration) _currentTime = getTicks ( startTime ) * 0.001; #endif /** !WIN32 */ + _presetFrameA++; + _presetFrameB++; + } void TimeKeeper::StartPreset() { _isSmoothing = false; _presetTimeA = _currentTime; + _presetFrameA = 1; } void TimeKeeper::StartSmoothing() { _isSmoothing = true; _presetTimeB = _currentTime; + _presetFrameB = 1; } void TimeKeeper::EndSmoothing() { _isSmoothing = false; _presetTimeA = _presetTimeB; + _presetFrameA = _presetFrameB; } bool TimeKeeper::CanHardCut() @@ -76,4 +82,12 @@ TimeKeeper::TimeKeeper(double presetDuration, double smoothDuration) return (_currentTime - _presetTimeB) / _presetDuration; } +int TimeKeeper::PresetFrameB() + { + return _presetFrameB; + } +int TimeKeeper::PresetFrameA() + { + return _presetFrameA; + } diff --git a/src/projectM-engine/TimeKeeper.hpp b/src/projectM-engine/TimeKeeper.hpp index 35ab64ede..f1cbe2d54 100644 --- a/src/projectM-engine/TimeKeeper.hpp +++ b/src/projectM-engine/TimeKeeper.hpp @@ -31,6 +31,8 @@ public: double PresetProgressA(); double PresetProgressB(); + int PresetFrameA(); + int PresetFrameB(); #ifndef WIN32 @@ -48,6 +50,8 @@ private: double _currentTime; double _presetTimeA; double _presetTimeB; + int _presetFrameA; + int _presetFrameB; bool _isSmoothing; diff --git a/src/projectM-engine/projectM.cpp b/src/projectM-engine/projectM.cpp index c1a9ddbda..006a7e6d7 100755 --- a/src/projectM-engine/projectM.cpp +++ b/src/projectM-engine/projectM.cpp @@ -100,7 +100,7 @@ DLLEXPORT void projectM::projectM_resetTextures() } DLLEXPORT projectM::projectM ( std::string config_file ) : - beatDetect ( 0 ), renderer ( 0 ), m_presetQueuePos(0), oldFrame(1), _pcm(0) + beatDetect ( 0 ), renderer ( 0 ), m_presetQueuePos(0), _pcm(0) { readConfig ( config_file ); projectM_reset(); @@ -212,8 +212,7 @@ DLLEXPORT void projectM::renderFrame() { if ( presetInputs.progress>=1.0 ) { - - oldFrame = presetInputs.frame; + timeKeeper->StartSmoothing(); ///printf("Start Smooth\n"); // if(timeKeeper->IsSmoothing())printf("Confirmed\n"); @@ -230,7 +229,7 @@ DLLEXPORT void projectM::renderFrame() timeKeeper->StartPreset(); presetInputs.progress=timeKeeper->PresetProgressA(); - presetInputs.frame = 1; + presetInputs.frame = timeKeeper->PresetFrameA(); presetSwitchedEvent(true, **m_presetPos); } } @@ -239,16 +238,15 @@ DLLEXPORT void projectM::renderFrame() if ( timeKeeper->IsSmoothing() && timeKeeper->SmoothRatio() <= 1.0 && !m_presetChooser->empty() ) { - // printf("Smooth: \n", timeKeeper->SmoothRatio()); - int frame = ++presetInputs.frame; - presetInputs.frame = ++oldFrame; + // printf("Smooth: \n", timeKeeper->SmoothRatio()); + presetInputs.frame = timeKeeper->PresetFrameA(); presetInputs.progress= timeKeeper->PresetProgressA(); assert ( m_activePreset.get() ); m_activePreset->evaluateFrame(); renderer->PerPixelMath ( &m_activePreset->presetOutputs(), &presetInputs ); renderer->WaveformMath ( &m_activePreset->presetOutputs(), &presetInputs, true ); - presetInputs.frame = frame; + presetInputs.frame = timeKeeper->PresetFrameB(); presetInputs.progress= timeKeeper->PresetProgressB(); assert ( m_activePreset2.get() ); m_activePreset2->evaluateFrame(); @@ -271,7 +269,7 @@ DLLEXPORT void projectM::renderFrame() timeKeeper->EndSmoothing(); } //printf("Normal\n"); - presetInputs.frame++; //number of frames for current preset + presetInputs.frame = timeKeeper->PresetFrameA(); //number of frames for current preset presetInputs.progress= timeKeeper->PresetProgressA(); m_activePreset->evaluateFrame(); @@ -761,8 +759,7 @@ void projectM::selectPreset ( unsigned int index ) renderer->setPresetName ( m_activePreset->presetName() ); - presetInputs.frame = 0; - timeKeeper->StartPreset(); + timeKeeper->StartPreset(); } void projectM::switchPreset(std::auto_ptr & targetPreset, const PresetInputs & inputs, PresetOutputs & outputs) { diff --git a/src/projectM-engine/projectM.hpp b/src/projectM-engine/projectM.hpp index 224df6256..7957bb4c4 100755 --- a/src/projectM-engine/projectM.hpp +++ b/src/projectM-engine/projectM.hpp @@ -277,7 +277,7 @@ private: PCM * _pcm; - int oldFrame;// = 1; + }; #endif