Conversation
fcb4aec to
ef6531c
Compare
ef6531c to
93df95c
Compare
|
Hi, |
|
Let's give Qt5.15 a chance. If the compilation process breaks, we'll assess whether it's worth creating a workaround for Qt5.15, or whether, for example, the cross-compilation package should be updated to Qt6.8. I can help you cross-compile this Qt6.8 package, although it will probably lead to a split with webos homebrew: another matter is that the version there has long been obsolete, and your repo offers newer version and many more out-of-the-box features, e.g., ready-made LUT tables. |
Hi, thank you. I would appreciate your help cross-compiling this Qt6.8 package if it doesn't work with Qt5.15. Yes, I know that webOS homebrew is not kept up to date, which is why I always follow it and always compile the latest packages. I then distributed the self-compiled versions to the webOS community. |
|
Hi @satgit62 After few small changes I've managed to compile HyperHDR on Windows using 5.15. I've updated the PR so could you test it again? Maybe my concerns about mixing Qt5.15 with C++20 were exaggerated, although often gcc on Linux is the real functional test ;-) |
Hi, thank you very much for the change. I'll test it right away and let you know if it was successful. |
|
@awawa-dev , thanks to the change “Infinite Color Engine: Compatibility with Qt5.15,” it could be compiled for webOS without any problems. I will test it and give my feedback tomorrow. Thank you. |
|
@awawa-dev |
|
Nice work Awawa, I've tried it and the new smoothing is immediately noticable. Do we need to re-calibrate our LUT's for this new color engine? Edit: I see new settings in the image processing tab. About the color temperature settings: Is this to "correct" a SK6812 neutral-white version to your recommended cold-white version? Or is this about adjusting your LED's to match the white point of the TV picture? Almost everywhere a D65 white point is recommended, is this setting supposed to match that? |
|
The question about temperature settings is valid and would also interest me, but I think everyone should select the temperature of the LEDs accordingly. In the HyperSerial or HyperSerialPico driver, the RGB “white channel aspect” can be balanced. With the WLED controller, you can select the appropriate white balance in the LED settings, and in HyperHDR, this can be balanced using the “Temperature Custom Adjust” function. |
|
Hi For brightness, you can adjust it in two places:
I hope this explains how color processing worked previously and how it works now. The post-processing Pipeline (Before → Now)Old approach (24-bit pipeline)
New approach (float3 pipeline)
👉 Overall: the new pipeline is much more accurate, perceptually consistent, and scientifically correct. The old one was simpler but mathematically flawed.
|
|
Sorry, I missed that question earlier: “Smoothing Factor” is only for the RGB Infinite interpolator (one of the new Smoothing algos). |
|
Your explanation was a veritable seminar on what functions and algorithms in HyperHDR can achieve, both old and new. I must admit that even at my advanced age, I am happy to learn and internalize new things. Thank you for that. 🙏🫡 👍 |
No, you don't.
I think it should be disabled by default. In our case, it's a completely subjective option and depends on how you want the white shifted in processing, which of course affects the output. Or/and you can use the HyperSerial/HyperSPI option to calibrate the output colors, which works differently: simultaneous calibration of white color and temperature. By the way, in the HyperSerial/HyperSPI , the 'cold' setting has equal correction factors (something like setting the same value for all channels here for temperature, so like 'neutral' temperature) because all SK6812 LEDs on the market that I met already have a red shift, and in fact, the SK6812 cold is 'neutral' here, and there's no such thing as a "real-cold white" SK6812. |
|
Hello @awawa-dev I have noticed that something is wrong with the JSON in the “infinite_color_engine” branch. Everything worked in the old version. I also tested it with the Windows version to rule out the possibility that webOS is faulty. Example 1: Log: Example 2: LEDs go out completely! Thank you, and I hope you find a solution. |
|
Hi @satgit62 Now, after each color calibration change, you should have clear confirmation of the settings in the logs. |
|
Great work, @awawa-dev, |
8a6ae7f to
d4aec4f
Compare
|
New features:
the doc has been updated |
bd50345 to
ffc6518
Compare
0a844b9 to
5d8d274
Compare
…are left of the build
|
@satgit62 few small improvements:
|
|
@awawa-dev Hallo, |
|
Sure, that makes sense. I added hiding this option if grabbers were disabled in build. Also I found and fixed a memory leak, update is recommended. If you are using new updated version and you see "Set LED strip to black/power off, but the LED strip is empty. Skipped" in the logs then you were affected. |
Thanks, now the "Automatic Tone Mapping" option has disappeared from the "Image Processing" menu in the UI. Perfect! 👍Obviously, I wasn't affected by this memory leak, but it's good that you fixed it. |
|
This latest commit is just cosmetic, just in case. I think I'll slowly freeze the code for v22beta1, although it still requires a ton of testing: the changes related to the introduction of the Infinite Color Engine affect the HyperHDR's core itself, so I want to make sure everything works fine. I might refactor the code a bit for c++20 and add a few minor fixes from Issues, but they'll be specific to Linux or macOS configurations. It seems like it could be released in about a month. We'll see what comes out of the tests. |
|
@awawa-dev , |
|
Important fix: #1302 |



