moonlight-stream / moonlight-qt

GameStream client for PCs (Windows, Mac, Linux, and Steam Link)
GNU General Public License v3.0
10.85k stars 632 forks source link

Are there options to disable the default chroma subsampling and force full-resolution (4:4:4)? #1022

Closed Adnn closed 2 months ago

Adnn commented 1 year ago

Chromatic degradation in the default configuration are noticeable (washed out colors, notably visible in dark color theme with bureautic applications).

I suppose this might be due to a form of chroma subsampling in the video encoding (likely 4:2:0, or 4:2:2). Is there any way to enable full resolution for chroma information (4:4:4)? If not, any plan to allow that in the future?

I was not able to find any reference to this question in this issue tracker.

n00mkrad commented 12 months ago

Bump.

I don't see any reason why 4:4:4 shouldn't be supported.

In terms of encoders, NVENC supports it for H264, H265, and AV1. QSV and AMF might not, but a majority of users use NVENC I presume.

cgutman commented 12 months ago

The main issue is that 4:4:4 support is much less mature in drivers, software, and video APIs.

For example, there is no official D3D11VA profile that supports decoding HEVC 4:4:4. Intel has their own proprietary HEVC 4:4:4 D3D11VA profile while Nvidia requires the use of CUDA for that rather than standard D3D11VA. AMD AMF might support it similar to CUDA, but I have not checked.

There's also issues with AV1 4:4:4, namely that it is only supported in Profile 1 and 2. There are D3D11VA profiles defined for AV1 Profile 1 and 2, but I belive the current generations of hardware (Lovelace and RDNA3) only support hardware decoding of Profile 0 content, which can only be 4:2:0.

Vulkan might improve this, so it could be doable with the Vulkan renderer soon.

cgutman commented 2 months ago

This has been implemented.

Adnn commented 2 months ago

@cgutman That is excellent news, thank you! Is it already released? Do you have a link to a PR to track it and check how to enable it?

cgutman commented 2 months ago

The main work was done in #1282 with follow up work for a D3D11VA implementation completed after that. There's an option in the Moonlight settings page to enable YUV444. It requires both Moonlight and Sunshine nightly builds.