The cause of this problem lies with problematic display drivers not being able to convert the color range used in compressed formats (YUV) into the color range used by PC monitors/LCD/Plasma TVs (RGB).
There are several workarounds. Here is what NVIDIA had to say:
From NVIDIA Driver v93.71 release notes
Video color-space range for DVI-only* outputs is erroneously set to
standard mode (16-235) instead of extended mode (0-255).
A new detection feature to apply Standard CSC mode to TV outputs
(including NTSC, PAL, 480i, and 576i), included DVI-only outputs by
mistake.
Note:
The driver correctly applies extended mode to analog outputs, and
standard mode to TV outputs (including NTSC, PAL, 480i, and 576i).
A future driver release will correct this and apply the extended-mode color
space to DVI-only outputs.
You can work around this issue by forcing either standard or extended mode
as follows:
* "DVI-only" means only one display is connected, and it is to the DVI output.
1. Launch regedit and determine the current primary display card by looking in
"HKey_Local_Machine\Hardware\DeviceMap\Video"
and note the GUID (global unique identifier assigned by Windows),
which is the long string in brackets { } at the end of the entry
"\device\video0".
2. Look in
"HKey_Local_Machine\SYSTEM\CurrentControlSet\Control\Video\{GUID}000"
where {GUID} is the number derived from the previous step.
3. Open the "0000" directory and create a new DWORD called
"VMRCCCSStatus" and give it a value of
0x3 - to force use of the standard YUV range of 16-235
0x1 - to force use of the extended YUV range of 0-255
Supposedly, ATI fixed this problem with their drivers in Catalyst v7.1
However, as you may know, the NVIDIA 9x.xx series of drivers have quite a few outstanding bugs, so another alternative is to use a video decoder based workaround.
For example, if you're using FFDShow to decode your content, in the FFDShow configuration dialog (under Output), you can specify the output formats. By limiting the output format to RGB32 (and unchecking everything else) the problem is fixed. The downside is additional CPU usage (about 2-10% on modern CPUs) and the loss of hardware color calibration.
For DVD, DScaler can also output to RGB32.