浏览代码

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.
tt2468 4 年之前
父节点
当前提交
6e9644ec15

+ 6 - 0
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.

+ 4 - 1
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

+ 5 - 0
libobs/audio-monitoring/null/null-audio-monitoring.c

@@ -1,5 +1,10 @@
 #include <obs-internal.h>
 
+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);

+ 6 - 0
libobs/audio-monitoring/osx/coreaudio-monitoring-supported.c

@@ -0,0 +1,6 @@
+#include "../../obs-internal.h"
+
+bool obs_audio_monitoring_supported(void)
+{
+	return true;
+}

+ 6 - 0
libobs/audio-monitoring/pulse/pulseaudio-monitoring-supported.c

@@ -0,0 +1,6 @@
+#include <obs-internal.h>
+
+bool obs_audio_monitoring_supported(void)
+{
+	return true;
+}

+ 6 - 0
libobs/audio-monitoring/win32/wasapi-monitoring-supported.c

@@ -0,0 +1,6 @@
+#include "../../obs-internal.h"
+
+bool obs_audio_monitoring_supported(void)
+{
+	return true;
+}

+ 2 - 0
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);