Aleksoid1978 / MPC-BE

MPC-BE – универсальный проигрыватель аудио и видеофайлов для операционной системы Windows.
GNU General Public License v3.0
2.37k stars 93 forks source link

Washed out colors in SDR, nvidia RTX Video Super Resolution, mpc video renderer, Win 11 Auto color management #597

Closed 1kartafal4 closed 1 month ago

1kartafal4 commented 1 month ago

Good day to the developers,

first, thanks to everybody who contributed for the program mpc-be, mpc-hc, mpc video renderer etc. It's awesome, will donate few bucks for good work ;)

Second, I noticed washed out colors, with following configuration:

correct colors washed out

So as can be seen from the screenshot, the first one has correct colors, because Nvidia's RTX Video Super Resolution is turned off (it's set for <720p only, but the video is 1080p). In the second one RTX Video Super Resolution is active, everything is washed out. This occurs with every video file or type.

If I turn Win 11 Auto color management OFF, than the issue is gone. However, that's not a good solution, because everything that is mapped in SDR as the Windows OS itself, programs, browser, videos etc. will have oversaturated & wrong colors (it's the typical Windows OS program with wrong sRGB or 2.2 gamut).

Thanks in advance.

clsid2 commented 1 month ago

It is likely a bug in NVIDIA VSR.

You can use Windows HDR calibration tool to improve colors of SDR apps.

Aleksoid1978 commented 1 month ago

Enable Statistics and take screenshots again. Also write - is HDR mode enabled in the system. Otherwise it's not very clear.

1kartafal4 commented 1 month ago

@clsid2 A nvidia vsr bug? I remember I used it 3 - 4 weeks before and it worked. During that time

1kartafal4 commented 1 month ago

@Aleksoid1978 OS- and TV-HDR mode is deactivated during SDR-playback with nvidia VSR turned on.

To narrow down what's causing it, I downloaded the portable packages (always use(d) portable) of both mpc-be 1.7.3, 1.7.2 and 1.7.1. https://sourceforge.net/projects/mpcbe/files/MPC-BE/Release%20builds/ and mpc video renderer 0.8.5, 0.8.3 and 0.8.1, and installed them accordingly for each version of mpc-be (deinstalled other version of mpc video renderer properly before doing so ("Uninstall_MPCVR_64.cmd"). https://github.com/clsid2/MPCVideoRenderer/releases

First I tried mpc-be 1.8.0 paired with mpc video renderer with all three versions (0.8.5, 0.8.3 and 0.8.1). Result was the same. Then I tried each mpc-be version with the mpcVR version it was delivered with at that time. All results were the same. Here is an example of 1.7.1 with 0.8.2.2233 washed out colors2 Edit: HDR is shown on in the mpcVR information, but I guess that's an error with this older version. My TV's HDR-mode is OFF and both Win 11 OS and nvidia control panel show HDR OFF (RTX HDR).

So, will anyone who is also reading this, and one/both of you, re-check? Can it be confirmed that both mpc-be and mpcVR are not causing it, even with older versions from May 15 2024? Or were even older versions working properly?

If it is confirmed, as asked above, is it possible to know if it's Nvidia's VSR (newer driver?) or Win 11 Auto color management causing it? Or both?

Thanks!

clsid2 commented 1 month ago

VSR is not compatible with ACM. Microsoft designed ACM in a bad way causing older apps to think HDR is enabled.

You need to report to NVIDIA, not here.

clsid2 commented 1 month ago

And if next NVIDIA driver update does not fix it, then renderer should be modified to just skip VSR when ACM is detected as enabled.

1kartafal4 commented 1 month ago

@clsid2 Have you rechecked the problem yourself? Can you confirm the same is happening with your machine?

I already commeted on top, the newer version shows HDR correctly OFF. washed out 3

Do you mean that MS's Auto Color Management, only a bug when it comes to "Microsoft designed ACM in a bad way causing older apps to think HDR is enabled.", but it's not causing the problem itself?

And if next NVIDIA driver update does not fix it ...

So, again: MS's ACM implementation is the sole reason causing that bug, or Nvidia's VSR? Or now both? But I understand from your comment that nvidia's employee can fix it alltogether? ;) Thanks

