From d5ec631337c7dbcf5ceecdb2ec6fac9fdbdc644b Mon Sep 17 00:00:00 2001 From: Jordan Woyak Date: Mon, 4 Feb 2013 20:57:08 -0600 Subject: [PATCH] Make real wiimote speaker not cause massive input delays. Fixes issue 5966. --- .../Core/Src/HW/WiimoteReal/WiimoteReal.cpp | 25 ++++++++----------- .../Core/Src/HW/WiimoteReal/WiimoteReal.h | 3 +++ 2 files changed, 13 insertions(+), 15 deletions(-) diff --git a/Source/Core/Core/Src/HW/WiimoteReal/WiimoteReal.cpp b/Source/Core/Core/Src/HW/WiimoteReal/WiimoteReal.cpp index 2381793f30..ce08c7d0da 100644 --- a/Source/Core/Core/Src/HW/WiimoteReal/WiimoteReal.cpp +++ b/Source/Core/Core/Src/HW/WiimoteReal/WiimoteReal.cpp @@ -181,23 +181,23 @@ bool Wiimote::Read() bool Wiimote::Write() { Report rpt; - bool audio_written = false; - if (m_audio_reports.Pop(rpt)) + if (last_audio_report.GetTimeDifference() > 6 && m_audio_reports.Pop(rpt)) { + last_audio_report.Update(); + IOWrite(rpt.first, rpt.second); delete[] rpt.first; - audio_written = true; + return true; } - - if (m_write_reports.Pop(rpt)) + else if (m_write_reports.Pop(rpt)) { IOWrite(rpt.first, rpt.second); delete[] rpt.first; return true; - } + } - return audio_written; + return false; } // Returns the next report that should be sent @@ -319,14 +319,9 @@ void Wiimote::ThreadFunc() while (Write()) {} Common::SleepCurrentThread(1); #else - bool read = false; - while (Write() || (read = true, IsOpen() && Read())) - { - if (m_audio_reports.Size() && !read) - Read(); - Common::SleepCurrentThread(m_audio_reports.Size() ? 5 : 2); - read = false; - } + bool const did_something = Write() || Read(); + if (!did_something) + Common::SleepCurrentThread(1); #endif } } diff --git a/Source/Core/Core/Src/HW/WiimoteReal/WiimoteReal.h b/Source/Core/Core/Src/HW/WiimoteReal/WiimoteReal.h index 9fdb305a56..24fcea53e6 100644 --- a/Source/Core/Core/Src/HW/WiimoteReal/WiimoteReal.h +++ b/Source/Core/Core/Src/HW/WiimoteReal/WiimoteReal.h @@ -25,6 +25,7 @@ #include "ChunkFile.h" #include "Thread.h" #include "FifoQueue.h" +#include "Timer.h" #include "../Wiimote.h" #include "../WiimoteEmu/WiimoteEmu.h" @@ -103,6 +104,8 @@ private: Common::FifoQueue m_read_reports; Common::FifoQueue m_write_reports; Common::FifoQueue m_audio_reports; + + Common::Timer last_audio_report; }; extern std::mutex g_refresh_lock;