From 0429850835a9b49f60c317b6a50502693dc712e3 Mon Sep 17 00:00:00 2001 From: beta-tester Date: Tue, 8 Aug 2023 23:01:54 +0200 Subject: [PATCH 1/3] optimized color565to888() remove expensive multiplication --- src/ESP32-HUB75-MatrixPanel-I2S-DMA.h | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/ESP32-HUB75-MatrixPanel-I2S-DMA.h b/src/ESP32-HUB75-MatrixPanel-I2S-DMA.h index 978715b..a598c43 100644 --- a/src/ESP32-HUB75-MatrixPanel-I2S-DMA.h +++ b/src/ESP32-HUB75-MatrixPanel-I2S-DMA.h @@ -880,9 +880,12 @@ private: */ inline void MatrixPanel_I2S_DMA::color565to888(const uint16_t color, uint8_t &r, uint8_t &g, uint8_t &b) { - r = ((((color >> 11) & 0x1F) * 527) + 23) >> 6; - g = ((((color >> 5) & 0x3F) * 259) + 33) >> 6; - b = (((color & 0x1F) * 527) + 23) >> 6; + r = (color >> 8) & 0xf8; + g = (color >> 3) & 0xfc; + b = (color << 3) & 0xf8; + r |= r >> 5; + g |= g >> 6; + b |= b >> 5; } inline void MatrixPanel_I2S_DMA::drawPixel(int16_t x, int16_t y, uint16_t color) // adafruit virtual void override From 3fc222ff75d1c48d115421aa1a212de3479d500a Mon Sep 17 00:00:00 2001 From: beta-tester Date: Tue, 8 Aug 2023 23:11:35 +0200 Subject: [PATCH 2/3] adjust color range for NO_CIE1931 in updateMatrixDMABuffer() red16, green16, blue16 never reached maximum 0xFFFF value in NO_CIE1931 --- src/ESP32-HUB75-MatrixPanel-I2S-DMA.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/ESP32-HUB75-MatrixPanel-I2S-DMA.cpp b/src/ESP32-HUB75-MatrixPanel-I2S-DMA.cpp index c2a725e..85fb055 100644 --- a/src/ESP32-HUB75-MatrixPanel-I2S-DMA.cpp +++ b/src/ESP32-HUB75-MatrixPanel-I2S-DMA.cpp @@ -347,9 +347,9 @@ void IRAM_ATTR MatrixPanel_I2S_DMA::updateMatrixDMABuffer(uint16_t x_coord, uint green16 = lumConvTab[green]; blue16 = lumConvTab[blue]; #else - red16 = red << 8; - green16 = green << 8; - blue16 = blue << 8; + red16 = red << 8 | red; + green16 = green << 8 | green; + blue16 = blue << 8 | blue; #endif /* When using the drawPixel, we are obviously only changing the value of one x,y position, From 9b4926978e223b3d02dc93370a9e36d23669fc55 Mon Sep 17 00:00:00 2001 From: beta-tester Date: Wed, 9 Aug 2023 07:43:36 +0200 Subject: [PATCH 3/3] removed another unnecessary instruction --- src/ESP32-HUB75-MatrixPanel-I2S-DMA.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ESP32-HUB75-MatrixPanel-I2S-DMA.h b/src/ESP32-HUB75-MatrixPanel-I2S-DMA.h index a598c43..4a6e843 100644 --- a/src/ESP32-HUB75-MatrixPanel-I2S-DMA.h +++ b/src/ESP32-HUB75-MatrixPanel-I2S-DMA.h @@ -882,7 +882,7 @@ inline void MatrixPanel_I2S_DMA::color565to888(const uint16_t color, uint8_t &r, { r = (color >> 8) & 0xf8; g = (color >> 3) & 0xfc; - b = (color << 3) & 0xf8; + b = (color << 3); r |= r >> 5; g |= g >> 6; b |= b >> 5;