Infinite Color Engine & New Smoothing Algorithms
I’m pleased to present a feature I’ve been looking forward to for a long time and have worked hard to bring to life:
the Infinite Color Engine, along with completely new smoothing algorithms.
This has been on the roadmap for quite a while, but other priorities had to come first.
What is the Infinite Color Engine?
In short, it marks a clean break from the old 24-bit color space, moving to floating-point precision while still maintaining performance.
You might ask: Why bother, if most sources don’t provide more than 24-bit color, except perhaps the P010 format?
Well, here’s the thing:
such sources have always been available—even with something as basic as a cheap MS2109 grabber or flatbuffers external source.
In our application, when averaging colors for each LED, we’ve always had access to a high-precision theoretical color space.
Until now, that precision was being brutally truncated to 24-bit.
Another hidden “source” of precision has long been smoothing, which interpolates intermediate colors.
This entire subsystem has now been rewritten to handle floating-point numbers at both input and output.
What Does This Mean in Practice?
Previously, when the final averaged color happened to fall on the boundary between two integers, even tiny changes in the source could trigger sudden jumps between frames.
By switching to floating-point, this issue has been drastically minimized.
Hardware Support
Extended color support is now available in drivers for:
This covers a wide range of popular devices.
On my own Philips Hue lamps, the first noticeable improvement was much smoother transitions—
where before there were obvious “steps” in color changes, now the shift feels more continuous.
Why “Infinite”?
The name isn’t just marketing.
The Infinite Color Engine works with a color palette of 1.24 × 10²⁷ possible values.
For comparison:
The difference is, quite literally, astronomical. 🌌
New smoothing algorithms
In addition to the transition to floating-point numbers, the focus was on adding parameters that control the abruptness of color changes (brightness limiter or averaging with the previous frame) and adding the ability to work in the YUV space, not just RGB.
Processing Pipeline (Before → Now)
⬇️ 1. Video Frame Area Averaging for LED
⬇️ 2. Post-Processing
⬇️ 3. Smoothing
⬇️ 4. LED Drivers
otherwise → fallback to 24-bit rendering
The post-processing Pipeline (Before → Now)
Old approach (24-bit pipeline)
New approach (float3 pipeline)
👉 Overall: the new pipeline is much more accurate, perceptually consistent, and scientifically correct. The old one was simpler but mathematically flawed.
All further steps already lose accuracy due to rounding 😬
Correct starting point for calibration & math ✅
1. Apply Brightness & Saturation
2. Apply User Gamma per channel 😬
3. Calibrate in Colorspace (on nonlinear data 😬)
4. Apply Color Temperature
5. Apply Minimal Backlight
1. Apply Color Temperature (before calibration ✅)
2. Calibrate in Colorspace (linear domain ✅)
3. Scale color output (user parameter ✅)
4. Convert to nonlinear sRGB (only once ✅)
5. Apply User Gamma (global, consistent ✅)
6. Apply Brightness & Saturation (perceptual ops ✅)
7. Apply Minimal Backlight (final floor ✅)
8. Limit power output (scale down only if the power limit is exceeded ✅)
And One More Thing: Modernizing the Codebase
Since we recently moved to Qt 6.8.3 or higher
(remember, Qt 5.15—released over a decade ago—is now end-of-life),
the next natural step in this PR is adopting C++20.
This isn’t just about upgrading a version number:
it brings us better language features that improve readability, safety, and overall code quality.
Known issues
Since the post-processing flow has been verified and rewritten in accordance with the correct processing order, it may happen that if you had a specific color calibration set, you will have to check it and possibly correct it to suit the current pipeline.
The configuration of post-processing per LED range was removed because it was complicating the code significantly and is unlikely to return, or at least I don't see any reason to migrate it
If you used or compiled HyperHDR code under Qt5 before, it may no longer work: Qt5.15 has very poor support for C++20.so far we are good with Qt5.15