aboutsummaryrefslogtreecommitdiff
path: root/plugins/dfsound/out.c
diff options
context:
space:
mode:
authornotaz2012-07-30 21:29:29 +0300
committernotaz2012-07-31 01:31:34 +0300
commit07c13dfd11cbd45e96a5c21cd88ccd44601678ea (patch)
tree8d9713246288c00ff5edb6e6301d710ed36bfa10 /plugins/dfsound/out.c
parentf05d6ca255c80170e4e5fc61cc48d87e013b8807 (diff)
downloadpcsx_rearmed-07c13dfd11cbd45e96a5c21cd88ccd44601678ea.tar.gz
pcsx_rearmed-07c13dfd11cbd45e96a5c21cd88ccd44601678ea.tar.bz2
pcsx_rearmed-07c13dfd11cbd45e96a5c21cd88ccd44601678ea.zip
allow multiple sound drivers to be compiled
Diffstat (limited to 'plugins/dfsound/out.c')
-rw-r--r--plugins/dfsound/out.c51
1 files changed, 51 insertions, 0 deletions
diff --git a/plugins/dfsound/out.c b/plugins/dfsound/out.c
new file mode 100644
index 0000000..150d718
--- /dev/null
+++ b/plugins/dfsound/out.c
@@ -0,0 +1,51 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include "out.h"
+
+#define MAX_OUT_DRIVERS 5
+
+static struct out_driver out_drivers[MAX_OUT_DRIVERS];
+struct out_driver *out_current;
+static int driver_count;
+
+#define REGISTER_DRIVER(d) { \
+ extern void out_register_##d(struct out_driver *drv); \
+ out_register_##d(&out_drivers[driver_count++]); \
+}
+
+void SetupSound(void)
+{
+ int i;
+
+ if (driver_count == 0) {
+#ifdef HAVE_OSS
+ REGISTER_DRIVER(oss);
+#endif
+#ifdef HAVE_ALSA
+ REGISTER_DRIVER(alsa);
+#endif
+#ifdef HAVE_SDL
+ REGISTER_DRIVER(sdl);
+#endif
+#ifdef HAVE_PULSE
+ REGISTER_DRIVER(pulse);
+#endif
+#ifdef HAVE_LIBRETRO
+ REGISTER_DRIVER(libretro);
+#endif
+ REGISTER_DRIVER(none);
+ }
+
+ for (i = 0; i < driver_count; i++)
+ if (out_drivers[i].init() == 0)
+ break;
+
+ if (i < 0 || i >= driver_count) {
+ printf("the impossible happened\n");
+ abort();
+ }
+
+ out_current = &out_drivers[i];
+ printf("selected sound output driver: %s\n", out_current->name);
+}
+