From e890f9d622b47edad64cfb59141d7d086ba443a8 Mon Sep 17 00:00:00 2001 From: Shura Fedorovskyi Date: Mon, 26 Oct 2026 17:59:24 +0400 Subject: [PATCH 1/4] Trim each LED die to correct a color cast An LED's three emitters are not equally efficient, so a neutral triple can render with a cast: on an SK6812 the green die runs hot and grey scenes come out tinted. Four trims correct it at the output, once per strip, rather than leaving every effect to guess. balanceRed, balanceGreen and balanceBlue pull one die down to meet the others, and whiteLevel reaches the white die, which the RGB trims cannot: a white phosphor is separate hardware, often brighter than the trio beside it. Trimmed down only, since there is no headroom above 255 and raising a channel clips rather than balances. The trim pre-scales the index the curve is read at, so the hot path stays one lookup per channel and the curve still lands last. A table per trim would cost every driver a kilobyte of its inline budget, which the contract holds at 2 KB. Amber and UV read untrimmed, being their own dies that an RGB trim says nothing about, and whiteLevel is offered only where the profile carries a white die. Five cases: one trim leaves the others untouched, a trim does not reach the white die, the curve and a trim compose, whiteLevel moves the white alone, and whiteLevel of 0 puts the die out rather than leaving it at the never-black floor. Those caught the plain-RGB fast path, which skipped the trim entirely on the commonest light there is. Desktop 2769/2769; esp32p4rev3-eth-wifi builds. Co-Authored-By: Claude Opus 5 (1M context) --- docs/help/help.json | 108 ++++++++++++++++++++++ src/light/drivers/Correction.h | 29 ++++-- src/light/drivers/DriverBase.h | 19 +++- src/light/drivers/FixtureProfilesModule.h | 31 ++++--- test/unit/light/unit_Correction.cpp | 73 +++++++++++++++ 5 files changed, 238 insertions(+), 22 deletions(-) diff --git a/docs/help/help.json b/docs/help/help.json index 6bf19017..3bbe49b3 100644 --- a/docs/help/help.json +++ b/docs/help/help.json @@ -3182,9 +3182,21 @@ "line": "The fixture profile applied per light, for channel order and white.", "more": "A reorder or a reboot keeps it. After renaming the profile, re-pick it: the next reboot falls back to the default." }, + "balanceRed": { + "line": "One die pulled down to meet the others, which corrects a strip's color cast." + }, + "balanceGreen": { + "line": "One die pulled down to meet the others, which corrects a strip's color cast." + }, + "balanceBlue": { + "line": "One die pulled down to meet the others, which corrects a strip's color cast." + }, "whiteMode": { "line": "How the white channel is derived, shown when the profile carries one." }, + "whiteLevel": { + "line": "The white die's own trim, which the three above cannot reach." + }, "fixtureRef": { "line": "The profile name an older config saved, read once and then emptied." }, @@ -3317,9 +3329,21 @@ "line": "The fixture profile applied per light, for channel order and white.", "more": "A reorder or a reboot keeps it. After renaming the profile, re-pick it: the next reboot falls back to the default." }, + "balanceRed": { + "line": "One die pulled down to meet the others, which corrects a strip's color cast." + }, + "balanceGreen": { + "line": "One die pulled down to meet the others, which corrects a strip's color cast." + }, + "balanceBlue": { + "line": "One die pulled down to meet the others, which corrects a strip's color cast." + }, "whiteMode": { "line": "How the white channel is derived, shown when the profile carries one." }, + "whiteLevel": { + "line": "The white die's own trim, which the three above cannot reach." + }, "fixtureRef": { "line": "The profile name an older config saved, read once and then emptied." }, @@ -3363,9 +3387,21 @@ "line": "The fixture profile applied per light, for channel order and white.", "more": "A reorder or a reboot keeps it. After renaming the profile, re-pick it: the next reboot falls back to the default." }, + "balanceRed": { + "line": "One die pulled down to meet the others, which corrects a strip's color cast." + }, + "balanceGreen": { + "line": "One die pulled down to meet the others, which corrects a strip's color cast." + }, + "balanceBlue": { + "line": "One die pulled down to meet the others, which corrects a strip's color cast." + }, "whiteMode": { "line": "How the white channel is derived, shown when the profile carries one." }, + "whiteLevel": { + "line": "The white die's own trim, which the three above cannot reach." + }, "fixtureRef": { "line": "The profile name an older config saved, read once and then emptied." }, @@ -3422,9 +3458,21 @@ "line": "The fixture profile applied per light, for channel order and white.", "more": "A reorder or a reboot keeps it. After renaming the profile, re-pick it: the next reboot falls back to the default." }, + "balanceRed": { + "line": "One die pulled down to meet the others, which corrects a strip's color cast." + }, + "balanceGreen": { + "line": "One die pulled down to meet the others, which corrects a strip's color cast." + }, + "balanceBlue": { + "line": "One die pulled down to meet the others, which corrects a strip's color cast." + }, "whiteMode": { "line": "How the white channel is derived, shown when the profile carries one." }, + "whiteLevel": { + "line": "The white die's own trim, which the three above cannot reach." + }, "fixtureRef": { "line": "The profile name an older config saved, read once and then emptied." }, @@ -3467,9 +3515,21 @@ "line": "The fixture profile applied per light, for channel order and white.", "more": "A reorder or a reboot keeps it. After renaming the profile, re-pick it: the next reboot falls back to the default." }, + "balanceRed": { + "line": "One die pulled down to meet the others, which corrects a strip's color cast." + }, + "balanceGreen": { + "line": "One die pulled down to meet the others, which corrects a strip's color cast." + }, + "balanceBlue": { + "line": "One die pulled down to meet the others, which corrects a strip's color cast." + }, "whiteMode": { "line": "How the white channel is derived, shown when the profile carries one." }, + "whiteLevel": { + "line": "The white die's own trim, which the three above cannot reach." + }, "fixtureRef": { "line": "The profile name an older config saved, read once and then emptied." }, @@ -3523,9 +3583,21 @@ "line": "The fixture profile applied per light, for channel order and white.", "more": "A reorder or a reboot keeps it. After renaming the profile, re-pick it: the next reboot falls back to the default." }, + "balanceRed": { + "line": "One die pulled down to meet the others, which corrects a strip's color cast." + }, + "balanceGreen": { + "line": "One die pulled down to meet the others, which corrects a strip's color cast." + }, + "balanceBlue": { + "line": "One die pulled down to meet the others, which corrects a strip's color cast." + }, "whiteMode": { "line": "How the white channel is derived, shown when the profile carries one." }, + "whiteLevel": { + "line": "The white die's own trim, which the three above cannot reach." + }, "fixtureRef": { "line": "The profile name an older config saved, read once and then emptied." }, @@ -3573,9 +3645,21 @@ "line": "The fixture profile applied per light, for channel order and white.", "more": "A reorder or a reboot keeps it. After renaming the profile, re-pick it: the next reboot falls back to the default." }, + "balanceRed": { + "line": "One die pulled down to meet the others, which corrects a strip's color cast." + }, + "balanceGreen": { + "line": "One die pulled down to meet the others, which corrects a strip's color cast." + }, + "balanceBlue": { + "line": "One die pulled down to meet the others, which corrects a strip's color cast." + }, "whiteMode": { "line": "How the white channel is derived, shown when the profile carries one." }, + "whiteLevel": { + "line": "The white die's own trim, which the three above cannot reach." + }, "fixtureRef": { "line": "The profile name an older config saved, read once and then emptied." }, @@ -3637,9 +3721,21 @@ "line": "The fixture profile applied per light, for channel order and white.", "more": "A reorder or a reboot keeps it. After renaming the profile, re-pick it: the next reboot falls back to the default." }, + "balanceRed": { + "line": "One die pulled down to meet the others, which corrects a strip's color cast." + }, + "balanceGreen": { + "line": "One die pulled down to meet the others, which corrects a strip's color cast." + }, + "balanceBlue": { + "line": "One die pulled down to meet the others, which corrects a strip's color cast." + }, "whiteMode": { "line": "How the white channel is derived, shown when the profile carries one." }, + "whiteLevel": { + "line": "The white die's own trim, which the three above cannot reach." + }, "fixtureRef": { "line": "The profile name an older config saved, read once and then emptied." }, @@ -3689,9 +3785,21 @@ "line": "The fixture profile applied per light, for channel order and white.", "more": "A reorder or a reboot keeps it. After renaming the profile, re-pick it: the next reboot falls back to the default." }, + "balanceRed": { + "line": "One die pulled down to meet the others, which corrects a strip's color cast." + }, + "balanceGreen": { + "line": "One die pulled down to meet the others, which corrects a strip's color cast." + }, + "balanceBlue": { + "line": "One die pulled down to meet the others, which corrects a strip's color cast." + }, "whiteMode": { "line": "How the white channel is derived, shown when the profile carries one." }, + "whiteLevel": { + "line": "The white die's own trim, which the three above cannot reach." + }, "fixtureRef": { "line": "The profile name an older config saved, read once and then emptied." }, diff --git a/src/light/drivers/Correction.h b/src/light/drivers/Correction.h index 821f4a1d..4fa413ba 100644 --- a/src/light/drivers/Correction.h +++ b/src/light/drivers/Correction.h @@ -47,6 +47,10 @@ struct Correction { uint16_t* lut16 = nullptr; /// Set by a driver whose output resolves more than a byte, so the 16-bit table is filled whatever the profile. bool wide = false; + /// Per-channel white balance, 255 = untouched; trimmed down only, since there is no headroom above 255 and raising clips instead. + uint8_t balRed = 255, balGreen = 255, balBlue = 255; + /// The white die's trim, 255 = untouched; a separate emitter, often brighter than the RGB trio, that the three trims above cannot reach. + uint8_t whiteLevel = 255; /// Which curve the brightness rebuild fills through; a driver's setting, not a global one. Curve curve = Curve::Cie; /// Output byte position of the red role; each color role's position is recomputed from the role array. @@ -107,6 +111,11 @@ struct Correction { return linear; } + /// One channel trimmed down by `bal`, where 255 leaves the byte alone. A pre-scale on the index, not a table per trim, which would cost every driver a kilobyte of its inline budget. + static uint8_t trim(uint8_t v, uint8_t bal) MM_NONBLOCKING { + return bal == 255 ? v : static_cast((static_cast(v) * bal + 127) / 255); + } + /// Round a curved value to an integer of at most `top`, keeping a lit input above zero so a fade-out does not snap off partway down. static int quantize(float out, int top, bool lit) MM_NONBLOCKING { int q = static_cast(out + 0.5f); @@ -155,9 +164,9 @@ struct Correction { inline void MM_RAMFUNC applyThrough(const T* lut, const uint8_t* src, T* out, uint8_t srcChannels) const { // A plain strip: the curve on each color and nothing optional, the drivers' commonest light. if (plainRgb) { - if (offRed != kAbsent) out[offRed] = lut[src[0]]; - if (offGreen != kAbsent) out[offGreen] = lut[src[1]]; - if (offBlue != kAbsent) out[offBlue] = lut[src[2]]; + if (offRed != kAbsent) out[offRed] = lut[trim(src[0], balRed)]; + if (offGreen != kAbsent) out[offGreen] = lut[trim(src[1], balGreen)]; + if (offBlue != kAbsent) out[offBlue] = lut[trim(src[2], balBlue)]; return; } constexpr T kFull = static_cast(~T{0}); // 255 or 65535 @@ -190,7 +199,7 @@ struct Correction { } else { w = r < g ? (r < b ? r : b) : (g < b ? g : b); // min(r,g,b): the white component // Computed off the PRE-subtraction values, which only rebalance the RGB emitters. - if (offWarmWhite != kAbsent) out[offWarmWhite] = lut[w]; + if (offWarmWhite != kAbsent) out[offWarmWhite] = lut[trim(w, whiteLevel)]; // yellow ≈ min(R,G) (the shared red+green component). if (offYellow != kAbsent) out[offYellow] = lut[r < g ? r : g]; // Driven from the blue with no red or green to pair with, so it stays dark on warm colors. @@ -201,20 +210,22 @@ struct Correction { // White last: it is the only emitter that rebalances RGB. if (offWhite != kAbsent) { if (whiteMode == WhiteMode::Accurate) { r -= w; g -= w; b -= w; } // pull white out of RGB - out[offWhite] = lut[w]; + out[offWhite] = lut[trim(w, whiteLevel)]; } } // The curve, applied ONCE: everything above this line is linear light. - if (offRed != kAbsent) out[offRed] = lut[r]; - if (offGreen != kAbsent) out[offGreen] = lut[g]; - if (offBlue != kAbsent) out[offBlue] = lut[b]; + if (offRed != kAbsent) out[offRed] = lut[trim(r, balRed)]; + if (offGreen != kAbsent) out[offGreen] = lut[trim(g, balGreen)]; + if (offBlue != kAbsent) out[offBlue] = lut[trim(b, balBlue)]; if constexpr (sizeof(T) == 1) { if (hasFine) applyFine(r, g, b, w, out); } } /// Hot path, 16-bit profiles only: each color channel with a fine role as its high and low byte from the same table, and a fine dimmer wide open. void applyFine(uint8_t r, uint8_t g, uint8_t b, uint8_t w, uint8_t* out) const { if (offDimmerFine != kAbsent) out[offDimmerFine] = 255; // wide open is 65535, not 65280 - const uint8_t value[5] = {r, g, b, w, w}; // both whites carry the white component, 0 when none is synthesized + // Trimmed here as the coarse bytes are, so a fine channel is balanced exactly as an 8-bit one. + const uint8_t value[5] = {trim(r, balRed), trim(g, balGreen), trim(b, balBlue), + trim(w, whiteLevel), trim(w, whiteLevel)}; const uint8_t coarse[5] = {offRed, offGreen, offBlue, offWhite, offWarmWhite}; const uint8_t fine[5] = {offRedFine, offGreenFine, offBlueFine, offWhiteFine, offWarmWhiteFine}; for (uint8_t k = 0; k < 5; k++) { diff --git a/src/light/drivers/DriverBase.h b/src/light/drivers/DriverBase.h index ed02ec10..494bfd07 100644 --- a/src/light/drivers/DriverBase.h +++ b/src/light/drivers/DriverBase.h @@ -72,6 +72,10 @@ class DriverBase : public MoonModule { // Applied unconditionally, so brightness works even before the fixture-profile library is up. const uint8_t tableBrightness = adoptBrightness(globalBrightness); correction_.whiteMode = static_cast(whiteMode_); + correction_.balRed = balanceRed_; + correction_.balGreen = balanceGreen_; + correction_.balBlue = balanceBlue_; + correction_.whiteLevel = whiteLevel_; correction_.curve = static_cast(curveSel_); // A missing id falls back to the default, so a driver degrades rather than crashing. if (auto* lib = FixtureProfilesModule::active()) { @@ -181,6 +185,10 @@ class DriverBase : public MoonModule { uint8_t fixtureSel_ = 0; /// How the white channel is derived, shown when the profile carries one. uint8_t whiteMode_ = static_cast(WhiteMode::Min); + /// One die pulled down to meet the others, which corrects a strip's color cast. + uint8_t balanceRed_ = 255, balanceGreen_ = 255, balanceBlue_ = 255; + /// The white die's own trim, which the three above cannot reach. + uint8_t whiteLevel_ = 255; /// This driver's dim, multiplied with the global brightness. uint8_t localBrightness_ = 255; /// How brightness maps to output: CIE 1931, a gamma, or linear. @@ -207,10 +215,17 @@ class DriverBase : public MoonModule { buildFixtureOptions(); // fill fixtureOptions_ from the library, sync id and row controls_.addSelect("fixture", fixtureSel_, fixtureOptions_, fixtureOptionCount_); controls_.setPersistLabel(controls_.count() - 1); // saved by name, so a longer or reordered library never moves it + // Trim DOWN only: there is no headroom above 255, so raising clips rather than balancing. A strip whose green die runs hot is corrected here rather than in every effect. + controls_.addControl("balanceRed", balanceRed_, 0, 255); + controls_.addControl("balanceGreen", balanceGreen_, 0, 255); + controls_.addControl("balanceBlue", balanceBlue_, 0, 255); controls_.addSelect("whiteMode", whiteMode_, kWhiteModeOptions, kWhiteModeCount); // Hidden unless the referenced profile carries a channel there is something to synthesize for. auto* lib = FixtureProfilesModule::active(); controls_.setHidden(controls_.count() - 1, !(lib && lib->profileHasSynthChannel(profileId_))); + // A separate emitter the three RGB trims cannot reach, so it carries its own. + controls_.addControl("whiteLevel", whiteLevel_, 0, 255); + controls_.setHidden(controls_.count() - 1, !(lib && lib->profileHasWhiteDie(profileId_))); // Hidden, and only read: the name an older config saved. controls_.addText("fixtureRef", fixtureRef_, sizeof(fixtureRef_)); controls_.setHidden(controls_.count() - 1, true); @@ -222,7 +237,9 @@ class DriverBase : public MoonModule { /// Whether `name` is one of the correction controls, for a driver's own prepare test. static bool isCorrectionControl(const char* name) { return std::strcmp(name, "fixture") == 0 || std::strcmp(name, "fixtureRef") == 0 || std::strcmp(name, "localBrightness") == 0 - || std::strcmp(name, "whiteMode") == 0 || std::strcmp(name, "curve") == 0; + || std::strcmp(name, "whiteMode") == 0 || std::strcmp(name, "curve") == 0 + || std::strcmp(name, "balanceRed") == 0 || std::strcmp(name, "balanceGreen") == 0 + || std::strcmp(name, "balanceBlue") == 0 || std::strcmp(name, "whiteLevel") == 0; } private: diff --git a/src/light/drivers/FixtureProfilesModule.h b/src/light/drivers/FixtureProfilesModule.h index 904efbb0..19a12cb1 100644 --- a/src/light/drivers/FixtureProfilesModule.h +++ b/src/light/drivers/FixtureProfilesModule.h @@ -74,23 +74,30 @@ class FixtureProfilesModule : public MoonModule, public ListSource { return 0; // a dangling id renders at the first profile; rebuildCorrection falls back to it too } + /// Whether the profile carries a white die, cold or warm, at either precision; narrower than profileHasSynthChannel, since a profile with amber but no white has nothing the white trim reaches. + bool profileHasWhiteDie(uint32_t id) const { + return profileHasRole(id, [](ChannelRole r) { + return r == ChannelRole::White || r == ChannelRole::WarmWhite + || r == ChannelRole::WhiteFine || r == ChannelRole::WarmWhiteFine; + }); + } + /// Whether the profile carries a channel the white mode would synthesize; any channel apply() synthesizes from RGB counts, since one control governs them all. bool profileHasSynthChannel(uint32_t id) const { + return profileHasRole(id, [](ChannelRole r) { + return r == ChannelRole::White || r == ChannelRole::WarmWhite + || r == ChannelRole::WhiteFine || r == ChannelRole::WarmWhiteFine + || r == ChannelRole::Yellow || r == ChannelRole::UV; + }); + } + + /// Whether any of the profile's channels carries a role `wanted` accepts, the walk both role questions share. + bool profileHasRole(uint32_t id, bool (*wanted)(ChannelRole)) const { const Profile* p = find(id); if (!p) return false; const uint8_t* r = roleAt(*p); - for (uint8_t c = 0; c < p->channelCount; c++) { - switch (static_cast(r[c])) { - case ChannelRole::White: - case ChannelRole::WarmWhite: - case ChannelRole::WhiteFine: - case ChannelRole::WarmWhiteFine: - case ChannelRole::Yellow: - case ChannelRole::UV: - return true; - default: break; - } - } + for (uint8_t c = 0; c < p->channelCount; c++) + if (wanted(static_cast(r[c]))) return true; return false; } diff --git a/test/unit/light/unit_Correction.cpp b/test/unit/light/unit_Correction.cpp index 8d2533b7..3c687a2f 100644 --- a/test/unit/light/unit_Correction.cpp +++ b/test/unit/light/unit_Correction.cpp @@ -642,3 +642,76 @@ TEST_CASE("Dimmer fine is driven wide open with its coarse byte") { c.apply(src, out, 3); CHECK((out[0] == 255 && out[1] == 255)); } + +// An LED's three emitters are not equally efficient, so a neutral triple can render with a cast. The trim pulls one die down to meet the others, at the output rather than in every effect. +TEST_CASE("Correction balance: trimming one channel leaves the others untouched") { + Correction c; + c.balGreen = 128; + mm::test::rebuildFromPreset(c, 255, mm::test::PresetOrder::RGB); + const uint8_t src[3] = {200, 200, 200}; // the triple a green-cast strip renders wrong + uint8_t out[3] = {}; + c.apply(src, out, 3); + CHECK(out[0] == 200); + CHECK(out[1] == 100); // pulled down to match the weaker channels + CHECK(out[2] == 200); +} + +// A white phosphor is separate hardware, so an RGB trim must say nothing about it. +TEST_CASE("Correction balance: an RGB trim does not reach the white die") { + Correction c; + c.balBlue = 128; + mm::test::rebuildFromPreset(c, 255, mm::test::PresetOrder::RGBW); + const uint8_t src[3] = {200, 200, 200}; + uint8_t out[4] = {}; + c.apply(src, out, 3); + CHECK(out[0] == 200); + CHECK(out[1] == 200); + CHECK(out[2] == 100); // blue trimmed + CHECK(out[3] == 200); // the white component, from the untrimmed minimum +} + +// The trim pre-scales the index the curve is read at, so the curve still lands last. +TEST_CASE("Correction balance: the curve and the trim compose") { + Correction c; + c.balBlue = 128; + mm::test::rebuildFromPreset(c, 255, mm::test::PresetOrder::RGB); + c.curve = Correction::Curve::Gamma22; + c.rebuildBrightness(255); // the same offsets, the table refilled through the curve + const uint8_t src[3] = {200, 200, 200}; + uint8_t out[3] = {}; + c.apply(src, out, 3); + CHECK(out[0] == 149); // red: the curve alone, (200/255)^2.2 * 255 + CHECK(out[2] < out[0]); // blue: trimmed first, so it reads the curve lower down + CHECK(out[2] > 0); +} + +// The white die carries its own trim, since it is often brighter than the trio beside it. +TEST_CASE("Correction whiteLevel: trims the white die without touching RGB") { + const uint8_t src[3] = {200, 160, 120}; // the white component is the minimum, 120 + + Correction full; + mm::test::rebuildFromPreset(full, 255, mm::test::PresetOrder::RGBW); + uint8_t a[4] = {}; + full.apply(src, a, 3); + + Correction half; + half.whiteLevel = 128; + mm::test::rebuildFromPreset(half, 255, mm::test::PresetOrder::RGBW); + uint8_t b[4] = {}; + half.apply(src, b, 3); + + CHECK(b[3] < a[3]); // the white die alone moves + CHECK((b[0] == a[0] && b[1] == a[1] && b[2] == a[2])); +} + +// A die asked for nothing goes out, rather than resting on the floor that keeps a fade from snapping off. +TEST_CASE("Correction whiteLevel: zero puts the white die out") { + Correction c; + c.whiteLevel = 0; + mm::test::rebuildFromPreset(c, 255, mm::test::PresetOrder::RGBW); + const uint8_t src[3] = {200, 160, 120}; + uint8_t out[4] = {}; + c.apply(src, out, 3); + CHECK(out[3] == 0); + CHECK(out[0] == 200); // and the trio is untouched +} From b877683c11b82c71c03745ceb72952c441639d75 Mon Sep 17 00:00:00 2001 From: Shura Fedorovskyi Date: Fri, 30 Oct 2026 16:49:24 +0400 Subject: [PATCH 2/4] Move the die gains onto the fixture profile, applied after the curve A color cast is a property of the LED type, and the profile is where MoonLight describes LED hardware, so the gains live there rather than on every driver card. The five driver cards lose the three sliders, and the fourth where a profile carries white. A strip from an off batch gets a profile of its own, which the editable list already allows. The gain lands after the curve, on emitted light, so its value means what it says: green at 128 gives half the green at any curve, where a pre-scaled index gave about 22% at gamma 2.2 and shifted with the level under CIE. It is folded into the tables at rebuild, one row per color channel, so the per-light path stays one lookup per channel with no branch and no multiply. A profile with no gain allocates nothing and every channel reads the one curve; only a profile that carries one pays for the rows, as the 16-bit table is allocated only where it is read. Each row is filled from the curve's own float, so the gain never re-quantizes a value the curve already rounded, and the wide outputs keep their full resolution. Subtracted: Correction::trim(), and profileHasWhiteDie() moved to the profile row that now uses it. Tests: a gain on one channel leaves the others alone, an RGB gain does not reach the white die, the curve and the gain compose to the gain's own ratio (149 red, 75 blue at gain 128), a profile with no gain wants no tables, the white die's own gain, a zero gain putting it out, and an edited gain surviving the row being written and restored. A Correction is assigned whole by deriveCorrection and by the driver tests, so one more pins that a copy reads its own tables: the first version stored resolved pointers and four driver tests caught a copy reading into the object it came from. Reviews - ewowi on #212: gains belong in the fixture profile, not the driver: done here. - ewowi on #212: fold them into the tables, gain after the curve: done here. - ewowi on #212: the description says what an agent wrote and what was tested: the pull request text, not the code. Desktop 2857/2857; esp32p4rev3-eth-wifi builds and runs the strip. Co-Authored-By: Claude Opus 5 (1M context) --- docs/help/help.json | 111 +---------------- src/light/drivers/Correction.h | 112 ++++++++++++++---- src/light/drivers/DriverBase.h | 36 +++--- src/light/drivers/FixtureProfilesModule.h | 50 ++++++++ test/unit/light/unit_Correction.cpp | 98 +++++++++++---- .../unit/light/unit_FixtureProfilesModule.cpp | 23 ++++ 6 files changed, 257 insertions(+), 173 deletions(-) diff --git a/docs/help/help.json b/docs/help/help.json index 3bbe49b3..23413c65 100644 --- a/docs/help/help.json +++ b/docs/help/help.json @@ -173,6 +173,9 @@ }, "ch": { "line": "What one channel carries, such as red, dimmer or pan; none for a spacer or a channel set elsewhere." + }, + "gain": { + "line": "One die pulled down to meet the others, 255 for a type that needs none; the gain lands on emitted light, so 128 is half of it." } } } @@ -3182,21 +3185,9 @@ "line": "The fixture profile applied per light, for channel order and white.", "more": "A reorder or a reboot keeps it. After renaming the profile, re-pick it: the next reboot falls back to the default." }, - "balanceRed": { - "line": "One die pulled down to meet the others, which corrects a strip's color cast." - }, - "balanceGreen": { - "line": "One die pulled down to meet the others, which corrects a strip's color cast." - }, - "balanceBlue": { - "line": "One die pulled down to meet the others, which corrects a strip's color cast." - }, "whiteMode": { "line": "How the white channel is derived, shown when the profile carries one." }, - "whiteLevel": { - "line": "The white die's own trim, which the three above cannot reach." - }, "fixtureRef": { "line": "The profile name an older config saved, read once and then emptied." }, @@ -3329,21 +3320,9 @@ "line": "The fixture profile applied per light, for channel order and white.", "more": "A reorder or a reboot keeps it. After renaming the profile, re-pick it: the next reboot falls back to the default." }, - "balanceRed": { - "line": "One die pulled down to meet the others, which corrects a strip's color cast." - }, - "balanceGreen": { - "line": "One die pulled down to meet the others, which corrects a strip's color cast." - }, - "balanceBlue": { - "line": "One die pulled down to meet the others, which corrects a strip's color cast." - }, "whiteMode": { "line": "How the white channel is derived, shown when the profile carries one." }, - "whiteLevel": { - "line": "The white die's own trim, which the three above cannot reach." - }, "fixtureRef": { "line": "The profile name an older config saved, read once and then emptied." }, @@ -3387,21 +3366,9 @@ "line": "The fixture profile applied per light, for channel order and white.", "more": "A reorder or a reboot keeps it. After renaming the profile, re-pick it: the next reboot falls back to the default." }, - "balanceRed": { - "line": "One die pulled down to meet the others, which corrects a strip's color cast." - }, - "balanceGreen": { - "line": "One die pulled down to meet the others, which corrects a strip's color cast." - }, - "balanceBlue": { - "line": "One die pulled down to meet the others, which corrects a strip's color cast." - }, "whiteMode": { "line": "How the white channel is derived, shown when the profile carries one." }, - "whiteLevel": { - "line": "The white die's own trim, which the three above cannot reach." - }, "fixtureRef": { "line": "The profile name an older config saved, read once and then emptied." }, @@ -3458,21 +3425,9 @@ "line": "The fixture profile applied per light, for channel order and white.", "more": "A reorder or a reboot keeps it. After renaming the profile, re-pick it: the next reboot falls back to the default." }, - "balanceRed": { - "line": "One die pulled down to meet the others, which corrects a strip's color cast." - }, - "balanceGreen": { - "line": "One die pulled down to meet the others, which corrects a strip's color cast." - }, - "balanceBlue": { - "line": "One die pulled down to meet the others, which corrects a strip's color cast." - }, "whiteMode": { "line": "How the white channel is derived, shown when the profile carries one." }, - "whiteLevel": { - "line": "The white die's own trim, which the three above cannot reach." - }, "fixtureRef": { "line": "The profile name an older config saved, read once and then emptied." }, @@ -3515,21 +3470,9 @@ "line": "The fixture profile applied per light, for channel order and white.", "more": "A reorder or a reboot keeps it. After renaming the profile, re-pick it: the next reboot falls back to the default." }, - "balanceRed": { - "line": "One die pulled down to meet the others, which corrects a strip's color cast." - }, - "balanceGreen": { - "line": "One die pulled down to meet the others, which corrects a strip's color cast." - }, - "balanceBlue": { - "line": "One die pulled down to meet the others, which corrects a strip's color cast." - }, "whiteMode": { "line": "How the white channel is derived, shown when the profile carries one." }, - "whiteLevel": { - "line": "The white die's own trim, which the three above cannot reach." - }, "fixtureRef": { "line": "The profile name an older config saved, read once and then emptied." }, @@ -3583,21 +3526,9 @@ "line": "The fixture profile applied per light, for channel order and white.", "more": "A reorder or a reboot keeps it. After renaming the profile, re-pick it: the next reboot falls back to the default." }, - "balanceRed": { - "line": "One die pulled down to meet the others, which corrects a strip's color cast." - }, - "balanceGreen": { - "line": "One die pulled down to meet the others, which corrects a strip's color cast." - }, - "balanceBlue": { - "line": "One die pulled down to meet the others, which corrects a strip's color cast." - }, "whiteMode": { "line": "How the white channel is derived, shown when the profile carries one." }, - "whiteLevel": { - "line": "The white die's own trim, which the three above cannot reach." - }, "fixtureRef": { "line": "The profile name an older config saved, read once and then emptied." }, @@ -3645,21 +3576,9 @@ "line": "The fixture profile applied per light, for channel order and white.", "more": "A reorder or a reboot keeps it. After renaming the profile, re-pick it: the next reboot falls back to the default." }, - "balanceRed": { - "line": "One die pulled down to meet the others, which corrects a strip's color cast." - }, - "balanceGreen": { - "line": "One die pulled down to meet the others, which corrects a strip's color cast." - }, - "balanceBlue": { - "line": "One die pulled down to meet the others, which corrects a strip's color cast." - }, "whiteMode": { "line": "How the white channel is derived, shown when the profile carries one." }, - "whiteLevel": { - "line": "The white die's own trim, which the three above cannot reach." - }, "fixtureRef": { "line": "The profile name an older config saved, read once and then emptied." }, @@ -3721,21 +3640,9 @@ "line": "The fixture profile applied per light, for channel order and white.", "more": "A reorder or a reboot keeps it. After renaming the profile, re-pick it: the next reboot falls back to the default." }, - "balanceRed": { - "line": "One die pulled down to meet the others, which corrects a strip's color cast." - }, - "balanceGreen": { - "line": "One die pulled down to meet the others, which corrects a strip's color cast." - }, - "balanceBlue": { - "line": "One die pulled down to meet the others, which corrects a strip's color cast." - }, "whiteMode": { "line": "How the white channel is derived, shown when the profile carries one." }, - "whiteLevel": { - "line": "The white die's own trim, which the three above cannot reach." - }, "fixtureRef": { "line": "The profile name an older config saved, read once and then emptied." }, @@ -3785,21 +3692,9 @@ "line": "The fixture profile applied per light, for channel order and white.", "more": "A reorder or a reboot keeps it. After renaming the profile, re-pick it: the next reboot falls back to the default." }, - "balanceRed": { - "line": "One die pulled down to meet the others, which corrects a strip's color cast." - }, - "balanceGreen": { - "line": "One die pulled down to meet the others, which corrects a strip's color cast." - }, - "balanceBlue": { - "line": "One die pulled down to meet the others, which corrects a strip's color cast." - }, "whiteMode": { "line": "How the white channel is derived, shown when the profile carries one." }, - "whiteLevel": { - "line": "The white die's own trim, which the three above cannot reach." - }, "fixtureRef": { "line": "The profile name an older config saved, read once and then emptied." }, diff --git a/src/light/drivers/Correction.h b/src/light/drivers/Correction.h index 4fa413ba..fdcf0715 100644 --- a/src/light/drivers/Correction.h +++ b/src/light/drivers/Correction.h @@ -31,6 +31,19 @@ struct Correction { /// Marks a role this light does not carry. static constexpr uint8_t kAbsent = 255; // color role not carried by this light + /// How many gained rows the tables carry: red, green, blue and the white dies. + static constexpr uint8_t kGainRows = 4; + + /// The tables one light is read through, so a channel's gain costs a pointer at rebuild and nothing per light. + template + struct Tables { + const T* base = nullptr; ///< the ungained curve, which amber, UV and every channel at gain 255 read + const T* red = nullptr; ///< the red die's table, gained or the curve itself + const T* green = nullptr; ///< the green die's + const T* blue = nullptr; ///< the blue die's + const T* white = nullptr; ///< both white dies, which the RGB gains do not reach + }; + /// The perceptual curve the output LUT is filled through; Linear is a requirement, not a fallback, since correcting twice darkens as the square. enum class Curve : uint8_t { Cie = 0, Gamma22, Gamma28, Linear }; @@ -47,10 +60,12 @@ struct Correction { uint16_t* lut16 = nullptr; /// Set by a driver whose output resolves more than a byte, so the 16-bit table is filled whatever the profile. bool wide = false; - /// Per-channel white balance, 255 = untouched; trimmed down only, since there is no headroom above 255 and raising clips instead. - uint8_t balRed = 255, balGreen = 255, balBlue = 255; - /// The white die's trim, 255 = untouched; a separate emitter, often brighter than the RGB trio, that the three trims above cannot reach. - uint8_t whiteLevel = 255; + /// The fixture profile's per-channel gain, 255 where the LED type needs none. Applied after the curve, so the value means emitted light: green at 128 is half the green. + uint8_t gainRed = 255, gainGreen = 255, gainBlue = 255, gainWhite = 255; + /// The gained tables, `kGainRows` of 256, which a driver allocates only for a profile that carries a gain; null leaves every channel on the ungained curve. + uint8_t* gainLut = nullptr; + /// The same to 16 bits, so a wide output keeps its full resolution rather than the 8-bit table's levels. + uint16_t* gainLut16 = nullptr; /// Which curve the brightness rebuild fills through; a driver's setting, not a global one. Curve curve = Curve::Cie; /// Output byte position of the red role; each color role's position is recomputed from the role array. @@ -85,16 +100,64 @@ struct Correction { /// Whether the fixture carries red, green and blue alone, resolved at rebuild so a plain strip skips every optional role per light. bool plainRgb = true; uint8_t outChannels = 3; // bytes emitted per light (= channelsPerLight of the wiring) + /// Each color channel's gained row, or null for the ungained curve. Into the driver's `gainLut`, never this object's own table, so a Correction stays copyable. + const uint8_t* rowRed = nullptr; ///< red's gained row, or null for the curve itself + const uint8_t* rowGreen = nullptr; ///< green's + const uint8_t* rowBlue = nullptr; ///< blue's + const uint8_t* rowWhite = nullptr; ///< the white dies' + /// Red's gained row to 16 bits, or null where no wide table is filled, which leaves the channel 8-bit. + const uint16_t* rowRed16 = nullptr; + const uint16_t* rowGreen16 = nullptr; ///< green's, likewise + const uint16_t* rowBlue16 = nullptr; ///< blue's + const uint16_t* rowWhite16 = nullptr; ///< the white dies' WhiteMode whiteMode = WhiteMode::Min; // how white is synthesized from RGB (white lights only) - /// Refresh the brightness LUT alone, leaving the channel offsets untouched; order is the design: brightness is a linear pre-scale and the curve is applied last. + /// Whether any channel carries a gain, so a driver allocates the gained tables only for a profile that needs them. + bool wantsGains() const MM_NONBLOCKING { + return gainRed != 255 || gainGreen != 255 || gainBlue != 255 || gainWhite != 255; + } + + /// Refresh the brightness LUT alone, leaving the channel offsets untouched; order is the design: brightness is a linear pre-scale, the curve lands next, and the gain last, on emitted light. void rebuildBrightness(uint8_t brightness) MM_NONBLOCKING { + const uint8_t gain[kGainRows] = {gainRed, gainGreen, gainBlue, gainWhite}; for (int v = 0; v < 256; v++) { const float out = shape(static_cast(v) * brightness / 255.0f); // scale first, then curve const bool lit = v > 0 && brightness > 0; briLut[v] = static_cast(quantize(out, 255, lit)); if (wantsTable() && lut16) lut16[v] = static_cast(quantize(out * 257.0f, 65535, lit)); // 255 * 257 = 65535 + for (uint8_t g = 0; g < kGainRows; g++) { + // From the curve's own float, so the gain does not quantize a value the curve already rounded. + const float scaled = out * gain[g] / 255.0f; + const bool onAtAll = lit && gain[g] > 0; + if (gainLut) gainLut[g * 256 + v] = static_cast(quantize(scaled, 255, onAtAll)); + if (gainLut16) gainLut16[g * 256 + v] = static_cast(quantize(scaled * 257.0f, 65535, onAtAll)); + } } + resolveTables(); + } + + /// Point each channel at its gained row, or at null where its gain is 255 or the gained tables are absent. + void resolveTables() MM_NONBLOCKING { + const uint8_t gain[kGainRows] = {gainRed, gainGreen, gainBlue, gainWhite}; + const uint8_t** row8[kGainRows] = {&rowRed, &rowGreen, &rowBlue, &rowWhite}; + const uint16_t** row16[kGainRows] = {&rowRed16, &rowGreen16, &rowBlue16, &rowWhite16}; + for (uint8_t g = 0; g < kGainRows; g++) { + const bool gained = gain[g] != 255; + *row8[g] = gained && gainLut ? gainLut + g * 256 : nullptr; + *row16[g] = gained && gainLut16 ? gainLut16 + g * 256 : nullptr; + } + } + + /// The 8-bit tables one light is read through, the gained rows over the curve this object carries. + Tables tables8() const MM_NONBLOCKING { + return Tables{briLut, rowRed ? rowRed : briLut, rowGreen ? rowGreen : briLut, + rowBlue ? rowBlue : briLut, rowWhite ? rowWhite : briLut}; + } + + /// The same to 16 bits, each row null where no table is filled, which leaves that channel 8-bit. + Tables tables16() const MM_NONBLOCKING { + return Tables{lut16, rowRed16 ? rowRed16 : lut16, rowGreen16 ? rowGreen16 : lut16, + rowBlue16 ? rowBlue16 : lut16, rowWhite16 ? rowWhite16 : lut16}; } /// Whether the 16-bit table is filled: a profile with fine roles, or a wide driver. @@ -111,11 +174,6 @@ struct Correction { return linear; } - /// One channel trimmed down by `bal`, where 255 leaves the byte alone. A pre-scale on the index, not a table per trim, which would cost every driver a kilobyte of its inline budget. - static uint8_t trim(uint8_t v, uint8_t bal) MM_NONBLOCKING { - return bal == 255 ? v : static_cast((static_cast(v) * bal + 127) / 255); - } - /// Round a curved value to an integer of at most `top`, keeping a lit input above zero so a fade-out does not snap off partway down. static int quantize(float out, int top, bool lit) MM_NONBLOCKING { int q = static_cast(out + 0.5f); @@ -154,19 +212,20 @@ struct Correction { } /// Hot path: transform one source light into its output bytes, integer-only and allocation-free. - inline void apply(const uint8_t* src, uint8_t* out, uint8_t srcChannels) const { applyThrough(briLut, src, out, srcChannels); } + inline void apply(const uint8_t* src, uint8_t* out, uint8_t srcChannels) const { applyThrough(tables8(), src, out, srcChannels); } /// Hot path, wide drivers only: the same transform through the 16-bit table, one value per channel; needs `lut16`. - inline void applyWide(const uint8_t* src, uint16_t* out, uint8_t srcChannels) const { applyThrough(lut16, src, out, srcChannels); } + inline void applyWide(const uint8_t* src, uint16_t* out, uint8_t srcChannels) const { applyThrough(tables16(), src, out, srcChannels); } /// The transform through a curve table of either width, so the 8-bit and 16-bit outputs share every line. A remap, not a copy: the layer's packed slots become the fixture's own offsets. template - inline void MM_RAMFUNC applyThrough(const T* lut, const uint8_t* src, T* out, uint8_t srcChannels) const { + inline void MM_RAMFUNC applyThrough(const Tables& t, const uint8_t* src, T* out, uint8_t srcChannels) const { + const T* lut = t.base; // A plain strip: the curve on each color and nothing optional, the drivers' commonest light. if (plainRgb) { - if (offRed != kAbsent) out[offRed] = lut[trim(src[0], balRed)]; - if (offGreen != kAbsent) out[offGreen] = lut[trim(src[1], balGreen)]; - if (offBlue != kAbsent) out[offBlue] = lut[trim(src[2], balBlue)]; + if (offRed != kAbsent) out[offRed] = t.red[src[0]]; + if (offGreen != kAbsent) out[offGreen] = t.green[src[1]]; + if (offBlue != kAbsent) out[offBlue] = t.blue[src[2]]; return; } constexpr T kFull = static_cast(~T{0}); // 255 or 65535 @@ -199,7 +258,7 @@ struct Correction { } else { w = r < g ? (r < b ? r : b) : (g < b ? g : b); // min(r,g,b): the white component // Computed off the PRE-subtraction values, which only rebalance the RGB emitters. - if (offWarmWhite != kAbsent) out[offWarmWhite] = lut[trim(w, whiteLevel)]; + if (offWarmWhite != kAbsent) out[offWarmWhite] = t.white[w]; // yellow ≈ min(R,G) (the shared red+green component). if (offYellow != kAbsent) out[offYellow] = lut[r < g ? r : g]; // Driven from the blue with no red or green to pair with, so it stays dark on warm colors. @@ -210,28 +269,31 @@ struct Correction { // White last: it is the only emitter that rebalances RGB. if (offWhite != kAbsent) { if (whiteMode == WhiteMode::Accurate) { r -= w; g -= w; b -= w; } // pull white out of RGB - out[offWhite] = lut[trim(w, whiteLevel)]; + out[offWhite] = t.white[w]; } } // The curve, applied ONCE: everything above this line is linear light. - if (offRed != kAbsent) out[offRed] = lut[trim(r, balRed)]; - if (offGreen != kAbsent) out[offGreen] = lut[trim(g, balGreen)]; - if (offBlue != kAbsent) out[offBlue] = lut[trim(b, balBlue)]; + if (offRed != kAbsent) out[offRed] = t.red[r]; + if (offGreen != kAbsent) out[offGreen] = t.green[g]; + if (offBlue != kAbsent) out[offBlue] = t.blue[b]; if constexpr (sizeof(T) == 1) { if (hasFine) applyFine(r, g, b, w, out); } } /// Hot path, 16-bit profiles only: each color channel with a fine role as its high and low byte from the same table, and a fine dimmer wide open. void applyFine(uint8_t r, uint8_t g, uint8_t b, uint8_t w, uint8_t* out) const { if (offDimmerFine != kAbsent) out[offDimmerFine] = 255; // wide open is 65535, not 65280 - // Trimmed here as the coarse bytes are, so a fine channel is balanced exactly as an 8-bit one. - const uint8_t value[5] = {trim(r, balRed), trim(g, balGreen), trim(b, balBlue), - trim(w, whiteLevel), trim(w, whiteLevel)}; + const uint8_t value[5] = {r, g, b, w, w}; // both whites carry the white component, 0 when none is synthesized + // Each channel's own gained table, so a fine channel is gained exactly as an 8-bit one and at full resolution. + const Tables w16 = tables16(); + const Tables n8 = tables8(); + const uint16_t* wide16[5] = {w16.red, w16.green, w16.blue, w16.white, w16.white}; + const uint8_t* narrow8[5] = {n8.red, n8.green, n8.blue, n8.white, n8.white}; const uint8_t coarse[5] = {offRed, offGreen, offBlue, offWhite, offWarmWhite}; const uint8_t fine[5] = {offRedFine, offGreenFine, offBlueFine, offWhiteFine, offWarmWhiteFine}; for (uint8_t k = 0; k < 5; k++) { if (fine[k] == kAbsent) continue; // Without its table (an allocation that failed) the channel stays 8-bit: the coarse byte as written, the fine one 0. - const uint16_t q = lut16 ? lut16[value[k]] : static_cast(briLut[value[k]] << 8); + const uint16_t q = wide16[k] ? wide16[k][value[k]] : static_cast(narrow8[k][value[k]] << 8); if (coarse[k] != kAbsent) out[coarse[k]] = static_cast(q >> 8); out[fine[k]] = static_cast(q & 0xFF); } diff --git a/src/light/drivers/DriverBase.h b/src/light/drivers/DriverBase.h index 494bfd07..5caff835 100644 --- a/src/light/drivers/DriverBase.h +++ b/src/light/drivers/DriverBase.h @@ -72,10 +72,6 @@ class DriverBase : public MoonModule { // Applied unconditionally, so brightness works even before the fixture-profile library is up. const uint8_t tableBrightness = adoptBrightness(globalBrightness); correction_.whiteMode = static_cast(whiteMode_); - correction_.balRed = balanceRed_; - correction_.balGreen = balanceGreen_; - correction_.balBlue = balanceBlue_; - correction_.whiteLevel = whiteLevel_; correction_.curve = static_cast(curveSel_); // A missing id falls back to the default, so a driver degrades rather than crashing. if (auto* lib = FixtureProfilesModule::active()) { @@ -93,6 +89,7 @@ class DriverBase : public MoonModule { const bool firstTable = correction_.wantsTable() && !lut16_; if (firstTable) lut16_.resize(256); correction_.lut16 = lut16_.data(); + resolveGainTables(); if (firstTable) correction_.rebuildBrightness(tableBrightness); // a table that existed was filled by the rebuild above onCorrectionChanged(); // let a driver resize its correction-applied buffer } @@ -134,6 +131,8 @@ class DriverBase : public MoonModule { void release() override { freeWire(); // the shared correction scratch: owned here, so no driver re-frees it correction_.lut16 = nullptr; // the table goes with the module's scratch buffers below + correction_.gainLut = nullptr; + correction_.gainLut16 = nullptr; clearFailBuf(); clearConfigErr(); setConfigWarn(nullptr); @@ -179,16 +178,14 @@ class DriverBase : public MoonModule { /// The resolved correction: the wiring comes from a named profile by stable id, and the render loop never reads the library. Correction correction_; ScratchBuffer lut16_{*this}; // the correction's 16-bit table, allocated the first time it is wanted + ScratchBuffer gainLut_{*this}; // the gained tables, only for a profile whose LED type carries a gain + ScratchBuffer gainLut16_{*this}; // the same to 16 bits, only where a channel is read wide uint32_t profileId_ = 0; // stable id into the FixtureProfiles library (0 → resolve to default) /// The fixture profile applied per light, for channel order and white. /// @guide A reorder or a reboot keeps it. After renaming the profile, re-pick it: the next reboot falls back to the default. uint8_t fixtureSel_ = 0; /// How the white channel is derived, shown when the profile carries one. uint8_t whiteMode_ = static_cast(WhiteMode::Min); - /// One die pulled down to meet the others, which corrects a strip's color cast. - uint8_t balanceRed_ = 255, balanceGreen_ = 255, balanceBlue_ = 255; - /// The white die's own trim, which the three above cannot reach. - uint8_t whiteLevel_ = 255; /// This driver's dim, multiplied with the global brightness. uint8_t localBrightness_ = 255; /// How brightness maps to output: CIE 1931, a gamma, or linear. @@ -215,17 +212,10 @@ class DriverBase : public MoonModule { buildFixtureOptions(); // fill fixtureOptions_ from the library, sync id and row controls_.addSelect("fixture", fixtureSel_, fixtureOptions_, fixtureOptionCount_); controls_.setPersistLabel(controls_.count() - 1); // saved by name, so a longer or reordered library never moves it - // Trim DOWN only: there is no headroom above 255, so raising clips rather than balancing. A strip whose green die runs hot is corrected here rather than in every effect. - controls_.addControl("balanceRed", balanceRed_, 0, 255); - controls_.addControl("balanceGreen", balanceGreen_, 0, 255); - controls_.addControl("balanceBlue", balanceBlue_, 0, 255); controls_.addSelect("whiteMode", whiteMode_, kWhiteModeOptions, kWhiteModeCount); // Hidden unless the referenced profile carries a channel there is something to synthesize for. auto* lib = FixtureProfilesModule::active(); controls_.setHidden(controls_.count() - 1, !(lib && lib->profileHasSynthChannel(profileId_))); - // A separate emitter the three RGB trims cannot reach, so it carries its own. - controls_.addControl("whiteLevel", whiteLevel_, 0, 255); - controls_.setHidden(controls_.count() - 1, !(lib && lib->profileHasWhiteDie(profileId_))); // Hidden, and only read: the name an older config saved. controls_.addText("fixtureRef", fixtureRef_, sizeof(fixtureRef_)); controls_.setHidden(controls_.count() - 1, true); @@ -234,12 +224,22 @@ class DriverBase : public MoonModule { /// Set this driver's default referenced profile by name, from its constructor. void setDefaultFixtureName(const char* name) { defaultFixture_ = name; } + /// Give the correction the gained tables its profile asks for, and take them back when it asks for none. Only a profile whose LED type carries a gain pays for them, the way the 16-bit table is allocated only where it is read. + void resolveGainTables() { + const bool wants = correction_.wantsGains(); + if (wants && !gainLut_) gainLut_.resize(Correction::kGainRows * 256); + if (!wants) gainLut_.resize(0); + correction_.gainLut = wants ? gainLut_.data() : nullptr; + const bool wide = wants && correction_.wantsTable(); + if (wide && !gainLut16_) gainLut16_.resize(Correction::kGainRows * 256); + if (!wide) gainLut16_.resize(0); + correction_.gainLut16 = gainLut16_ ? gainLut16_.data() : nullptr; + } + /// Whether `name` is one of the correction controls, for a driver's own prepare test. static bool isCorrectionControl(const char* name) { return std::strcmp(name, "fixture") == 0 || std::strcmp(name, "fixtureRef") == 0 || std::strcmp(name, "localBrightness") == 0 - || std::strcmp(name, "whiteMode") == 0 || std::strcmp(name, "curve") == 0 - || std::strcmp(name, "balanceRed") == 0 || std::strcmp(name, "balanceGreen") == 0 - || std::strcmp(name, "balanceBlue") == 0 || std::strcmp(name, "whiteLevel") == 0; + || std::strcmp(name, "whiteMode") == 0 || std::strcmp(name, "curve") == 0; } private: diff --git a/src/light/drivers/FixtureProfilesModule.h b/src/light/drivers/FixtureProfilesModule.h index 19a12cb1..b0c9c0b6 100644 --- a/src/light/drivers/FixtureProfilesModule.h +++ b/src/light/drivers/FixtureProfilesModule.h @@ -106,6 +106,10 @@ class FixtureProfilesModule : public MoonModule, public ListSource { const Profile* p = find(id); if (!p) return false; // The option indices are aligned with the enum, so a role byte IS a ChannelRole value. + out.gainRed = p->gainRed; + out.gainGreen = p->gainGreen; + out.gainBlue = p->gainBlue; + out.gainWhite = p->gainWhite; out.rebuild(brightness, reinterpret_cast(roleAt(*p)), p->channelCount); return true; } @@ -136,6 +140,7 @@ class FixtureProfilesModule : public MoonModule, public ListSource { /// @field name The profile's name, as a driver's fixture picker lists it. /// @field channels How many DMX channels the fixture takes. /// @field ch What one channel carries, such as red, dimmer or pan; none for a spacer or a channel set elsewhere. + /// @field gain One die pulled down to meet the others, 255 for a type that needs none; the gain lands on emitted light, so 128 is half of it. /// @guide Built-in rows are read-only, and custom rows persist across a reboot. controls_.addList("profiles", *this); // this module is the (editable) ListSource } @@ -156,6 +161,11 @@ class FixtureProfilesModule : public MoonModule, public ListSource { for (uint8_t c = 0; c < p.channelCount; c++) sink.appendf("%s%u", c ? "," : "", static_cast(roles[c])); sink.append("]"); + // Only a type that needs one, so every built-in row stays the shape it was. + if (hasGain(p)) + sink.appendf(",\"gains\":[%u,%u,%u,%u]", static_cast(p.gainRed), + static_cast(p.gainGreen), static_cast(p.gainBlue), + static_cast(p.gainWhite)); if (p.locked) sink.append(",\"locked\":true"); sink.append("}"); } @@ -183,6 +193,13 @@ class FixtureProfilesModule : public MoonModule, public ListSource { sink.appendf(",{\"name\":\"ch%u\",\"type\":\"select\",\"value\":%u,\"optionsRef\":\"channelRole\"}", static_cast(c), static_cast(roles[c])); } + const char* const kGainFields[] = {"gainRed", "gainGreen", "gainBlue", "gainWhite"}; + const uint8_t gains[] = {p.gainRed, p.gainGreen, p.gainBlue, p.gainWhite}; + // The white gain reaches the white dies alone, so a profile carrying none is not offered a field that changes nothing. + const uint8_t offered = profileHasWhiteDie(p.id) ? 4u : 3u; + for (uint8_t gi = 0; gi < offered; gi++) + sink.appendf(",{\"name\":\"%s\",\"type\":\"uint8\",\"value\":%u,\"min\":0,\"max\":255}", + kGainFields[gi], static_cast(gains[gi])); sink.append("]}"); } @@ -257,6 +274,7 @@ class FixtureProfilesModule : public MoonModule, public ListSource { setChannelCount(p, static_cast(v)); return true; } + if (setGain(p, field, valueJson)) return true; return setChannelRole(p, field, valueJson); } @@ -288,6 +306,8 @@ class FixtureProfilesModule : public MoonModule, public ListSource { uint16_t poolOffset = 0; // start of this profile's roles in pool_ (set by rebuildPool); 48 x 255 fits uint16_t poolLen = 0; // the OLD slice size, distinct from channelCount mid-change bool locked = false; + /// Per-channel gain, 255 where this LED type needs none: an off batch gets a profile of its own. + uint8_t gainRed = 255, gainGreen = 255, gainBlue = 255, gainWhite = 255; }; static_assert(kMaxProfiles * 255 <= 0xFFFF, "a full library's role pool must fit the 16-bit pool offsets"); @@ -329,6 +349,25 @@ class FixtureProfilesModule : public MoonModule, public ListSource { return field[0] == 'c' && field[1] == 'h' && field[2] >= '0' && field[2] <= '9'; } + /// Whether this profile carries a gain, which is what decides whether a driver allocates the gained tables. + static bool hasGain(const Profile& p) { + return p.gainRed != 255 || p.gainGreen != 255 || p.gainBlue != 255 || p.gainWhite != 255; + } + + /// Set the gain a `gainRed`-style field names; false for any other field or an out-of-range value. + bool setGain(Profile& p, const char* field, const char* valueJson) { + uint8_t* slot = std::strcmp(field, "gainRed") == 0 ? &p.gainRed + : std::strcmp(field, "gainGreen") == 0 ? &p.gainGreen + : std::strcmp(field, "gainBlue") == 0 ? &p.gainBlue + : std::strcmp(field, "gainWhite") == 0 ? &p.gainWhite + : nullptr; + if (!slot) return false; + const int v = mm::json::parseInt(valueJson, "value"); + if (v < 0 || v > 255) return false; + *slot = static_cast(v); + return true; + } + /// Set the role of the channel a `chN` field names; false for any other field or an out-of-range value. bool setChannelRole(Profile& p, const char* field, const char* valueJson) { if (!isChannelField(field)) return false; @@ -357,9 +396,20 @@ class FixtureProfilesModule : public MoonModule, public ListSource { const int ch = mm::json::readInt(mm::json::member(doc, row, "channels"), 3); p.channelCount = static_cast(ch < 1 ? 1 : ch > 255 ? 255 : ch); p.locked = mm::json::readBool(mm::json::member(doc, row, "locked"), false); + restoreGains(doc, row, p); if (p.id >= nextId_) nextId_ = p.id + 1; // never reissue a persisted id } + /// Read one persisted row's gains, an absent array leaving the type ungained. Clamped, since a corrupt file can carry a value outside the range the UI offers. + void restoreGains(const mm::json::JsonDoc& doc, const mm::json::JsonNode* row, Profile& p) { + const mm::json::JsonNode* gains = mm::json::member(doc, row, "gains"); + uint8_t* slot[] = {&p.gainRed, &p.gainGreen, &p.gainBlue, &p.gainWhite}; + for (uint8_t gi = 0; gi < 4; gi++) { + const int v = mm::json::readInt(mm::json::element(doc, gains, gi), 255); + *slot[gi] = static_cast(v < 0 ? 255 : v > 255 ? 255 : v); + } + } + /// Read one persisted row's roles into its slice of the pool, an absent or invalid one as None. It is clamped, since a corrupt file can carry a byte the UI mis-renders and the Correction drops. void restoreRoles(const mm::json::JsonDoc& doc, const mm::json::JsonNode* row, const Profile& p) { const mm::json::JsonNode* roles = mm::json::member(doc, row, "roles"); diff --git a/test/unit/light/unit_Correction.cpp b/test/unit/light/unit_Correction.cpp index 3c687a2f..f0243071 100644 --- a/test/unit/light/unit_Correction.cpp +++ b/test/unit/light/unit_Correction.cpp @@ -643,50 +643,82 @@ TEST_CASE("Dimmer fine is driven wide open with its coarse byte") { CHECK((out[0] == 255 && out[1] == 255)); } -// An LED's three emitters are not equally efficient, so a neutral triple can render with a cast. The trim pulls one die down to meet the others, at the output rather than in every effect. -TEST_CASE("Correction balance: trimming one channel leaves the others untouched") { +// The gain lives on the fixture profile, since a cast is a property of the LED type; a driver allocates these tables only for a profile that carries one. +namespace { +struct Gained { + uint8_t lut[mm::Correction::kGainRows * 256] = {}; + uint16_t lut16[mm::Correction::kGainRows * 256] = {}; + /// Wire the tables a driver would own, then fill them through the production rebuild. + void wire(Correction& c) { + c.gainLut = lut; + c.gainLut16 = lut16; + } +}; +} // namespace + +// An LED's three emitters are not equally efficient, so a neutral triple can render with a cast. The profile's gain pulls one die down to meet the others, at the output rather than in every effect. +TEST_CASE("Correction gain: one channel's gain leaves the others untouched") { Correction c; - c.balGreen = 128; + Gained g; + g.wire(c); + c.gainGreen = 128; mm::test::rebuildFromPreset(c, 255, mm::test::PresetOrder::RGB); const uint8_t src[3] = {200, 200, 200}; // the triple a green-cast strip renders wrong uint8_t out[3] = {}; c.apply(src, out, 3); CHECK(out[0] == 200); - CHECK(out[1] == 100); // pulled down to match the weaker channels + CHECK(out[1] == 100); // half the green light, which is what 128 says CHECK(out[2] == 200); } -// A white phosphor is separate hardware, so an RGB trim must say nothing about it. -TEST_CASE("Correction balance: an RGB trim does not reach the white die") { +// A white phosphor is separate hardware, so an RGB gain must say nothing about it. +TEST_CASE("Correction gain: an RGB gain does not reach the white die") { Correction c; - c.balBlue = 128; + Gained g; + g.wire(c); + c.gainBlue = 128; mm::test::rebuildFromPreset(c, 255, mm::test::PresetOrder::RGBW); const uint8_t src[3] = {200, 200, 200}; uint8_t out[4] = {}; c.apply(src, out, 3); CHECK(out[0] == 200); CHECK(out[1] == 200); - CHECK(out[2] == 100); // blue trimmed - CHECK(out[3] == 200); // the white component, from the untrimmed minimum + CHECK(out[2] == 100); // blue gained + CHECK(out[3] == 200); // the white component, ungained } -// The trim pre-scales the index the curve is read at, so the curve still lands last. -TEST_CASE("Correction balance: the curve and the trim compose") { +// The gain lands on emitted light, after the curve, so its value means what it says at any curve. +TEST_CASE("Correction gain: the curve and the gain compose to the gain's own ratio") { Correction c; - c.balBlue = 128; + Gained g; + g.wire(c); + c.gainBlue = 128; mm::test::rebuildFromPreset(c, 255, mm::test::PresetOrder::RGB); c.curve = Correction::Curve::Gamma22; - c.rebuildBrightness(255); // the same offsets, the table refilled through the curve + c.rebuildBrightness(255); // the same offsets, the tables refilled through the curve const uint8_t src[3] = {200, 200, 200}; uint8_t out[3] = {}; c.apply(src, out, 3); - CHECK(out[0] == 149); // red: the curve alone, (200/255)^2.2 * 255 - CHECK(out[2] < out[0]); // blue: trimmed first, so it reads the curve lower down - CHECK(out[2] > 0); + CHECK(out[0] == 149); // red: the curve alone, (200/255)^2.2 * 255 + CHECK(out[2] == 75); // blue: that light at 128/255 of it, not an index pulled down before the curve } -// The white die carries its own trim, since it is often brighter than the trio beside it. -TEST_CASE("Correction whiteLevel: trims the white die without touching RGB") { +// Every built-in profile carries no gain, so it allocates nothing and every channel reads the one curve. +TEST_CASE("Correction gain: a profile with no gain wants no tables") { + Correction c; + mm::test::rebuildFromPreset(c, 255, mm::test::PresetOrder::RGBW); + CHECK_FALSE(c.wantsGains()); + const uint8_t src[3] = {200, 160, 120}; + uint8_t out[4] = {}; + c.apply(src, out, 3); + CHECK(out[0] == 200); + CHECK(out[1] == 160); + CHECK(out[2] == 120); + CHECK(out[3] == 120); +} + +// The white die carries its own gain, since it is often brighter than the trio beside it. +TEST_CASE("Correction gainWhite: gains the white die without touching RGB") { const uint8_t src[3] = {200, 160, 120}; // the white component is the minimum, 120 Correction full; @@ -695,19 +727,24 @@ TEST_CASE("Correction whiteLevel: trims the white die without touching RGB") { full.apply(src, a, 3); Correction half; - half.whiteLevel = 128; + Gained g; + g.wire(half); + half.gainWhite = 128; mm::test::rebuildFromPreset(half, 255, mm::test::PresetOrder::RGBW); uint8_t b[4] = {}; half.apply(src, b, 3); - CHECK(b[3] < a[3]); // the white die alone moves + CHECK(a[3] == 120); + CHECK(b[3] == 60); // the white die alone moves CHECK((b[0] == a[0] && b[1] == a[1] && b[2] == a[2])); } // A die asked for nothing goes out, rather than resting on the floor that keeps a fade from snapping off. -TEST_CASE("Correction whiteLevel: zero puts the white die out") { +TEST_CASE("Correction gainWhite: zero puts the white die out") { Correction c; - c.whiteLevel = 0; + Gained g; + g.wire(c); + c.gainWhite = 0; mm::test::rebuildFromPreset(c, 255, mm::test::PresetOrder::RGBW); const uint8_t src[3] = {200, 160, 120}; uint8_t out[4] = {}; @@ -715,3 +752,20 @@ TEST_CASE("Correction whiteLevel: zero puts the white die out") { CHECK(out[3] == 0); CHECK(out[0] == 200); // and the trio is untouched } + +// A driver resolving a profile assigns a Correction whole, and a test does the same, so a gained one must carry no pointer into the object it came from. +TEST_CASE("Correction gain: a copied correction reads its own tables") { + Correction built; + Gained g; + g.wire(built); + built.gainGreen = 128; + mm::test::rebuildFromPreset(built, 255, mm::test::PresetOrder::RGB); + + Correction copy = built; // what a driver's assignment does + const uint8_t src[3] = {200, 200, 200}; + uint8_t out[3] = {}; + copy.apply(src, out, 3); + CHECK(out[0] == 200); + CHECK(out[1] == 100); // the gain survives the copy, read through the copy's own curve + CHECK(out[2] == 200); +} diff --git a/test/unit/light/unit_FixtureProfilesModule.cpp b/test/unit/light/unit_FixtureProfilesModule.cpp index 3068b320..632e10cc 100644 --- a/test/unit/light/unit_FixtureProfilesModule.cpp +++ b/test/unit/light/unit_FixtureProfilesModule.cpp @@ -622,3 +622,26 @@ TEST_CASE("A saved profile without an id gets its own, and its name is not seede CHECK(grb == 1); CHECK(builtinId(m, "GRB") > 1); // not the id the next saved row holds } + +// A cast is a property of the LED type, so the gain is the profile's; an edit must survive the row being written and restored. +TEST_CASE("FixtureProfiles gain: an edited gain is kept, serialized and restored") { + FixtureProfilesModule m; + m.setup(); + uint32_t id = 0; + REQUIRE(m.addListRow(id)); + REQUIRE(m.setListRowField(id, "channels", "{\"value\":4}")); + REQUIRE(m.setListRowField(id, "ch3", "{\"value\":4}")); // a white die, so gainWhite is offered + + CHECK(m.setListRowField(id, "gainGreen", "{\"value\":180}")); + CHECK(m.setListRowField(id, "gainWhite", "{\"value\":150}")); + + // The correction the driver resolves carries them. + Correction c; + REQUIRE(m.deriveCorrection(id, 255, c)); + CHECK(c.gainGreen == 180); + CHECK(c.gainWhite == 150); + + // The row the UI re-reads carries them, rather than snapping back to 255. + const std::string rows = profilesJson(m); + CHECK(rows.find("\"gains\":[255,180,255,150]") != std::string::npos); +} From 7082587c2f82298e5224d3dc48f1348f973f00b9 Mon Sep 17 00:00:00 2001 From: ewowi Date: Mon, 2 Nov 2026 13:25:52 +0100 Subject: [PATCH 3/4] Apply a profile's first gain at once, resolve the gained tables at rebuild, help per gain field, a Color balance section On an 8-bit wiring the gained tables were allocated after the rebuild that fills them, and refilled only when the 16-bit table was new, so a first gain showed only at the next brightness change; resolveGainTables now reports a new table and the rebuild refills on it. Each light asked for its tables per call, testing every channel's row for null to fall back on the curve, ungained profiles included. The tables now resolve once per rebuild, so a light reads its channel's table with no test, as before the gains. - Correction.h: the copied state is CorrectionData; Correction adds the resolved 8-bit and 16-bit tables, and its copy and assignment resolve them again, since the ungained rows point into the copy's own curve. - DriverBase.h: resolveGainTables returns whether a table is new, its sizing one fitGainTable per table; rebuildCorrection refills on a new gain table as on a new 16-bit one; release puts the tables back on the curve, so no row points into a freed table. - FixtureProfilesModule.h: a help line per gain field, since the UI matches a row field's help by its exact name; a Color balance section in the guide. - unit_FixtureProfilesModule: a driver running on an ungained profile picks a gained one and applies the gain from that one rebuild (fails before the fix: green 255). - The card image, captured from the desktop with a gained GRBW profile open; the old one still showed LightPresets. - help.json regenerated; the prose count falls by two. Tested: desktop 2858 cases pass on a fresh test build, the copied-correction case among them; check_code at its baseline, check_docgen 0 errors with its warnings at the baseline, check_prose at its committed counts. Co-Authored-By: Claude Opus 5.5 --- docs/assets/light/drivers/fixtureprofiles.png | Bin 115437 -> 151098 bytes docs/help/help.json | 17 +++- docs/reference/metrics/prose.json | 6 +- src/light/drivers/Correction.h | 81 +++++++++--------- src/light/drivers/DriverBase.h | 27 ++++-- src/light/drivers/FixtureProfilesModule.h | 9 +- .../unit/light/unit_FixtureProfilesModule.cpp | 25 ++++++ 7 files changed, 109 insertions(+), 56 deletions(-) diff --git a/docs/assets/light/drivers/fixtureprofiles.png b/docs/assets/light/drivers/fixtureprofiles.png index 4762e9bd13ea07d919f52e9555077ad47fa87dd1..9973a8402dc9b7de1fd17ac10132b075402dcd8c 100644 GIT binary patch literal 151098 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 z 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

    c>h zU<9&NRK=nJ#%-u<#SEQ>eM`~6ym}oHFL?(un+xdH|26$_b_32&X!D)}Lsy5*aLi%x zMH*6r1+Jj$Q+4(t$w|b)=~;YFd`UaMxPJTBMZhPodipr(mDv?Kz3o}brnll02?@~~ zNju$jcJ($gyAz(V#ghNxc2BOnCLY&Zn0iGu6op|~w9?cO98Fv7!VfNL%DwgHfB*^a zab*`XG0R_?)(hB{KwOGssCD>b@W&L7foEt zz4rG5<9LD6E*s7V=ekJnnNdP?_}i#0P=aj{kqqzn9Pd9!m#2^vYLgi2ezr z0|^Q&$?41_n@O4<{>;08))+RIxZx%|%jWB-@{n~M0gB^Rf*Erv$}PoJ_jt0xfjXBk z;7jTD$ZG!Du7K5Me{ChjRMu483TSH(>SuMM!lB0%w>fiq@g7S`v_SYBCf1SJ<|ZY) zvr@k^fg@1M1Z)}+vNaEwn4cSIMP!4g=r)OhJv_?`E#Xxn9}>KKm9M8dO})L3{kK1T z*S(N{@RnG-O&1V&P@Q`1H}Ay8tjZ!W+^pjiDQ#bx`R}wGpvE14Z*! z@t(mQapGwvNoL$(pT7Q?0YRMEcYDM%K1cd#j^AUVdM zp_o$RrHp`Sg0!1#M`~i8OG@Se-CEY=lQT*_{P=q<^j|8xZsBT5AfsSo>cTu!DEpBB zS+6JlS-bq&{mthTZ4UPsOA4qXm6MunD9U+D9j#k4=za2ustxevQfc~(lQZVGkd_9KPRd_P`!4>7ae}EquNzjw*#|Ga2 E4dEo1iU0rr diff --git a/docs/help/help.json b/docs/help/help.json index 23413c65..ce7b6f09 100644 --- a/docs/help/help.json +++ b/docs/help/help.json @@ -154,6 +154,10 @@ "title": "16-bit channels", "text": "A fine role is the low byte of a 16-bit channel, the DMX convention. `RGB 16-bit`, `GRB 16-bit` and `RGBW 16-bit` ship built in. Effects stay 8-bit, and brightness and curve go to 16 bits on output. Pan and tilt widen by repeating their byte, and a master dimmer is held wide open." }, + { + "title": "Color balance", + "text": "A batch whose white looks tinted gets a profile of its own with the strong die pulled down: green at 220 takes a green cast out. The gain applies after the curve, so 128 is half the light, and every driver on that profile follows." + }, { "title": "Which profile a chip takes", "text": "| Chip | Profile |\n|---|---|\n| WS2812B, WS2813, WS2815 | `GRB` |\n| SK6812 RGBW | `GRBW` |\n| WS2814 | `WRGB` |\n| WS2816 | `GRB 16-bit` |\n| UCS8903 | `RGB 16-bit` |\n| UCS8904 | `RGBW 16-bit` |\n\nA WS2811 orders its colors as its maker wired it, so try `RGB`, then the other five orders. The TM1814 and TM1914 need a settings preamble that a profile cannot describe." @@ -174,8 +178,17 @@ "ch": { "line": "What one channel carries, such as red, dimmer or pan; none for a spacer or a channel set elsewhere." }, - "gain": { - "line": "One die pulled down to meet the others, 255 for a type that needs none; the gain lands on emitted light, so 128 is half of it." + "gainRed": { + "line": "The red die pulled down to meet the others, 255 for none; on emitted light, so 128 is half." + }, + "gainGreen": { + "line": "The green die, likewise." + }, + "gainBlue": { + "line": "The blue die, likewise." + }, + "gainWhite": { + "line": "The white dies, cold and warm, offered where the profile carries one." } } } diff --git a/docs/reference/metrics/prose.json b/docs/reference/metrics/prose.json index bd246144..26540b1d 100644 --- a/docs/reference/metrics/prose.json +++ b/docs/reference/metrics/prose.json @@ -1,5 +1,5 @@ { - "(total)": 2017, + "(total)": 2015, "MoonLight.EmDash": 1106, "MoonLight.LinkText": 7, "MoonLight.NegatedHeading": 6, @@ -8,6 +8,6 @@ "MoonLight.Spelling": 39, "MoonLight.Temporal": 170, "MoonLight.TonePadding": 1, - "MoonLight.VagueClose": 28, - "MoonLight.Weasel": 602 + "MoonLight.VagueClose": 27, + "MoonLight.Weasel": 601 } diff --git a/src/light/drivers/Correction.h b/src/light/drivers/Correction.h index fdcf0715..fb6f931a 100644 --- a/src/light/drivers/Correction.h +++ b/src/light/drivers/Correction.h @@ -26,8 +26,8 @@ inline constexpr uint8_t kWhiteModeCount = sizeof(kWhiteModeOptions) / sizeof(kWhiteModeOptions[0]); -/// The transform itself, its offsets derived cold from the role array so the hot path stays an indexed store per channel. -struct Correction { +/// What a correction resolves to, copied whole: the curve's table, the gains and the channel offsets. +struct CorrectionData { /// Marks a role this light does not carry. static constexpr uint8_t kAbsent = 255; // color role not carried by this light @@ -47,14 +47,6 @@ struct Correction { /// The perceptual curve the output LUT is filled through; Linear is a requirement, not a fallback, since correcting twice darkens as the square. enum class Curve : uint8_t { Cie = 0, Gamma22, Gamma28, Linear }; - /// CIE 1931 lightness, inverted: a control position to a luminance fraction; the constants place the toe so the two segments meet in slope. - static float cieLuminance(float control255) MM_NONBLOCKING { - const float L = control255 * 100.0f / 255.0f; - return (L <= 8.0f) ? (L / 903.3f) - : ((L + 16.0f) / 116.0f) * ((L + 16.0f) / 116.0f) * ((L + 16.0f) / 116.0f); - } - - uint8_t briLut[256] = {}; // briLut[v] = curve(v * brightness / 255) /// The same curve to 16 bits, filled only when the table is wanted; the driver owns the 256 entries. uint16_t* lut16 = nullptr; @@ -100,17 +92,34 @@ struct Correction { /// Whether the fixture carries red, green and blue alone, resolved at rebuild so a plain strip skips every optional role per light. bool plainRgb = true; uint8_t outChannels = 3; // bytes emitted per light (= channelsPerLight of the wiring) - /// Each color channel's gained row, or null for the ungained curve. Into the driver's `gainLut`, never this object's own table, so a Correction stays copyable. - const uint8_t* rowRed = nullptr; ///< red's gained row, or null for the curve itself - const uint8_t* rowGreen = nullptr; ///< green's - const uint8_t* rowBlue = nullptr; ///< blue's - const uint8_t* rowWhite = nullptr; ///< the white dies' - /// Red's gained row to 16 bits, or null where no wide table is filled, which leaves the channel 8-bit. - const uint16_t* rowRed16 = nullptr; - const uint16_t* rowGreen16 = nullptr; ///< green's, likewise - const uint16_t* rowBlue16 = nullptr; ///< blue's - const uint16_t* rowWhite16 = nullptr; ///< the white dies' WhiteMode whiteMode = WhiteMode::Min; // how white is synthesized from RGB (white lights only) +}; + +/// The transform itself, its offsets derived cold from the role array so the hot path stays an indexed store per channel. +struct Correction : CorrectionData { + /// A plain RGB strip on the CIE curve, every table on that curve. + Correction() = default; + /// A copy resolves its own tables, since the ungained ones point into the curve each correction carries. + Correction(const Correction& o) : CorrectionData(o) { resolveTables(); } + /// The same on assignment, which is how a driver is handed a correction. + Correction& operator=(const Correction& o) { + CorrectionData::operator=(o); + resolveTables(); + return *this; + } + + /// The 8-bit tables one light is read through, resolved at rebuild: each channel's gained row, or the curve itself. + Tables t8{briLut, briLut, briLut, briLut, briLut}; + /// The same to 16 bits, each row null where no table is filled, which leaves that channel 8-bit. + Tables t16{}; + + /// CIE 1931 lightness, inverted: a control position to a luminance fraction; the constants place the toe so the two segments meet in slope. + static float cieLuminance(float control255) MM_NONBLOCKING { + const float L = control255 * 100.0f / 255.0f; + return (L <= 8.0f) ? (L / 903.3f) + : ((L + 16.0f) / 116.0f) * ((L + 16.0f) / 116.0f) * ((L + 16.0f) / 116.0f); + } + /// Whether any channel carries a gain, so a driver allocates the gained tables only for a profile that needs them. bool wantsGains() const MM_NONBLOCKING { @@ -136,28 +145,18 @@ struct Correction { resolveTables(); } - /// Point each channel at its gained row, or at null where its gain is 255 or the gained tables are absent. + /// Point each channel at its gained row, or at the curve where its gain is 255 or the gained tables are absent, so a light reads its table without a test. void resolveTables() MM_NONBLOCKING { const uint8_t gain[kGainRows] = {gainRed, gainGreen, gainBlue, gainWhite}; - const uint8_t** row8[kGainRows] = {&rowRed, &rowGreen, &rowBlue, &rowWhite}; - const uint16_t** row16[kGainRows] = {&rowRed16, &rowGreen16, &rowBlue16, &rowWhite16}; + const uint8_t* row8[kGainRows]; + const uint16_t* row16[kGainRows]; for (uint8_t g = 0; g < kGainRows; g++) { const bool gained = gain[g] != 255; - *row8[g] = gained && gainLut ? gainLut + g * 256 : nullptr; - *row16[g] = gained && gainLut16 ? gainLut16 + g * 256 : nullptr; + row8[g] = gained && gainLut ? gainLut + g * 256 : briLut; + row16[g] = gained && gainLut16 ? gainLut16 + g * 256 : lut16; } - } - - /// The 8-bit tables one light is read through, the gained rows over the curve this object carries. - Tables tables8() const MM_NONBLOCKING { - return Tables{briLut, rowRed ? rowRed : briLut, rowGreen ? rowGreen : briLut, - rowBlue ? rowBlue : briLut, rowWhite ? rowWhite : briLut}; - } - - /// The same to 16 bits, each row null where no table is filled, which leaves that channel 8-bit. - Tables tables16() const MM_NONBLOCKING { - return Tables{lut16, rowRed16 ? rowRed16 : lut16, rowGreen16 ? rowGreen16 : lut16, - rowBlue16 ? rowBlue16 : lut16, rowWhite16 ? rowWhite16 : lut16}; + t8 = Tables{briLut, row8[0], row8[1], row8[2], row8[3]}; + t16 = Tables{lut16, row16[0], row16[1], row16[2], row16[3]}; } /// Whether the 16-bit table is filled: a profile with fine roles, or a wide driver. @@ -212,10 +211,10 @@ struct Correction { } /// Hot path: transform one source light into its output bytes, integer-only and allocation-free. - inline void apply(const uint8_t* src, uint8_t* out, uint8_t srcChannels) const { applyThrough(tables8(), src, out, srcChannels); } + inline void apply(const uint8_t* src, uint8_t* out, uint8_t srcChannels) const { applyThrough(t8, src, out, srcChannels); } /// Hot path, wide drivers only: the same transform through the 16-bit table, one value per channel; needs `lut16`. - inline void applyWide(const uint8_t* src, uint16_t* out, uint8_t srcChannels) const { applyThrough(tables16(), src, out, srcChannels); } + inline void applyWide(const uint8_t* src, uint16_t* out, uint8_t srcChannels) const { applyThrough(t16, src, out, srcChannels); } /// The transform through a curve table of either width, so the 8-bit and 16-bit outputs share every line. A remap, not a copy: the layer's packed slots become the fixture's own offsets. template @@ -284,8 +283,8 @@ struct Correction { if (offDimmerFine != kAbsent) out[offDimmerFine] = 255; // wide open is 65535, not 65280 const uint8_t value[5] = {r, g, b, w, w}; // both whites carry the white component, 0 when none is synthesized // Each channel's own gained table, so a fine channel is gained exactly as an 8-bit one and at full resolution. - const Tables w16 = tables16(); - const Tables n8 = tables8(); + const Tables& w16 = t16; + const Tables& n8 = t8; const uint16_t* wide16[5] = {w16.red, w16.green, w16.blue, w16.white, w16.white}; const uint8_t* narrow8[5] = {n8.red, n8.green, n8.blue, n8.white, n8.white}; const uint8_t coarse[5] = {offRed, offGreen, offBlue, offWhite, offWarmWhite}; diff --git a/src/light/drivers/DriverBase.h b/src/light/drivers/DriverBase.h index 5caff835..5f17790f 100644 --- a/src/light/drivers/DriverBase.h +++ b/src/light/drivers/DriverBase.h @@ -89,8 +89,8 @@ class DriverBase : public MoonModule { const bool firstTable = correction_.wantsTable() && !lut16_; if (firstTable) lut16_.resize(256); correction_.lut16 = lut16_.data(); - resolveGainTables(); - if (firstTable) correction_.rebuildBrightness(tableBrightness); // a table that existed was filled by the rebuild above + const bool firstGain = resolveGainTables(); + if (firstTable || firstGain) correction_.rebuildBrightness(tableBrightness); // a table that existed was filled by the rebuild above onCorrectionChanged(); // let a driver resize its correction-applied buffer } @@ -133,6 +133,7 @@ class DriverBase : public MoonModule { correction_.lut16 = nullptr; // the table goes with the module's scratch buffers below correction_.gainLut = nullptr; correction_.gainLut16 = nullptr; + correction_.resolveTables(); // back onto the curve, so no row points into a freed table clearFailBuf(); clearConfigErr(); setConfigWarn(nullptr); @@ -224,16 +225,24 @@ class DriverBase : public MoonModule { /// Set this driver's default referenced profile by name, from its constructor. void setDefaultFixtureName(const char* name) { defaultFixture_ = name; } - /// Give the correction the gained tables its profile asks for, and take them back when it asks for none. Only a profile whose LED type carries a gain pays for them, the way the 16-bit table is allocated only where it is read. - void resolveGainTables() { + /// Give the correction the gained tables its profile asks for, and take them back when it asks for none; true when one is new, which the rebuild before could not fill. + bool resolveGainTables() { const bool wants = correction_.wantsGains(); - if (wants && !gainLut_) gainLut_.resize(Correction::kGainRows * 256); - if (!wants) gainLut_.resize(0); - correction_.gainLut = wants ? gainLut_.data() : nullptr; const bool wide = wants && correction_.wantsTable(); - if (wide && !gainLut16_) gainLut16_.resize(Correction::kGainRows * 256); - if (!wide) gainLut16_.resize(0); + const bool freshGain = fitGainTable(gainLut_, wants); + const bool freshWide = fitGainTable(gainLut16_, wide); + correction_.gainLut = wants ? gainLut_.data() : nullptr; correction_.gainLut16 = gainLut16_ ? gainLut16_.data() : nullptr; + return freshGain || freshWide; + } + + /// Size one gained table to whether it is wanted, true when this call allocated it. + template + static bool fitGainTable(ScratchBuffer& table, bool wanted) { + const bool fresh = wanted && !table; + if (fresh) table.resize(Correction::kGainRows * 256); + if (!wanted) table.resize(0); + return fresh; } /// Whether `name` is one of the correction controls, for a driver's own prepare test. diff --git a/src/light/drivers/FixtureProfilesModule.h b/src/light/drivers/FixtureProfilesModule.h index b0c9c0b6..4fda887b 100644 --- a/src/light/drivers/FixtureProfilesModule.h +++ b/src/light/drivers/FixtureProfilesModule.h @@ -26,6 +26,10 @@ namespace mm { /// /// A fine role is the low byte of a 16-bit channel, the DMX convention. `RGB 16-bit`, `GRB 16-bit` and `RGBW 16-bit` ship built in. Effects stay 8-bit, and brightness and curve go to 16 bits on output. Pan and tilt widen by repeating their byte, and a master dimmer is held wide open. /// +/// ## Color balance +/// +/// A batch whose white looks tinted gets a profile of its own with the strong die pulled down: green at 220 takes a green cast out. The gain applies after the curve, so 128 is half the light, and every driver on that profile follows. +/// /// ## Which profile a chip takes /// /// | Chip | Profile | @@ -140,7 +144,10 @@ class FixtureProfilesModule : public MoonModule, public ListSource { /// @field name The profile's name, as a driver's fixture picker lists it. /// @field channels How many DMX channels the fixture takes. /// @field ch What one channel carries, such as red, dimmer or pan; none for a spacer or a channel set elsewhere. - /// @field gain One die pulled down to meet the others, 255 for a type that needs none; the gain lands on emitted light, so 128 is half of it. + /// @field gainRed The red die pulled down to meet the others, 255 for none; on emitted light, so 128 is half. + /// @field gainGreen The green die, likewise. + /// @field gainBlue The blue die, likewise. + /// @field gainWhite The white dies, cold and warm, offered where the profile carries one. /// @guide Built-in rows are read-only, and custom rows persist across a reboot. controls_.addList("profiles", *this); // this module is the (editable) ListSource } diff --git a/test/unit/light/unit_FixtureProfilesModule.cpp b/test/unit/light/unit_FixtureProfilesModule.cpp index 632e10cc..de094958 100644 --- a/test/unit/light/unit_FixtureProfilesModule.cpp +++ b/test/unit/light/unit_FixtureProfilesModule.cpp @@ -645,3 +645,28 @@ TEST_CASE("FixtureProfiles gain: an edited gain is kept, serialized and restored const std::string rows = profilesJson(m); CHECK(rows.find("\"gains\":[255,180,255,150]") != std::string::npos); } + +// The gained tables are allocated after the rebuild that fills them, so a first gain on an 8-bit wiring must be filled then too, not wait for the next brightness change. +TEST_CASE("A driver applies its profile's first gain at once on an 8-bit wiring") { + FixtureProfilesModule lib; + lib.defineControls(); + uint32_t id = 0; + REQUIRE(lib.addListRow(id)); // R, G, B + REQUIRE(lib.setListRowField(id, "gainGreen", "{\"value\":128}")); + + mm::NetworkSendDriver drv; + drv.defineControls(); + drv.rebuildCorrection(255); // running at full brightness on its default profile, which has no gain + for (uint8_t i = 0; i < drv.controls().count(); i++) + if (std::strcmp(drv.controls()[i].name, "fixture") == 0) + *static_cast(drv.controls()[i].ptr) = lib.indexOfId(id); + drv.rebuildControls(); + drv.onControlChanged("fixture"); // one rebuild, as a pick on the card makes + + const uint8_t white[3] = {255, 255, 255}; + uint8_t out[3] = {}; + drv.correction().apply(white, out, 3); + CHECK(out[0] == 255); + CHECK(out[1] == 128); // half the green, from this rebuild on + CHECK(out[2] == 255); +} From 83eec1e8b6e5abcc0f50e64f2166af669fb4899c Mon Sep 17 00:00:00 2001 From: ewowi Date: Mon, 2 Nov 2026 15:32:42 +0100 Subject: [PATCH 4/4] Warn when a profile's gains find no memory for their table A board without PSRAM can run out of heap; the gained table then stayed unallocated and the strip ran ungained with nothing on the card to say so. - DriverBase.h: a profile's gains without their table show the warning "out of memory for the color balance, gains off", which the driving line yields to; the strip runs ungained, and the next rebuild retries the allocation and clears the warning. - unit_FixtureProfilesModule: with allocations of 1 KB refused, the driver runs ungained and warns; with memory back, the next pick applies the gain and the warning goes (fails before the fix: no status). The fixture pick five tests repeated is one helper. Tested: desktop 2859 cases pass on a fresh test build; check_code, check_docgen and check_prose at their baselines. Co-Authored-By: Claude Opus 5.5 --- src/light/drivers/DriverBase.h | 13 ++++ .../unit/light/unit_FixtureProfilesModule.cpp | 67 +++++++++++++------ 2 files changed, 61 insertions(+), 19 deletions(-) diff --git a/src/light/drivers/DriverBase.h b/src/light/drivers/DriverBase.h index 5f17790f..53acdfbf 100644 --- a/src/light/drivers/DriverBase.h +++ b/src/light/drivers/DriverBase.h @@ -91,6 +91,7 @@ class DriverBase : public MoonModule { correction_.lut16 = lut16_.data(); const bool firstGain = resolveGainTables(); if (firstTable || firstGain) correction_.rebuildBrightness(tableBrightness); // a table that existed was filled by the rebuild above + showGainShortage(); onCorrectionChanged(); // let a driver resize its correction-applied buffer } @@ -236,6 +237,14 @@ class DriverBase : public MoonModule { return freshGain || freshWide; } + /// Warn while a gain the profile asks for has no table to live in, so the strip shows ungained light visibly rather than silently; the next rebuild retries the allocation. + void showGainShortage() { + const bool dropped = correction_.wantsGains() && (!gainLut_ || (correction_.wantsTable() && !gainLut16_)); + if (dropped) setStatus(kNoGainMemory, Severity::Warning); + else if (gainsDropped_ && status() == kNoGainMemory) clearStatus(); + gainsDropped_ = dropped; + } + /// Size one gained table to whether it is wanted, true when this call allocated it. template static bool fitGainTable(ScratchBuffer& table, bool wanted) { @@ -335,6 +344,9 @@ class DriverBase : public MoonModule { /// The status verdicts this driver set; each is cleared only when the status still shows the one this driver set. const char* configErr_ = nullptr; const char* configWarn_ = nullptr; + /// The warning while a profile's gains have no table, which the driving line yields to. + static constexpr const char* kNoGainMemory = "out of memory for the color balance, gains off"; + bool gainsDropped_ = false; char* failBuf_ = nullptr; /// The status buffer size: the widest verdict is the loopback's worst case, which a narrower buffer clips. static constexpr size_t kFailBufLen = 64; @@ -378,6 +390,7 @@ class DriverBase : public MoonModule { /// Show how many lights are driven, set last so an error or warning from earlier in the same parse still wins. void setDrivingInfo(unsigned driven, unsigned total, unsigned channels = 1, const char* mode = nullptr) { + if (gainsDropped_) { setStatus(kNoGainMemory, Severity::Warning); return; } if (char* buf = failBufEnsure()) { int n; if (channels > 1) diff --git a/test/unit/light/unit_FixtureProfilesModule.cpp b/test/unit/light/unit_FixtureProfilesModule.cpp index de094958..d445323b 100644 --- a/test/unit/light/unit_FixtureProfilesModule.cpp +++ b/test/unit/light/unit_FixtureProfilesModule.cpp @@ -30,6 +30,13 @@ std::string profilesJson(FixtureProfilesModule& m) { } return ""; } +// Point a driver's fixture select at a profile by id, as a pick on the card does before its change event. +template +void pointAtProfile(const FixtureProfilesModule& lib, Driver& drv, uint32_t id) { + for (uint8_t i = 0; i < drv.controls().count(); i++) + if (std::strcmp(drv.controls()[i].name, "fixture") == 0) + *static_cast(drv.controls()[i].ptr) = lib.indexOfId(id); +} } // namespace TEST_CASE("FixtureProfiles seeds the curated built-ins as locked rows") { @@ -328,9 +335,7 @@ TEST_CASE("A newly-added profile becomes selectable on a driver") { CHECK(profileOptCount() == before + 1); // the new profile is now an option (was out-of-range before) // And it's actually selectable + resolves: pick the last index, rebuild, no out-of-range. - for (uint8_t i = 0; i < drv.controls().count(); i++) - if (std::strcmp(drv.controls()[i].name, "fixture") == 0) - *static_cast(drv.controls()[i].ptr) = lib.indexOfId(id); + pointAtProfile(lib, drv, id); drv.rebuildControls(); drv.onControlChanged("fixture"); mm::Correction c; @@ -380,9 +385,7 @@ uint32_t builtinId(FixtureProfilesModule& m, const char* name) { } // Point a driver's fixture select at a built-in by name, as a pick on the card does, and resolve it. void pickProfile(FixtureProfilesModule& lib, mm::DriverBase& drv, const char* name) { - for (uint8_t i = 0; i < drv.controls().count(); i++) - if (std::strcmp(drv.controls()[i].name, "fixture") == 0) - *static_cast(drv.controls()[i].ptr) = lib.indexOfId(builtinId(lib, name)); + pointAtProfile(lib, drv, builtinId(lib, name)); drv.onControlChanged("fixture"); drv.rebuildCorrection(255); } @@ -451,9 +454,7 @@ TEST_CASE("A driver referencing a missing profile falls back to the default buil mm::NetworkSendDriver drv; drv.defineControls(); - for (uint8_t i = 0; i < drv.controls().count(); i++) - if (std::strcmp(drv.controls()[i].name, "fixture") == 0) - *static_cast(drv.controls()[i].ptr) = lib.indexOfId(custom); + pointAtProfile(lib, drv, custom); drv.rebuildControls(); drv.onControlChanged("fixture"); drv.rebuildCorrection(255); @@ -646,21 +647,23 @@ TEST_CASE("FixtureProfiles gain: an edited gain is kept, serialized and restored CHECK(rows.find("\"gains\":[255,180,255,150]") != std::string::npos); } -// The gained tables are allocated after the rebuild that fills them, so a first gain on an 8-bit wiring must be filled then too, not wait for the next brightness change. -TEST_CASE("A driver applies its profile's first gain at once on an 8-bit wiring") { - FixtureProfilesModule lib; - lib.defineControls(); +// An RGB profile with green at half, set as the driver's fixture while the driver still runs its ungained default at full brightness; the caller's onControlChanged is the one rebuild a pick on the card makes. +static void selectHalfGreenProfile(FixtureProfilesModule& lib, mm::NetworkSendDriver& drv) { uint32_t id = 0; REQUIRE(lib.addListRow(id)); // R, G, B REQUIRE(lib.setListRowField(id, "gainGreen", "{\"value\":128}")); - - mm::NetworkSendDriver drv; drv.defineControls(); - drv.rebuildCorrection(255); // running at full brightness on its default profile, which has no gain - for (uint8_t i = 0; i < drv.controls().count(); i++) - if (std::strcmp(drv.controls()[i].name, "fixture") == 0) - *static_cast(drv.controls()[i].ptr) = lib.indexOfId(id); + drv.rebuildCorrection(255); + pointAtProfile(lib, drv, id); drv.rebuildControls(); +} + +// The gained tables are allocated after the rebuild that fills them, so a first gain on an 8-bit wiring must be filled then too, not wait for the next brightness change. +TEST_CASE("A driver applies its profile's first gain at once on an 8-bit wiring") { + FixtureProfilesModule lib; + lib.defineControls(); + mm::NetworkSendDriver drv; + selectHalfGreenProfile(lib, drv); drv.onControlChanged("fixture"); // one rebuild, as a pick on the card makes const uint8_t white[3] = {255, 255, 255}; @@ -670,3 +673,29 @@ TEST_CASE("A driver applies its profile's first gain at once on an 8-bit wiring" CHECK(out[1] == 128); // half the green, from this rebuild on CHECK(out[2] == 255); } + +// A board without PSRAM can run out of heap; the gains then go off with a warning, and come back on the next rebuild that finds the memory. +TEST_CASE("A driver warns when its profile's gains find no memory, and applies them once they do") { + FixtureProfilesModule lib; + lib.defineControls(); + mm::NetworkSendDriver drv; + selectHalfGreenProfile(lib, drv); + + struct Refuse { ~Refuse() { mm::platform::setTestAllocRefusedFrom(0); } } refuse; // restored however the test ends + mm::platform::setTestAllocRefusedFrom(1024); // the gained table, 4 rows of 256 + drv.onControlChanged("fixture"); + + const uint8_t white[3] = {255, 255, 255}; + uint8_t out[3] = {}; + drv.correction().apply(white, out, 3); + CHECK(out[1] == 255); // ungained, not garbage + REQUIRE(drv.status() != nullptr); + CHECK(std::strstr(drv.status(), "color balance") != nullptr); + CHECK(drv.severity() == mm::MoonModule::Severity::Warning); + + mm::platform::setTestAllocRefusedFrom(0); + drv.onControlChanged("fixture"); + drv.correction().apply(white, out, 3); + CHECK(out[1] == 128); + CHECK((drv.status() == nullptr || std::strstr(drv.status(), "color balance") == nullptr)); +}

    ~K)UoDD5k+{? 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