gstreamer/subprojects/gst-plugins-bad/gst-libs/gst/wayland/meson.build
Daniel Stone 3a37778f69 gstwayland: Support wp_single_pixel_buffer_v1
This protocol does what it says on the box, avoiding the need for a 1x1
wl_shm buffer.

A wayland-projects wrap has been added for users who do not have v1.26
available.

This commit was partly authored by Robert Mader.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2662>
2024-01-22 16:51:36 -05:00

119 lines
3.5 KiB
Meson

wl_req = '>= 1.15'
wl_client_dep = dependency('wayland-client', version: wl_req, required: get_option('wayland'))
libdrm_dep = dependency('libdrm', version: '>= 2.4.98', required: get_option('wayland'))
wl_proto_req = '>= 1.26'
wl_protocol_dep = dependency('wayland-protocols', version: wl_req, required: get_option('wayland'))
wl_scanner = find_program('wayland-scanner', required: get_option('wayland'))
# Also used in ext/wayland
use_wayland = wl_protocol_dep.found() and wl_client_dep.found() and wl_scanner.found() and libdrm_dep.found()
if use_wayland
wl_sources = files([
'gstwlbuffer.c',
'gstwlcontext.c',
'gstwldisplay.c',
'gstwllinuxdmabuf.c',
'gstwlshmallocator.c',
'gstwlvideobufferpool.c',
'gstwlvideoformat.c',
'gstwlwindow.c',
])
wl_headers = files([
'gstwl_fwd.h',
'gstwlbuffer.h',
'gstwlcontext.h',
'gstwldisplay.h',
'gstwllinuxdmabuf.h',
'gstwlshmallocator.h',
'gstwlvideobufferpool.h',
'gstwlvideoformat.h',
'gstwlwindow.h',
'wayland.h',
'wayland-prelude.h',
])
protocols_datadir = wl_protocol_dep.get_variable('pkgdatadir')
protocol_defs = [
['viewporter', 'stable', ],
['linux-dmabuf', 'unstable', 'v1', ],
['fullscreen-shell', 'unstable', 'v1', ],
['xdg-shell', 'stable', ],
['single-pixel-buffer', 'staging', 'v1' ],
]
protocols_files = []
foreach protodef: protocol_defs
proto_name = protodef.get(0)
proto_stability = protodef.get(1)
if proto_stability == 'stable'
output_base = proto_name
elif proto_stability == 'staging'
proto_version = protodef.get(2)
output_base = f'@proto_name@-@proto_version@'
else
proto_version = protodef.get(2)
output_base = f'@proto_name@-@proto_stability@-@proto_version@'
endif
input = protocols_datadir / proto_stability / proto_name / f'@output_base@.xml'
protocols_files += [custom_target(f'@output_base@ client header',
input: input,
output: f'@output_base@-client-protocol.h',
command: [
wl_scanner,
'client-header',
'@INPUT@', '@OUTPUT@',
],
)]
protocols_files += [custom_target(f'@output_base@ source',
input: input,
output: f'@output_base@-protocol.c',
command: [
wl_scanner,
'private-code',
'@INPUT@', '@OUTPUT@',
],
)]
endforeach
extra_c_args = [
'-DGST_USE_UNSTABLE_API',
'-DBUILDING_GST_WL',
'-DG_LOG_DOMAIN="GStreamer-Wayland"',
'-D_GNU_SOURCE'
]
gstwayland = library('gstwayland-' + api_version,
wl_sources + protocols_files,
c_args : gst_plugins_bad_args + extra_c_args,
include_directories : [configinc, libsinc],
version : libversion,
soversion : soversion,
darwin_versions : osxversion,
install : true,
dependencies : [gst_dep, gstallocators_dep, gstvideo_dep, libdrm_dep,
wl_client_dep]
)
pkg_name = 'gstreamer-wayland-1.0'
gst_libraries += [[pkg_name, {'lib': gstwayland}]]
pkgconfig.generate(gstwayland,
libraries : [gst_dep, gstvideo_dep],
variables : pkgconfig_variables,
subdirs : pkgconfig_subdirs,
name : pkg_name,
description : 'GStreamer Wayland support',
)
gstwayland_dep = declare_dependency(link_with : gstwayland,
include_directories : [libsinc],
dependencies : [gst_dep, gstallocators_dep, gstvideo_dep, libdrm_dep,
wl_client_dep])
install_headers(wl_headers, subdir: 'gstreamer-1.0/gst/wayland')
meson.override_dependency(pkg_name, gstwayland_dep)
endif