diff options
Diffstat (limited to 'src/platforms/esp/32/clockless_rmt_esp32.cpp')
-rw-r--r-- | src/platforms/esp/32/clockless_rmt_esp32.cpp | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/src/platforms/esp/32/clockless_rmt_esp32.cpp b/src/platforms/esp/32/clockless_rmt_esp32.cpp index 42db3415..90ca046f 100644 --- a/src/platforms/esp/32/clockless_rmt_esp32.cpp +++ b/src/platforms/esp/32/clockless_rmt_esp32.cpp @@ -42,7 +42,8 @@ int ESP32RMTController::gMemBlocks; ESP32RMTController::ESP32RMTController(int DATA_PIN, int T1, int T2, int T3, int maxChannel, int memBlocks) : mPixelData(0), mSize(0), - mCur(0), + mCur(0), + mBufSize(0), mWhichHalf(0), mBuffer(0), mBufferSize(0), @@ -86,10 +87,19 @@ ESP32RMTController::ESP32RMTController(int DATA_PIN, int T1, int T2, int T3, int // the PixelController object until show is called. uint8_t * ESP32RMTController::getPixelBuffer(int size_in_bytes) { + // -- Free the old buffer if it will be too small + if (mPixelData != 0 and mBufSize < size_in_bytes) { + free(mPixelData); + mPixelData = 0; + } + if (mPixelData == 0) { - mSize = size_in_bytes; - mPixelData = (uint8_t *) malloc(mSize); + mBufSize = size_in_bytes; + mPixelData = (uint8_t *) malloc(mBufSize); } + + mSize = size_in_bytes; + return mPixelData; } |