From 6e9644ec15ef1be289eedf7b1b78875b14e9d3d6 Mon Sep 17 00:00:00 2001 From: tt2468 Date: Tue, 31 Aug 2021 04:21:20 -0700 Subject: [PATCH] libobs: Add obs_audio_monitoring_supported() Currently, ifdefs are used to determine if monitoring is supported. This is difficult to maintain and restricts plugins from knowing if monitoring is supported by OBS. This adds a runtime function to fix that issue. --- docs/sphinx/reference-core.rst | 6 ++++++ libobs/CMakeLists.txt | 5 ++++- libobs/audio-monitoring/null/null-audio-monitoring.c | 5 +++++ .../audio-monitoring/osx/coreaudio-monitoring-supported.c | 6 ++++++ .../pulse/pulseaudio-monitoring-supported.c | 6 ++++++ libobs/audio-monitoring/win32/wasapi-monitoring-supported.c | 6 ++++++ libobs/obs.h | 2 ++ 7 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 libobs/audio-monitoring/osx/coreaudio-monitoring-supported.c create mode 100644 libobs/audio-monitoring/pulse/pulseaudio-monitoring-supported.c create mode 100644 libobs/audio-monitoring/win32/wasapi-monitoring-supported.c diff --git a/docs/sphinx/reference-core.rst b/docs/sphinx/reference-core.rst index 3d246851e..8d19beada 100644 --- a/docs/sphinx/reference-core.rst +++ b/docs/sphinx/reference-core.rst @@ -425,6 +425,12 @@ Video, Audio, and Graphics --------------------- +.. function:: bool obs_audio_monitoring_supported(void) + + :return: Whether audio monitoring is supported on the current platform + +--------------------- + .. function:: void obs_enum_audio_monitoring_devices(obs_enum_audio_device_cb cb, void *data) Enumerates audio devices which can be used for audio monitoring. diff --git a/libobs/CMakeLists.txt b/libobs/CMakeLists.txt index f26c6bf09..d3b8c8400 100644 --- a/libobs/CMakeLists.txt +++ b/libobs/CMakeLists.txt @@ -114,8 +114,9 @@ if(WIN32) util/windows/HRError.hpp util/windows/WinHandle.hpp) set(libobs_audio_monitoring_SOURCES - audio-monitoring/win32/wasapi-output.c audio-monitoring/win32/wasapi-enum-devices.c + audio-monitoring/win32/wasapi-monitoring-supported.c + audio-monitoring/win32/wasapi-output.c ) set(libobs_audio_monitoring_HEADERS audio-monitoring/win32/wasapi-output.h @@ -138,6 +139,7 @@ elseif(APPLE) util/apple/cfstring-utils.h) set(libobs_audio_monitoring_SOURCES audio-monitoring/osx/coreaudio-enum-devices.c + audio-monitoring/osx/coreaudio-monitoring-supported.c audio-monitoring/osx/coreaudio-output.c ) set(libobs_audio_monitoring_HEADERS @@ -219,6 +221,7 @@ elseif(UNIX) set(libobs_audio_monitoring_SOURCES audio-monitoring/pulse/pulseaudio-wrapper.c audio-monitoring/pulse/pulseaudio-enum-devices.c + audio-monitoring/pulse/pulseaudio-monitoring-supported.c audio-monitoring/pulse/pulseaudio-output.c) else() set(libobs_audio_monitoring_SOURCES diff --git a/libobs/audio-monitoring/null/null-audio-monitoring.c b/libobs/audio-monitoring/null/null-audio-monitoring.c index 7926e84f6..6d99a97d4 100644 --- a/libobs/audio-monitoring/null/null-audio-monitoring.c +++ b/libobs/audio-monitoring/null/null-audio-monitoring.c @@ -1,5 +1,10 @@ #include +bool obs_audio_monitoring_supported(void) +{ + return false; +} + void obs_enum_audio_monitoring_devices(obs_enum_audio_device_cb cb, void *data) { UNUSED_PARAMETER(cb); diff --git a/libobs/audio-monitoring/osx/coreaudio-monitoring-supported.c b/libobs/audio-monitoring/osx/coreaudio-monitoring-supported.c new file mode 100644 index 000000000..8b7351470 --- /dev/null +++ b/libobs/audio-monitoring/osx/coreaudio-monitoring-supported.c @@ -0,0 +1,6 @@ +#include "../../obs-internal.h" + +bool obs_audio_monitoring_supported(void) +{ + return true; +} diff --git a/libobs/audio-monitoring/pulse/pulseaudio-monitoring-supported.c b/libobs/audio-monitoring/pulse/pulseaudio-monitoring-supported.c new file mode 100644 index 000000000..661fcded7 --- /dev/null +++ b/libobs/audio-monitoring/pulse/pulseaudio-monitoring-supported.c @@ -0,0 +1,6 @@ +#include + +bool obs_audio_monitoring_supported(void) +{ + return true; +} diff --git a/libobs/audio-monitoring/win32/wasapi-monitoring-supported.c b/libobs/audio-monitoring/win32/wasapi-monitoring-supported.c new file mode 100644 index 000000000..8b7351470 --- /dev/null +++ b/libobs/audio-monitoring/win32/wasapi-monitoring-supported.c @@ -0,0 +1,6 @@ +#include "../../obs-internal.h" + +bool obs_audio_monitoring_supported(void) +{ + return true; +} diff --git a/libobs/obs.h b/libobs/obs.h index da7e4dd4e..504ca4bd5 100644 --- a/libobs/obs.h +++ b/libobs/obs.h @@ -743,6 +743,8 @@ EXPORT bool obs_obj_is_private(void *obj); typedef bool (*obs_enum_audio_device_cb)(void *data, const char *name, const char *id); +EXPORT bool obs_audio_monitoring_supported(void); + EXPORT void obs_enum_audio_monitoring_devices(obs_enum_audio_device_cb cb, void *data);