mpv-player / mpv

🎥 Command line video player
https://mpv.io
Other
26.69k stars 2.83k forks source link

Non-HDR Vulkan configuration selected when playing HDR #13889

Open sixones opened 2 months ago

sixones commented 2 months ago

As the title says a non-HDR Vulkan configuration is selected when playing HDR videos, we are not 100% sure if this configuration is still valid, but we are expecting the HDR10 colorspace extension to of been used rather than the pass-through colorspace extension.

Important Information

Reproduction steps

Playing a video with HDR using GPU-Next via Vulkan context on tvOS or iOS.

Expected behavior

Libplacebo / MPV select's a Vulkan configuration that supports HDR (expecting 33: VK_FORMAT_B8G8R8A8_UNORM VK_COLOR_SPACE_HDR10_ST2084_EXT) and playback of HDR colours are correct.

Actual behavior

Non HDR configuration is selected, which leads to incorrect HDR colours.

Picked surface configuration 15: VK_FORMAT_B8G8R8A8_UNORM + VK_COLOR_SPACE_PASS_THROUGH_EXT

Log file

Vulkan configurations that are detected as available from the logs below;

Available surface configurations:
0: VK_FORMAT_B8G8R8A8_UNORM                 VK_COLOR_SPACE_SRGB_NONLINEAR_KHR
1: VK_FORMAT_B8G8R8A8_SRGB                  VK_COLOR_SPACE_SRGB_NONLINEAR_KHR
2: VK_FORMAT_R16G16B16A16_SFLOAT            VK_COLOR_SPACE_SRGB_NONLINEAR_KHR
3: VK_FORMAT_B8G8R8A8_UNORM                 VK_COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT
4: VK_FORMAT_B8G8R8A8_SRGB                  VK_COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT
5: VK_FORMAT_R16G16B16A16_SFLOAT            VK_COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT
6: VK_FORMAT_B8G8R8A8_UNORM                 VK_COLOR_SPACE_DCI_P3_NONLINEAR_EXT
7: VK_FORMAT_B8G8R8A8_SRGB                  VK_COLOR_SPACE_DCI_P3_NONLINEAR_EXT
8: VK_FORMAT_R16G16B16A16_SFLOAT            VK_COLOR_SPACE_DCI_P3_NONLINEAR_EXT
9: VK_FORMAT_B8G8R8A8_UNORM                 VK_COLOR_SPACE_BT709_NONLINEAR_EXT
10: VK_FORMAT_B8G8R8A8_SRGB                  VK_COLOR_SPACE_BT709_NONLINEAR_EXT
11: VK_FORMAT_R16G16B16A16_SFLOAT            VK_COLOR_SPACE_BT709_NONLINEAR_EXT
12: VK_FORMAT_B8G8R8A8_UNORM                 VK_COLOR_SPACE_ADOBERGB_NONLINEAR_EXT
13: VK_FORMAT_B8G8R8A8_SRGB                  VK_COLOR_SPACE_ADOBERGB_NONLINEAR_EXT
14: VK_FORMAT_R16G16B16A16_SFLOAT            VK_COLOR_SPACE_ADOBERGB_NONLINEAR_EXT
15: VK_FORMAT_B8G8R8A8_UNORM                 VK_COLOR_SPACE_PASS_THROUGH_EXT
16: VK_FORMAT_B8G8R8A8_SRGB                  VK_COLOR_SPACE_PASS_THROUGH_EXT
17: VK_FORMAT_R16G16B16A16_SFLOAT            VK_COLOR_SPACE_PASS_THROUGH_EXT
18: VK_FORMAT_B8G8R8A8_UNORM                 VK_COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT
19: VK_FORMAT_B8G8R8A8_SRGB                  VK_COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT
20: VK_FORMAT_R16G16B16A16_SFLOAT            VK_COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT
21: VK_FORMAT_B8G8R8A8_UNORM                 VK_COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT
22: VK_FORMAT_B8G8R8A8_SRGB                  VK_COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT
23: VK_FORMAT_R16G16B16A16_SFLOAT            VK_COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT
24: VK_FORMAT_B8G8R8A8_UNORM                 VK_COLOR_SPACE_DISPLAY_P3_LINEAR_EXT
25: VK_FORMAT_B8G8R8A8_SRGB                  VK_COLOR_SPACE_DISPLAY_P3_LINEAR_EXT
26: VK_FORMAT_R16G16B16A16_SFLOAT            VK_COLOR_SPACE_DISPLAY_P3_LINEAR_EXT
27: VK_FORMAT_B8G8R8A8_UNORM                 VK_COLOR_SPACE_BT2020_LINEAR_EXT
28: VK_FORMAT_B8G8R8A8_SRGB                  VK_COLOR_SPACE_BT2020_LINEAR_EXT
29: VK_FORMAT_R16G16B16A16_SFLOAT            VK_COLOR_SPACE_BT2020_LINEAR_EXT
30: VK_FORMAT_B8G8R8A8_UNORM                 VK_COLOR_SPACE_HDR10_HLG_EXT
31: VK_FORMAT_B8G8R8A8_SRGB                  VK_COLOR_SPACE_HDR10_HLG_EXT
32: VK_FORMAT_R16G16B16A16_SFLOAT            VK_COLOR_SPACE_HDR10_HLG_EXT
33: VK_FORMAT_B8G8R8A8_UNORM                 VK_COLOR_SPACE_HDR10_ST2084_EXT
34: VK_FORMAT_B8G8R8A8_SRGB                  VK_COLOR_SPACE_HDR10_ST2084_EXT
35: VK_FORMAT_R16G16B16A16_SFLOAT            VK_COLOR_SPACE_HDR10_ST2084_EXT
kasper93 commented 2 months ago

(expecting 33: VK_FORMAT_B8G8R8A8_UNORM VK_COLOR_SPACE_HDR10_ST2084_EXT)

@haasn: Are you willing to support 8-bit HDR output? Currently such configuration is not supported https://code.videolan.org/videolan/libplacebo/-/blob/e4e096be9512103381dd9c15f8c9a2669edf22c8/src/vulkan/swapchain.c#L181-189

Andarwinux commented 2 months ago

Most mobile devices only support 8bit HDR, not 10bit.

sixones commented 2 months ago

Since a 10bit configuration isn't available, could the 16bit configuration be picked instead for HDR? Unsure if it's possible for us to influence the configuration that is picked from a code change or via an external option?

kasper93 commented 2 months ago

Since a 10bit configuration isn't available, could the 16bit configuration

16-bit is picked by default for HDR. Neither VK_FORMAT_R16G16B16_UNORM nor VK_FORMAT_R16G16B16A16_UNORM is available on your platform.

sixones commented 2 months ago

Is there a reason it can't use the float version VK_FORMAT_R16G16B16A16_SFLOAT?