2016-08-09, 08:28
You are wrong ... and you don't have an idea what you are talking about. It's the driver that messes things up.
But the explanation is not that easy, so I will forgive you :-) ... in short: Intel kernel / xorg has two modes:
A) Full: Don't clamp anything let 0 .. 255 through and signal the TV that it is full
B) Limited 16:235: Clamp (!) everything, by scaling it to 16:235 - cause it is assumed that input is Full Range. Signal the TV to be limited.
Obvious problems:
A)
1) the TV gets signalled FULL with the info frames and might switch to full (!) - if this is the case the only thing from kodi that helps is: Use Limited Range: off Dithering: 8 bit
2) The TV ignores the infoframe and stays "Limited" itself. Then you can tell kodi: "Use Limited Range", cause the TV will blindly ignore 236 to 255 and 0 to 15 and kodi only outputs 16:235 - which means: original video content without touching colors. Pictures which are full range on the other side, are downscaled by kodi
B)
1) If you tick Use Limited in Kodi, kodi will output 16:235 only, but NOW the driver downscales again and you end up with no blacks and no whites at all. <- You now get _why_ the setting "works" as it works?
2) In that mode (which btw. is _the_ _default_ driver mode) the only thing that helps in kodi is "unticking" Use Limited Range, and also enabling Dithering 8 bit - every content (video) is now upscaled to full range _and_ afterwards downscaled by the GPU itself again.
Now - the sane reader has the questions:
Why isn't there a "Just output what i put in without messing and honoring the Limited Range that _most_ TVs are anyways"?
Answer: There is. I implemented a kernel patch that use the famous: "Video Range 16:235" without touching anything. How does it do this?
- Signal Limited in the info frames (which most TVs are and all video content also is)
- Don't touch the colors that are input
This patch _is_ in OpenELEC since several months. And until the patch, which btw. only enabled this on Intel hardware, was dropped - the kernel automatically was in the correct mode. The only thing the user had to do was:
Tick "Use Limited Range" to on, if the TV is in Limited Range. Or tick it "Off" - if not.
As most TVs are in limited Range by default - I ticked that setting "default" to on. In that combination most intel users had a perfect setup out of the box.
Issues with that approach:
- Nvidia users would have had "Use Limited Range" by default, too .... which is not what they wanted
So, what is missing:
- A simple LibreElec / OpenELEC integration patch that toggles the "Use Limited Setting" dependend on:
a) Is the Video Range 16:235 mode used?
b) Did the user disable it by self and we should not automatically set it.
But the explanation is not that easy, so I will forgive you :-) ... in short: Intel kernel / xorg has two modes:
A) Full: Don't clamp anything let 0 .. 255 through and signal the TV that it is full
B) Limited 16:235: Clamp (!) everything, by scaling it to 16:235 - cause it is assumed that input is Full Range. Signal the TV to be limited.
Obvious problems:
A)
1) the TV gets signalled FULL with the info frames and might switch to full (!) - if this is the case the only thing from kodi that helps is: Use Limited Range: off Dithering: 8 bit
2) The TV ignores the infoframe and stays "Limited" itself. Then you can tell kodi: "Use Limited Range", cause the TV will blindly ignore 236 to 255 and 0 to 15 and kodi only outputs 16:235 - which means: original video content without touching colors. Pictures which are full range on the other side, are downscaled by kodi
B)
1) If you tick Use Limited in Kodi, kodi will output 16:235 only, but NOW the driver downscales again and you end up with no blacks and no whites at all. <- You now get _why_ the setting "works" as it works?
2) In that mode (which btw. is _the_ _default_ driver mode) the only thing that helps in kodi is "unticking" Use Limited Range, and also enabling Dithering 8 bit - every content (video) is now upscaled to full range _and_ afterwards downscaled by the GPU itself again.
Now - the sane reader has the questions:
Why isn't there a "Just output what i put in without messing and honoring the Limited Range that _most_ TVs are anyways"?
Answer: There is. I implemented a kernel patch that use the famous: "Video Range 16:235" without touching anything. How does it do this?
- Signal Limited in the info frames (which most TVs are and all video content also is)
- Don't touch the colors that are input
This patch _is_ in OpenELEC since several months. And until the patch, which btw. only enabled this on Intel hardware, was dropped - the kernel automatically was in the correct mode. The only thing the user had to do was:
Tick "Use Limited Range" to on, if the TV is in Limited Range. Or tick it "Off" - if not.
As most TVs are in limited Range by default - I ticked that setting "default" to on. In that combination most intel users had a perfect setup out of the box.
Issues with that approach:
- Nvidia users would have had "Use Limited Range" by default, too .... which is not what they wanted
So, what is missing:
- A simple LibreElec / OpenELEC integration patch that toggles the "Use Limited Setting" dependend on:
a) Is the Video Range 16:235 mode used?
b) Did the user disable it by self and we should not automatically set it.