mirror of
https://github.com/mpv-player/mpv
synced 2024-12-28 01:52:19 +00:00
187fffd0f5
Although this protocol isn't official yet, several compositors are known to support it to some extent and this lets users actually view HDR with less hacks/workarounds. The actual protocol here is simply copy and pasted from the upstream fork* where these are developed. There is also icc profile support in the protocol, but this is omitted for now in favor of setting colorspaces and signalling hdr metadata. However for mpv, this only actually has any practical use with vo_dmabuf_wayland so this is the only VO that will make use of the protocol. When using vulkan, this is already handled via vulkan extensions by compositors and vo_gpu_next. So actually we don't want to use the wayland protocol in that case since it will just get in the way. The only known limitation on that front is driver support for hdr vulkan surfaces but as soon as that is available it should just work with no code changes. For opengl, hdr support there is a whole other mess with a lot of unknowns but simply using this protocol isn't good enough and would require changes elsewhere. vo_wlshm is currently too stupid to pick any format besides bgr0 or 0rgb, so any color management there is meaningless at this stage. So this means that only vo_dmabuf_wayland can actually use this protocol. But that's perfectly fine. Without this, vo_dmabuf_wayland has a very bad limitation in that it cannot communicate colorspaces at all and compositors have to guess. Using xx-color-management-v4 fixes this. For the other VOs, merely having the common protocol setup stuff in the common code does no harm and later if they get smarter, it's easy for them to use the stuff since it is written generically anyway. *: https://gitlab.freedesktop.org/swick/wayland-protocols/-/tree/color-xx/staging/color-management
49 lines
2.2 KiB
Meson
49 lines
2.2 KiB
Meson
wl_protocol_dir = wayland['deps'][2].get_variable(pkgconfig: 'pkgdatadir', internal: 'pkgdatadir')
|
|
protocols = [[wl_protocol_dir, 'stable/presentation-time/presentation-time.xml'],
|
|
[wl_protocol_dir, 'stable/viewporter/viewporter.xml'],
|
|
[wl_protocol_dir, 'stable/xdg-shell/xdg-shell.xml'],
|
|
[wl_protocol_dir, 'unstable/idle-inhibit/idle-inhibit-unstable-v1.xml'],
|
|
[wl_protocol_dir, 'unstable/linux-dmabuf/linux-dmabuf-unstable-v1.xml'],
|
|
[wl_protocol_dir, 'unstable/xdg-decoration/xdg-decoration-unstable-v1.xml'],
|
|
[wl_protocol_dir, 'staging/content-type/content-type-v1.xml'],
|
|
[wl_protocol_dir, 'staging/fractional-scale/fractional-scale-v1.xml'],
|
|
[wl_protocol_dir, 'staging/single-pixel-buffer/single-pixel-buffer-v1.xml'],
|
|
['protocols', 'xx-color-management-v4.xml']]
|
|
wl_protocols_source = []
|
|
wl_protocols_headers = []
|
|
|
|
foreach v: ['1.32']
|
|
features += {'wayland-protocols-' + v.replace('.', '-'):
|
|
wayland['deps'][2].version().version_compare('>=' + v)}
|
|
endforeach
|
|
|
|
if features['wayland-protocols-1-32']
|
|
protocols += [[wl_protocol_dir, 'staging/cursor-shape/cursor-shape-v1.xml'],
|
|
[wl_protocol_dir, 'unstable/tablet/tablet-unstable-v2.xml']] # required by cursor-shape
|
|
endif
|
|
|
|
foreach p: protocols
|
|
xml = join_paths(p)
|
|
wl_protocols_source += custom_target(xml.underscorify() + '_c',
|
|
input: xml,
|
|
output: '@BASENAME@.c',
|
|
command: [wayland['scanner'], 'private-code', '@INPUT@', '@OUTPUT@'],
|
|
)
|
|
wl_protocols_headers += custom_target(xml.underscorify() + '_h',
|
|
input: xml,
|
|
output: '@BASENAME@.h',
|
|
command: [wayland['scanner'], 'client-header', '@INPUT@', '@OUTPUT@'],
|
|
)
|
|
endforeach
|
|
|
|
lib_client_protocols = static_library('protocols',
|
|
wl_protocols_source + wl_protocols_headers,
|
|
dependencies: wayland['deps'][0])
|
|
|
|
client_protocols = declare_dependency(link_with: lib_client_protocols,
|
|
sources: wl_protocols_headers)
|
|
|
|
dependencies += [client_protocols, wayland['deps']]
|
|
|
|
sources += files('wayland_common.c')
|