From eab946ea8768b3e8fe77c3761ff61db36634cc30 Mon Sep 17 00:00:00 2001 From: Frank <91616163+softhack007@users.noreply.github.com> Date: Mon, 17 Nov 2025 12:29:47 +0100 Subject: [PATCH] image loader: allow graceful takeover after error Allow decoder "takeover" by another segment a) when last segment has decoding error (unsupported file, etc.) b) when last segment became inactive --- wled00/image_loader.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/wled00/image_loader.cpp b/wled00/image_loader.cpp index a289c722..2f922fea 100644 --- a/wled00/image_loader.cpp +++ b/wled00/image_loader.cpp @@ -146,7 +146,13 @@ byte renderImageToSegment(Segment &seg) { if (!seg.name) return IMAGE_ERROR_NO_NAME; // disable during effect transition, causes flickering, multiple allocations and depending on image, part of old FX remaining //if (seg.mode != seg.currentMode()) return IMAGE_ERROR_WAITING; - if (activeSeg && activeSeg != &seg) return IMAGE_ERROR_SEG_LIMIT; // only one segment at a time + if (activeSeg && activeSeg != &seg) { // only one segment at a time + if (!seg.isActive()) return IMAGE_ERROR_SEG_LIMIT; // sanity check: calling segment must be active + if (gifDecodeFailed || !activeSeg->isActive()) // decoder failed, or last segment became inactive + endImagePlayback(activeSeg); // => allow takeover but clean up first + else + return IMAGE_ERROR_SEG_LIMIT; + } activeSeg = &seg; segCols = activeSeg->virtualWidth();