AVS Forum banner
1 - 1 of 1 Posts

63 Posts
Discussion Starter · #1 ·
Hardware/Software configuration
  • Geforce 9400 IGP on motherboard Gigabyte GA-E7AUM-DS2H, latest nVidia drivers (260.99)
  • Sony HDTV (KDL-46W4000) connected using HDMI
  • Windows 7 32-bit
  • Media Player Classic Homecinema 1.4.2499

The Goal
  • Get correct black and white levels for video content. Bonus points if BTB/WTW (Blacker Than Black, Whiter Than White) information is preserved.
  • Get correct black and white levels for non-video content (i.e., all other Windows applications).

The issue

Now here's where it gets complicated. Experience shows that the nVidia driver/card is behaving very strangely regarding output levels.

First of all, I would like to mention that English is not my native language, and all of this is quite complicated to explain, so you'll have to bear with me for a moment.

When testing, I found a reasonably reliable way to determine what input levels the HDTV receives: I'm taking advantage of the "superblank" feature of Sony HDTVs, which allows for WTW content to be displayed. If I understand this feature correctly, it means that 235-blank will be displayed normally with good color balance (as it should be); 255-blank will also be displayed and distinguishable (brighter) from 235 but with a bad (bluish) color balance. This feature, combined with some level testing videos, allows me to see if the TV is receiving 235 (good blank) or 255 (brighter, bad blank). The results I'm getting from the TV seems to corroborate this explanation.

Now, here's what I found. First of all, the NVidia control panel contains a "resolution" section where I can switch between "audio disabled" and "audio enabled" for the HDTV. At first glance one might think that it's just controlling HDMI Audio, but it does other things, too: if I switch back and forth between "audio disabled" and "audio enabled", the color levels change significantly. Judging from the results, I came to the following conclusions:
  • With "audio disabled", the HDTV is considered a computer monitor. The Windows desktop levels are not compressed, which means the desktop colors are wrong (bluish blanks, since it is received as 255 by the TV).
  • With "audio enabled", the HDTV is considered a consumer video device. The Windows desktop levels are compressed from 0-255 to 16-235 levels, which is correct.

So at first glance, "audio enabled" seems like the right choice. But I didn't get into the strange part yet: video levels. The following discussion is about pure EVR (I'm not using EVR-CP or EVR Sync in MPC-HC).
  • With "audio disabled", when playing video in windowed or full screen mode, 16-235 video levels are expanded to 0-255 then sent to the TV, which is obviously wrong.
  • With "audio enabled", when playing video in windowed mode, it seems that the levels are expanded to 0-255, than compressed back to 16-235 before output. I lost BTB/WTW in the process but at least the 16-235 range is correct.
  • Now here's where it gets funny: with "audio enabled", if I switch to fullscreen mode, then the levels change (not just the video area: I figured that the whole output from the card is switched to something else). At first I thought that it was some kind of "smart" driver behavior to optimize the video output. Problem is, it's completely wrong! Indeed, the levels are now expanded to 0-255 and sent as is to the HDTV so the levels in fullscreen mode are WORSE than in windowed mode! If your TV chose not to display BTB/WTW, you WILL end up with crushed blacks and burned blanks!

I managed to come up with some explanation for this aberrant behavior: I think that in "audio enabled" mode, the processing chain inside the driver/card compresses the whole Windows desktop levels to 16-235. To compensate for this compression when watching video in windowed mode, the video area is first expanded to 0-255, only to get compressed again further down the pipeline. I think that NVidia engineers wanted to have something cleaner when playing video in fullscreen mode and drop all processing altogether, thus sending untouched content to the TV and preserving BTB/WTW. This is a very good idea, but alas, it seems they got their changes wrong and forgot to disable the first step (expansion to 0-255), thus making fullscreen playback worse than before!

Experiencing with other video renderers

The behavior is almost the same with the EVR "variants" included with MPC-HC (i.e. EVR-CP and EVR Sync). "Almost" because, with these renderers, the video levels switch is not dependant on the windowed/fullscreen status like with EVR but rather on the video resolution. What I mean is:
  • playing SD video with EVR-CP/EVR-Sync (in windowed or fullscreen mode) is equivalent to playing video with EVR in windowed mode.
  • playing HD video with EVR-CP/EVR-Sync (in windowed or fullscreen mode) is equivalent to playing video with EVR in fullscreen mode.

My guess is the NVidia driver is unable to determine the fullscreen status with these custom renderers and thus falls back to video resolution to take its decision.

I also tried a non-EVR renderer: madVR. In this case, as one could expect, the driver doesn't seem to detect video playback and considers MPC-HC like any other Windows application.

If someone is still keeping track of my explanation, one could notice that there is a solution to the video levels problem: switch to "audio disabled" mode and use madVR without video levels expansion (that is, with the "16-235" levels option in madVR). Indeed, this solves the problem for video: everything stays untouched, and even BTB/WTW is preserved. Problem is, this makes other Windows activities (like photo viewing) much worse (see "audio enabled/disabled" discussion above).

If anyone has an idea on how to solve this complicated problem (registry hack? EDID hack?), I would be happy to hear it. Thanks.
1 - 1 of 1 Posts
This is an older thread, you may not receive a response, and could be reviving an old thread. Please consider creating a new thread.