v0lt commented 1 month ago

The "bug" described here is not a bug of the MPC-BE player. The player does not know anything about "Auto color management". It may be related to the MPC Video Renderer.

The best solution would be to disable the problematic "Auto color management".

Aleksoid1978 commented 1 month ago

I don't confirm, for me all is good (HDR on, ACM on in system, VSR and RTX HDR on in Nvidia & MPC-VR): изображение

clsid2 commented 1 month ago

And with system HDR off and RTX HDR off? So only VSR and ACM enabled?

Aleksoid1978 commented 1 month ago

Yes: изображение

clsid2 commented 1 month ago

Good.

And with 10-bit texture? Screenshot of 1kartafal4 shows 10-bit processing/presentation. So maybe he changed texture setting?

Aleksoid1978 commented 1 month ago

10-bit confirm, 100% bug in Nvidia VSR.

clsid2 commented 1 month ago

I remember issues with VSR and 10-bit in the past as well long before ACM existed. NVIDIA added HDR support for VSR in later drivers. But based on the overblown colors it seems the driver assumes that 10-bit texture means HDR content.

Perhaps don't request VSR in the renderer when using 10-bit texture and video is not HDR?

1kartafal4 commented 1 month ago

@clsid2 @Aleksoid1978 So this "texture format" (found in the mpcvr settings), is the gpu texture, the format of the content (SDR, HDR), and not the "output color depth" aka "display bit depth" (8-bit, 10-bit, 12-bit), correct?

But based on the overblown colors it seems the driver assumes that 10-bit texture means HDR content.

You refer to Aleksoid's or my screenshots? The overblown colors you see in Aleksoids's HDR-screenshot, are because he made a HDR-screenshot (HDR-mode and output) and saved it in a non-HDR format/container (jpeg). So yes it looks overblown when watched in SDR, even in HDR. Correctly it should be saved in jpeg-XR, HEIC or AV1 format (HDR-metadata) and then viewed on a program (for example) "HDR + WCG Image Viewer". Paint.net, ImageGlass 9.x, Windows photo viewer etc. all can't properly display a HDR file.

My SDR-screenshots may look overblown on someone elses device/display, because I screenshoted on a TV with QD-Oled display, with color space set to REC 2020 (color gamut 85 % coverage ITP, 4000 cd/m²) which is above DCI-P3; it's > 150 % sRGB or so. Does not look overblown on my device, as it's tonemapped correctly.

1kartafal4 commented 1 month ago

@clsid2

Screenshot of 1kartafal4 shows 10-bit processing/presentation. So maybe he changed texture setting?

Didn't change; you see it in my screenshots, it is automatically set to "Auto 8/10-bit Integer", which I understand is the correct setting, because it automatically changes depending on the texture format of the video.

I tested it and can recreate the same result as Aleksoid1978, but you both sure it's a bug in nvidia's VSR and not mpcvr?

With the dragon ball episode (washed out colors first screenshots), the native texture format (seen in mpcvr information) is "R10G10B10A2_UNORM" (Presentation). Since mpcvr texture format is set to "Auto 8/10-bit Integer", it correctly processes/outputs in 10-bit, and thus the washed out colors occur (VSR + ACM). I can manually override in mpcvr to "8-bit Integer", than it outputs in "B8G8R8A8_UNORM" texture format and the washed out colors do not occur.

It also happens the other way around. A video file with native texture format "B8G8R8A8_UNORM". Set to "Auto 8/10-bit Integer" in mpcvr settings, the washed out colors do not occur (VSR+ACM). I can manually override to "10-bit Integer" in mpcvr settings and then the Presentation shows "R10G10B10A2_UNORM", and then yes, the washed out colors occur (VSR+ACM).

The "Internal Format" (mpcvr information) also changes when the texture format changes.

1kartafal4 commented 1 month ago

So yes, nvidia's VSR + Windows 11 Auto Color Mode is possible in SDR-mode, without washed out colors, but only when the texture format/video format of the video is 8-bit Integer or it is manually overrided in the mpcvr settings to "8-bit Integer".

I opened a bug ticket to the nvidia employee, have to wait till they respond.