LCD Update performance fix to avoid glitches on single core RPis

pull/795/head
Javier Nonis 2 weeks ago
parent be718fc10d
commit 4d2d79c0f5
  1. 5
      src/minidexed.cpp
  2. 16
      src/userinterface.cpp
  3. 1
      src/userinterface.h

@ -701,7 +701,10 @@ void CMiniDexed::setInsertFXType (unsigned nType, unsigned nTG)
}
m_InsertFXSpinLock[nTG]->Acquire();
delete m_InsertFX[nTG];
if (m_InsertFX[nTG] != NULL)
{
delete m_InsertFX[nTG];
}
m_InsertFX[nTG] = newAudioEffect(nType, m_pConfig->GetSampleRate());
m_InsertFX[nTG]->setTempo(m_nTempo);
m_InsertFXSpinLock[nTG]->Release();

@ -53,6 +53,7 @@ CUserInterface::~CUserInterface (void)
bool CUserInterface::Initialize (void)
{
assert (m_pConfig);
nLastLCDUpdateTime = 0;
if (m_pConfig->GetLCDEnabled ())
{
@ -152,7 +153,7 @@ bool CUserInterface::Initialize (void)
}
assert (m_pLCD);
m_pLCDBuffered = new CWriteBufferDevice (m_pLCD);
m_pLCDBuffered = new CWriteBufferDevice (m_pLCD, 256);
assert (m_pLCDBuffered);
LCDWrite ("\x1B[?25l\x1B""d+"); // cursor off, autopage mode
@ -202,10 +203,17 @@ bool CUserInterface::Initialize (void)
void CUserInterface::Process (void)
{
if (m_pLCDBuffered)
// Limit display updates to avoid glitches on sigle core RPis
unsigned nReadTime = CTimer::GetClockTicks ();
if (nReadTime - nLastLCDUpdateTime > 50000)
{
m_pLCDBuffered->Update ();
}
if (m_pLCDBuffered)
{
// Limit updates to 16 bytes to avoid glitches on sigle core RPis
m_pLCDBuffered->Update (16);
}
nLastLCDUpdateTime = nReadTime;
}
if (m_pUIButtons)
{
m_pUIButtons->Update();

@ -89,6 +89,7 @@ private:
bool m_bSwitchPressed;
unsigned m_nRotaryEncoderLastReadTime;
int m_nRotaryEncoderCounter=0;
unsigned nLastLCDUpdateTime;
CUIMenu m_Menu;
};

Loading…
Cancel
Save