(experimental) loop2 to get fresh audio just before drawing
* introducing usermod::loop2() - runs just before strip.service() --> expecting to reduce lagging between audio and visual to an absolute minimum.
This commit is contained in:
@@ -2352,6 +2352,11 @@ class AudioReactive : public Usermod {
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(_MoonModules_WLED_) && defined(WLEDMM_FASTPATH)
|
||||||
|
void loop2(void) {
|
||||||
|
loop();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
bool getUMData(um_data_t **data)
|
bool getUMData(um_data_t **data)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -299,6 +299,7 @@ class Usermod {
|
|||||||
virtual ~Usermod() { if (um_data) delete um_data; }
|
virtual ~Usermod() { if (um_data) delete um_data; }
|
||||||
virtual void setup() = 0; // pure virtual, has to be overriden
|
virtual void setup() = 0; // pure virtual, has to be overriden
|
||||||
virtual void loop() = 0; // pure virtual, has to be overriden
|
virtual void loop() = 0; // pure virtual, has to be overriden
|
||||||
|
virtual void loop2() {} // WLEDMM called just before effects will be processed
|
||||||
virtual void handleOverlayDraw() {} // called after all effects have been processed, just before strip.show()
|
virtual void handleOverlayDraw() {} // called after all effects have been processed, just before strip.show()
|
||||||
virtual bool handleButton(uint8_t b) { return false; } // button overrides are possible here
|
virtual bool handleButton(uint8_t b) { return false; } // button overrides are possible here
|
||||||
virtual bool getUMData(um_data_t **data) { if (data) *data = nullptr; return false; }; // usermod data exchange [see examples for audio effects]
|
virtual bool getUMData(um_data_t **data) { if (data) *data = nullptr; return false; }; // usermod data exchange [see examples for audio effects]
|
||||||
@@ -329,6 +330,7 @@ class UsermodManager {
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
void loop();
|
void loop();
|
||||||
|
void loop2(); // WLEDMM loop just before drawing effects (presets and everything already handled)
|
||||||
void handleOverlayDraw();
|
void handleOverlayDraw();
|
||||||
bool handleButton(uint8_t b);
|
bool handleButton(uint8_t b);
|
||||||
bool getUMData(um_data_t **um_data, uint8_t mod_id = USERMOD_ID_RESERVED); // USERMOD_ID_RESERVED will poll all usermods
|
bool getUMData(um_data_t **um_data, uint8_t mod_id = USERMOD_ID_RESERVED); // USERMOD_ID_RESERVED will poll all usermods
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ void UsermodManager::connected() { for (byte i = 0; i < numMods; i++) um
|
|||||||
void UsermodManager::loop() { for (byte i = 0; i < numMods; i++) ums[i]->loop(); }
|
void UsermodManager::loop() { for (byte i = 0; i < numMods; i++) ums[i]->loop(); }
|
||||||
void UsermodManager::handleOverlayDraw() { for (byte i = 0; i < numMods; i++) ums[i]->handleOverlayDraw(); }
|
void UsermodManager::handleOverlayDraw() { for (byte i = 0; i < numMods; i++) ums[i]->handleOverlayDraw(); }
|
||||||
// void UsermodManager::appendConfigData() { for (byte i = 0; i < numMods; i++) ums[i]->appendConfigData(); } //WLEDMM not used
|
// void UsermodManager::appendConfigData() { for (byte i = 0; i < numMods; i++) ums[i]->appendConfigData(); } //WLEDMM not used
|
||||||
|
void UsermodManager::loop2() { for (unsigned i = 0; i < numMods; i++) ums[i]->loop2(); }
|
||||||
bool UsermodManager::handleButton(uint8_t b) {
|
bool UsermodManager::handleButton(uint8_t b) {
|
||||||
bool overrideIO = false;
|
bool overrideIO = false;
|
||||||
for (byte i = 0; i < numMods; i++) {
|
for (byte i = 0; i < numMods; i++) {
|
||||||
|
|||||||
@@ -213,6 +213,19 @@ void WLED::loop()
|
|||||||
handlePresets();
|
handlePresets();
|
||||||
yield();
|
yield();
|
||||||
|
|
||||||
|
#if defined(_MoonModules_WLED_) && defined(WLEDMM_FASTPATH)
|
||||||
|
#ifdef WLED_DEBUG
|
||||||
|
unsigned long usermod2Millis = millis();
|
||||||
|
#endif
|
||||||
|
usermods.loop2();
|
||||||
|
#ifdef WLED_DEBUG
|
||||||
|
usermod2Millis = millis() - usermod2Millis;
|
||||||
|
avgUsermodMillis += usermod2Millis;
|
||||||
|
if (usermod2Millis > maxUsermodMillis) maxUsermodMillis = usermod2Millis;
|
||||||
|
#endif
|
||||||
|
yield();
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef WLED_DEBUG
|
#ifdef WLED_DEBUG
|
||||||
unsigned long stripMillis = millis();
|
unsigned long stripMillis = millis();
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
// version code in format yymmddb (b = daily build)
|
// version code in format yymmddb (b = daily build)
|
||||||
#define VERSION 2409060
|
#define VERSION 2409210
|
||||||
|
|
||||||
// WLEDMM - you can check for this define in usermods, to only enabled WLEDMM specific code in the "right" fork. Its not defined in AC WLED.
|
// WLEDMM - you can check for this define in usermods, to only enabled WLEDMM specific code in the "right" fork. Its not defined in AC WLED.
|
||||||
#define _MoonModules_WLED_
|
#define _MoonModules_WLED_
|
||||||
|
|||||||
Reference in New Issue
Block a user