mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-27 12:11:13 +00:00
dc787434bc
Adds a new plugin for ASIO devices. Although there is a standard low-level audio API, WASAPI, on Windows, ASIO is still being broadly used for audio devices which are aiming to professional use case. In case of such devices, ASIO API might be able to show better quality and latency performance depending on manufacturer's driver implementation. In order to build this plugin, user should provide path to ASIO SDK as a build option, "asio-sdk-path". Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2309>
84 lines
No EOL
2.3 KiB
Meson
84 lines
No EOL
2.3 KiB
Meson
asio_sources = [
|
|
'gstasiodeviceprovider.cpp',
|
|
'gstasioobject.cpp',
|
|
'gstasioringbuffer.cpp',
|
|
'gstasiosink.cpp',
|
|
'gstasiosrc.cpp',
|
|
'gstasioutils.cpp',
|
|
'plugin.c',
|
|
]
|
|
|
|
asio_option = get_option('asio')
|
|
if asio_option.disabled() or host_system != 'windows'
|
|
subdir_done()
|
|
endif
|
|
|
|
# FIXME: non-msvc is not tested, and unlikely supported yet because of
|
|
# tool-chain issue
|
|
if cxx.get_id() != 'msvc'
|
|
if asio_option.enabled()
|
|
error('asio plugin can only be built with MSVC')
|
|
else
|
|
subdir_done ()
|
|
endif
|
|
endif
|
|
|
|
winapi_desktop = cxx.compiles('''#include <winapifamily.h>
|
|
#if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
|
|
#error "not win32"
|
|
#endif''',
|
|
name: 'building for Win32')
|
|
|
|
if not winapi_desktop
|
|
if asio_option.enabled()
|
|
error('asio plugin requires WINAPI_PARTITION_DESKTOP')
|
|
else
|
|
subdir_done ()
|
|
endif
|
|
endif
|
|
|
|
avrt_lib = cc.find_library('avrt', required: asio_option)
|
|
if not avrt_lib.found()
|
|
subdir_done ()
|
|
endif
|
|
|
|
winmm_lib = cc.find_library('winmm', required: asio_option)
|
|
if not winmm_lib.found()
|
|
subdir_done ()
|
|
endif
|
|
|
|
# Checking SDK headers. User should install ASIO sdk on system, and
|
|
# this plugin requires asio.h, asiosys.h and iasiodrv.h headers
|
|
asio_sdk_root = get_option ('asio-sdk-path')
|
|
if asio_sdk_root == ''
|
|
if asio_option.enabled()
|
|
error('asio sdk path is needed, pass with -Dasio-sdk-path=C:/path/to/sdk')
|
|
else
|
|
subdir_done ()
|
|
endif
|
|
endif
|
|
|
|
asio_inc_dir = include_directories(join_paths(asio_sdk_root, 'common'), is_system : true)
|
|
has_asio_header = cxx.has_header('asio.h', include_directories: asio_inc_dir)
|
|
has_asiosys_header = cxx.has_header('asiosys.h', include_directories: asio_inc_dir)
|
|
has_iasiodrv_header = cxx.has_header('iasiodrv.h', include_directories: asio_inc_dir)
|
|
if not has_asio_header or not has_asiosys_header or not has_iasiodrv_header
|
|
if asio_option.enabled()
|
|
error('Failed to find required SDK header(s)')
|
|
else
|
|
subdir_done ()
|
|
endif
|
|
endif
|
|
|
|
asio_deps = [gstaudio_dep, avrt_lib, winmm_lib]
|
|
|
|
gstasio = library('gstasio',
|
|
asio_sources,
|
|
include_directories : [configinc, asio_inc_dir],
|
|
dependencies : asio_deps,
|
|
c_args : gst_plugins_bad_args,
|
|
cpp_args : gst_plugins_bad_args,
|
|
install : true,
|
|
install_dir : plugins_install_dir)
|
|
pkgconfig.generate(gstasio, install_dir : plugins_pkgconfig_install_dir)
|
|
plugins += [gstasio] |