Skip to content

Release 0.9.4 dev.7

piggei edited this page Oct 3, 2026 · 1 revision

Release: 0.9.4
Build: 0.9.4-dev.7
Stable baseline: 0.9.3

0.9.4-dev.7 is the first PSRAM-use optimization build for the Waveshare ESP32-S3-RGB-Matrix after the measurement-only dev.6 baseline.

GIF source staging in PSRAM

On the Waveshare target, direct AnimatedGIF playback now attempts to copy the complete GIF source file from LittleFS into PSRAM before opening the decoder.

Initial guards are intentionally conservative:

  • maximum staged GIF size: 2 MiB;
  • minimum free PSRAM preserved before staging: 4 MiB;
  • source copy chunk size: 4096 bytes with scheduler yields;
  • staged bytes remain allocated only for the AnimatedGIF decoder lifetime;
  • all decoder reads and seeks use the staged PSRAM image while active.

If any guard, allocation or copy step fails, playback automatically falls back to the previous LittleFS callback path. The fallback is not treated as a media error by itself.

This optimization is enabled by default only for IDOT_WAVESHARE_S3_RGB_MATRIX. Other controller profiles keep their previous behavior.

Diagnostics

Dev.7 keeps the dev.6 PSRAM/cache telemetry and adds:

gifStage=state:<psram|fs> bytes:<current> peak:<peak> attempts:<n> ok:<n> fallback:<n> max:<bytes> reserve:<bytes>

A running eligible GIF should report state:psram with non-zero bytes. When playback ends, staged bytes are released. fallback counts staging attempts that returned to the filesystem path.

Scope boundary

This build does not add decoded-frame caching, Carousel preloading or GIF prefetch. Protocol, BLE framing, renderer semantics, automation, settings and the external-buzzer boundary remain unchanged.

The physical target remains one 64x64 HUB75 panel. Larger layouts are deferred until matching hardware is available.

Clone this wiki locally