-
-
Notifications
You must be signed in to change notification settings - Fork 122
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Low brightness LED Strip inaccuracies. (black-level threshold in the smoothing algorithm) #180
Comments
Hi One important thing if you're referring to anti-flickering filter: make sure that you set anti-flickering timeout to some low level (time in ms) because without it the filter can block indefinitely subtle color changes and it's described in v17 release info: without the timeout reddish RGB(2,1,1) never could become dark grey RGB(1,1,1) and it waits for larger step so can also cause symptoms that you described. |
Hello, thanks for the quick reply especially on a sunday. |
Unfortunately it doesn't work that way: I can't guarantee anything, just as HyperHDR comes without any warranty. I can only offer my experience based on several years of using similar systems. If the alternatives could satisfy me, I would definitely choose them, probably a Philips system, to save a lot of money and development time. We're both sensitive to some of the subtle features of LED systems, but we're a niche. For example: video processing flickering side effect has bothered no one until it's fixed in HyperHDR. So to solve my problem I must diagnose it first and then code it. But I think the issue you report can be solve (if it's solvable at all) with current available options and probably with the LED strip upgrade. Back to the subject: with the average threshold you lose control over particular color channel so it could affect not only brown or reddish colors, with LUT table you have both minimal threshold & gamma correction for each of channel separately. And I think that you forget about minimal Backlight threshold (with 'Colored backlight' option enabled) in the processing tab. With both minimal threshold & such option enabled it could be processed following way: rgb(50, 30, 0) => minimal LUT threshold => rgb (50, 0, 0) => minimal colored backlight 30 => rgb (50, 30, 30). sk6812 cold RGBW white channel could soften very sharp gradients which is especially visible on low brightness scene starting from RGB >= 2. Unfortunately RGBW "neutral" ("neutral" term is nowhere near the truth, in fact it's yellow) version is more limited due to weaker blue component that we must enhance a bit and it kicks in on bit higher level. |
Of course I know that you dont offer any warranty. Sorry if my message sounded rude. I didn't intend it in that way. For me these inaccuracies also happen with green colors. Its probably just the strip, but since its for all channels I would want that parameter to affect all the channels at once. Thanks again for your answers and time. |
No offense taken ;)
I don't understand that: do you want to cut off all the colors below 10% and set them to black? That's how currently LUT minimal threshold works. But the problem with the minimal threshold is when the color jumps over the lower limit and it causes sudden jump in the LED brightness even with the smoothing enabled. So usually it should be applied to cut off very low values. To eliminate one color channel dominance, the gamma correction should be used instead. It dumps low values quite well but it affects all the 0-255 range also. So this is tilting at windmills when the problem lies in the LED strip characteristic and it's visible on low brightness (I'm still assuming that the video grabber captures the video without any distortion). I've never succeeded in satisfying calibration for my ws2801 and ws2813: even if I fixed low colors by reducing red or green then the problem of lacking of that color channels appears at the middle and at the high levels. With RGBW sk6812 on the other hand I leave all the calibration settings on default: it just works well out of box (calibration of that RGBW LED strip depends in fact in proper white channel algorithm but it's outside HyperHDR and it's other story). |
Hi Most of the users are fine with the RGB performance, the rest choose RGBW. If there was no good alternative then maybe we could implement some sophisticated and also almost impossible to configure for average mortal (just as you noticed) filters like gamma channel correction divided into level intervals for each channel or constructed with a help of a curve...still with better theoretical effect than high-level threshold and manipulating the smoothing as work-around for its side-effects. It's not only mine or yours idea, I met it years ago. RGB LED strip have advantages: some of them are much faster than RGBW sk6812, usually are cheaper and almost always colors are more vibrant which is great for bright scenes. But they have one described weakness where RGBW is much better. So I hope you understand I won't back again on that path that I've already tried and it's closed subject for me. In situations like yours I put it on wrong choice of LED strip type that was used to build the particular bias lightning setup... like I did it few times before. Best regards |
In my setup, bright colors are reasonably accurate but dark-ish ones tend to translate to green or red on the LEDs. This makes it difficult to watch anything with dark scenes (i.e. pretty much everything that is not bright and animated). My next LED purchase will be RGBW as you suggest, but that might have to wait for a TV upgrade. In the mean time I would like to hack together a software workaround for personal use, similar to what the OP was after. @awawa-dev any pointers as to where I should start (in the code)? I would like to try and modify the RGB values before they get sent to the LEDS, so that any time the value of R + B + G is less than 30, it is clamped to 0,0,0. It is not likely to fix the problem, but it might be better than what I'm experiencing at the moment. |
@chcore Which grabber are you using?
so when all of R/B/G are less than 30 then clamp it to (0,0,0)? But where: before smoothing or after, just before sending to LED? |
I am using piccap for WebOS, with HyperHDR running on a Raspberry Pi. Ideally I would be using a software grabber directly on my HTPC, but it is my understanding that it is not possible when using Kodi with GBM rendering on x86.
Yes, if the total sum of the R, B and G values is less than 30 (a value to be tweaked later), the LEDs should be off. I think I would like to try it before smoothing and see how it goes? |
then you should check and modify _ledBuffer (array of colors) here HyperHDR/sources/base/HyperHdrInstance.cpp Line 799 in aa20079 |
I ended up solving this problem by modifying I should mention that in my case, the "incorrect color in dark scenes" problem stems from my manual color calibration settings. If I reset them all to default, the above hack is not needed, but at the cost of mostly inaccurate colors across the board. |
Adding this to the UI would be amazing and exactly what I had in mind with this issue
yeah same |
@awawa-dev have you seen this? hyperion-project/hyperion.ng#1797 Do you think a similar feature that takes more (especially low-brightness) colors into account would improve our situation? |
Personally I gave up on trying to calibrate for extreme low brightness, because in doing so It always messed up colors with high brightness.
I am happy with this current band-aid solution. There's some light flickering but I prefer that over the green backlight I sometimes had in dark scenes.
|
I don't think so because such a approach is like a typical too short duvet: fix one place and it'll fall apart somewhere else as @LMaier-dev pointed out. If you want more accuracy, you need a more precise video source. The latest PR includes a much improved calibration that fixes several bugs and uses test MP4 video sources (which is much closer to typical use) rather than the browser for calibration and focuses especially on low brightness quality (test points set for RGB <= 64). It also has a changed algorithm for minimal brightness. Details can be found in the changelog and the discussion here: #896 If you still need something more precise, then you need a grabber that can provide a signal in e.g. 10-bit instead of typical 8-bit source. The next PR added support for it for testing here: #968 and it should solve the HDR quantization problem in the full typical range. EDIT: the discussion is here #967 |
@awawa-dev thank you for your insight, I will try out those changes.
Forgive me as I only have a very naive level of understanding of LUTs, but would it not be possible to generate one using the smartphone calibration method, that correctly translates both high and low brightness colors? For clarity, I am mostly concerned with SDR content and am not using any USB grabber in the chain, only piccap: https://github.com/TBSniller/piccap |
Yes, I had reached the same conclusion with my workaround in a previous comment. I get some flickering, and for the most part low-brightness colors are not displayed at all. It's OK, but I'm always hoping there is room for improvement as I tend to watch a lot of horror films with dark scenes. |
please read the whole already attached discussion here: #896 because there has been a lot of progress regarding piccap and it has been tested by several people who use it. And finally: https://github.com/satgit62/Ultimate-HyperHDR-Ambilight-fine-tuning-experience-for-LG-webOS-with-new-LUT-calibration- |
this of course also includes piccap + SDR usage |
Thanks again, another potential improvement for me to try out this weekend. I suspect our (that is, mine and @LMaier-dev's) LEDs don't faithfully produce low-brightness colors, while high RGB values are fine. As far as I can tell (through the HyperHDR preview window), HyperHDR is already receiving reasonably accurate colors in the video stream from piccap. Will these changes help in that case? Only one way to find out, I suppose! |
For low brightness images it is hard to see details in the video preview (it is additionally compressed there). In the case of SDR and piccap the results were amazing: #896 (comment) |
Sounds very promising. Thanks again, will try it and report back. |
Feature request
What problem does this feature solve?
Theres already the option for Anti-flickering threshold which completely eliminated my flickering issue with low Brightness. Thank you for that!
But I hoped this could be extended to have another option for turning the LEDs completely off for very low brightess values.
I mean like a black-level threshold which would logically be smaller than the Anti-Flickering one.
Because no matter how much time I spend on calibrating the LEDs with gammas (im at ~2.6) there is always either blue, red or green when it should be grey (or very dark brown for example). With that being said I'm very satisfied with the result in brighter scenes, the color is spot on in those cases (also with bright brown or skin colors which are especially bad in low brightness cases).
I think its just a LED Strip Problem which could be fixed by that threshold. And since the anti flickering is already implemented the Leds shouldnt flicker when the threshold is crossed multiple times in short sequence.
What does the proposed API look like?
How should this be implemented in your opinion?
In combination with the Anti-Flickering threshold in the smoothing Algorithm.
Are you willing to work on this yourself?
I could try it, but I dont know if the threshold value is a good solution to the problem and I'm an amateur programmer at best.
The text was updated successfully, but these errors were encountered: