2014-07-09, 01:06
There's a lot of confusion here about "Limited" and "Full" ranges isn't there?
All broadcast TV and mainstream pre-recorded content released on DVD and Blu-ray uses 16-235 (or 10 bit equivalent) level space (as stipulated in the ITU/CCIR 601 and 709 specs).
The <16 and >235 levels are really there as a legacy provision now (the spec was created in the early 80s when things were very different) to allow for and preserve overshoot and undershoot in analogue sources that were being digitised - and which if clipped would cause nasty ringing. Preserving <16 and >235 levels was important in the early days of digital video, where you converted to and from analogue formats at multiple points in the chain. There should be no real picture content in properly mastered video <16 (and arguably >235 - though that's a slightly more complex issue) When you align a TV, or a broadcast monitor, you specifically adjust it so that 16 is at black (and use PLUGE so that you just can't see the difference between 16 and the PLUGE <16 levels)
However, PCs often use 0-255 level space internally, and also DVI can use it externally. As HDMI is compatible with DVI, HDMI also supports 0-255 level space. When you playback standard video (which is in 16-235 level space) on a 0-255 display (or within a system that uses 0-255 internally) you need to expand the range - so that black moves from 16 to 0 and white from 235 to 255. This can introduce banding (though dithering can help) though - so isn't ideal.
Additionally - and in some cases confusingly - some TVs let you manually switch between 0-255 (aka Full) and 16-235 (aka Limited) level space. If you use an AVR to switch to a single input you need all of your sources to be in the same level space.
Most DVD players, Blu-ray players, Satellite and Cable boxes will default to 16-235 level space (aka Limited) - and in many cases it won't be possible to get them to output 0-255 (aka Full)
If you feed a 16-235 standard video signal into a display expecting 0-255 level space you will get grey blacks, dull whites and washed out colour.
If you feed a 0-255 remapped video signal into a display expecting 16-235 level space you will get crushed blacks (lacking picture detail), blown out whites (losing highlights) and over saturated colours.
It can get worse than this. You can get both video drivers AND applications trying to solve the problem - so end up with doubly wrong pictures in either direction.
In the case of XBMC under Linux you can have TWO options to get Limited output from XBMC.
1. Let XBMC run 0-255 internally. It will remap 16-235 content to 0-255. Then the video drivers will decide whether to output 0-255 (if connected to a DVI or VGA monitor, or an HDMI display in "Full" range) or remap to 16-235 (for a "Limited range" HDMI connection) This will irrevocably lose <16 and >235 content as they are clipped <0 and >255. There shouldn't be content there - and if you can see <16 blacks normally then your display isn't correctly calibrated... This is the default setting. However it relies on the video drivers also working correctly and realising they are feeding a 16-235 display. (Sometimes you can force drivers using xrandr - and in some cases drivers will switch between ranges based on the resolution - using 0-255 for "PC" resolutions like 1024x768, 1440x900, 1680x1050 etc. but using 16-235 for "TV" resolutions like 1280x720, 1920x1080 etc.)
2. Let XBMC keep 16-235 content as 16-235 (which is I believe what the 16-235 checkbox is for?) and make sure that your video drivers THINK they should be outputting 0-255 (and not remapping to 16-235). Effectively you let XBMC handle the "16-235"ness of the content. This means you get 16-235 Limited output BUT the <16 and >235 levels have been preserved. It can also be a solution IF your video drivers incorrectly think they are feeding a 0-255 display rather than a 16-235 one.
This is NOT straightforward. It is also not helped by the additional complication of HDMI having three different pixel formats : YCrCb 4:2:2, YCrCb 4:4:4 and RGB 4:4:4. I think that the YCrCb stuff is only ever 16-235, but the RGB can be either 16-235 or 0-255 (I may be wrong on this). So HDMI can be carrying either Red, Green and Blue signals OR Luminance and two Colour Difference signals - and the latter can have half-resolution colour difference signals.
All mainstream source material is 16-235 4:2:0 (though I've got quite a bit of 4:2:2 stuff from broadcast recordings)
Most consumer gear (satellite and cable boxes, DVD players, Blu-ray players etc.) will output YCrCb 4:2:2 normally.
All broadcast TV and mainstream pre-recorded content released on DVD and Blu-ray uses 16-235 (or 10 bit equivalent) level space (as stipulated in the ITU/CCIR 601 and 709 specs).
The <16 and >235 levels are really there as a legacy provision now (the spec was created in the early 80s when things were very different) to allow for and preserve overshoot and undershoot in analogue sources that were being digitised - and which if clipped would cause nasty ringing. Preserving <16 and >235 levels was important in the early days of digital video, where you converted to and from analogue formats at multiple points in the chain. There should be no real picture content in properly mastered video <16 (and arguably >235 - though that's a slightly more complex issue) When you align a TV, or a broadcast monitor, you specifically adjust it so that 16 is at black (and use PLUGE so that you just can't see the difference between 16 and the PLUGE <16 levels)
However, PCs often use 0-255 level space internally, and also DVI can use it externally. As HDMI is compatible with DVI, HDMI also supports 0-255 level space. When you playback standard video (which is in 16-235 level space) on a 0-255 display (or within a system that uses 0-255 internally) you need to expand the range - so that black moves from 16 to 0 and white from 235 to 255. This can introduce banding (though dithering can help) though - so isn't ideal.
Additionally - and in some cases confusingly - some TVs let you manually switch between 0-255 (aka Full) and 16-235 (aka Limited) level space. If you use an AVR to switch to a single input you need all of your sources to be in the same level space.
Most DVD players, Blu-ray players, Satellite and Cable boxes will default to 16-235 level space (aka Limited) - and in many cases it won't be possible to get them to output 0-255 (aka Full)
If you feed a 16-235 standard video signal into a display expecting 0-255 level space you will get grey blacks, dull whites and washed out colour.
If you feed a 0-255 remapped video signal into a display expecting 16-235 level space you will get crushed blacks (lacking picture detail), blown out whites (losing highlights) and over saturated colours.
It can get worse than this. You can get both video drivers AND applications trying to solve the problem - so end up with doubly wrong pictures in either direction.
In the case of XBMC under Linux you can have TWO options to get Limited output from XBMC.
1. Let XBMC run 0-255 internally. It will remap 16-235 content to 0-255. Then the video drivers will decide whether to output 0-255 (if connected to a DVI or VGA monitor, or an HDMI display in "Full" range) or remap to 16-235 (for a "Limited range" HDMI connection) This will irrevocably lose <16 and >235 content as they are clipped <0 and >255. There shouldn't be content there - and if you can see <16 blacks normally then your display isn't correctly calibrated... This is the default setting. However it relies on the video drivers also working correctly and realising they are feeding a 16-235 display. (Sometimes you can force drivers using xrandr - and in some cases drivers will switch between ranges based on the resolution - using 0-255 for "PC" resolutions like 1024x768, 1440x900, 1680x1050 etc. but using 16-235 for "TV" resolutions like 1280x720, 1920x1080 etc.)
2. Let XBMC keep 16-235 content as 16-235 (which is I believe what the 16-235 checkbox is for?) and make sure that your video drivers THINK they should be outputting 0-255 (and not remapping to 16-235). Effectively you let XBMC handle the "16-235"ness of the content. This means you get 16-235 Limited output BUT the <16 and >235 levels have been preserved. It can also be a solution IF your video drivers incorrectly think they are feeding a 0-255 display rather than a 16-235 one.
This is NOT straightforward. It is also not helped by the additional complication of HDMI having three different pixel formats : YCrCb 4:2:2, YCrCb 4:4:4 and RGB 4:4:4. I think that the YCrCb stuff is only ever 16-235, but the RGB can be either 16-235 or 0-255 (I may be wrong on this). So HDMI can be carrying either Red, Green and Blue signals OR Luminance and two Colour Difference signals - and the latter can have half-resolution colour difference signals.
All mainstream source material is 16-235 4:2:0 (though I've got quite a bit of 4:2:2 stuff from broadcast recordings)
Most consumer gear (satellite and cable boxes, DVD players, Blu-ray players etc.) will output YCrCb 4:2:2 normally.