mpv
mpv copied to clipboard
Non-HDR Vulkan configuration selected when playing HDR
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
- mpv version: v0.37.0
- Platform and Version: tvOS
- Source of the mpv binary: self-built
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
(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
Most mobile devices only support 8bit HDR, not 10bit.
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?
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.
Is there a reason it can't use the float version VK_FORMAT_R16G16B16A16_SFLOAT
?