diff src/alsa/alsa.c @ 2610:1e4d147bdc2b

Combine init.c into alsa.c and use a preprocessor define for configdb ID for consistency.
author Matti Hamalainen <ccr@tnsp.org>
date Wed, 21 May 2008 16:42:00 +0300
parents c730f0212456
children 8b7a44631121
line wrap: on
line diff
--- a/src/alsa/alsa.c	Wed May 21 16:38:10 2008 +0300
+++ b/src/alsa/alsa.c	Wed May 21 16:42:00 2008 +0300
@@ -17,9 +17,64 @@
  */
 
 #include "alsa.h"
+#include <glib.h>
 #include <stdlib.h>
+#include <dlfcn.h>
+#include <ctype.h>
+
+struct alsa_config alsa_cfg;
+
+
+static void alsa_cleanup(void)
+{
+	if (alsa_cfg.pcm_device) {
+		free(alsa_cfg.pcm_device);
+		alsa_cfg.pcm_device = NULL;
+	}
+
+	if (alsa_cfg.mixer_device) {
+		free(alsa_cfg.mixer_device);
+		alsa_cfg.mixer_device = NULL;
+	}
+}
+
+
+static void alsa_init(void)
+{
+	mcs_handle_t *cfgfile;
 
-OutputPlugin alsa_op =
+	memset(&alsa_cfg, 0, sizeof (alsa_cfg));
+	
+	alsa_cfg.buffer_time = 500;
+	alsa_cfg.period_time = 100;
+	alsa_cfg.debug = 0;
+	alsa_cfg.vol.left = 100;
+	alsa_cfg.vol.right = 100;
+
+	cfgfile = aud_cfg_db_open();
+	if (!aud_cfg_db_get_string(cfgfile, ALSA_CFGID, "pcm_device",
+				  &alsa_cfg.pcm_device))
+		alsa_cfg.pcm_device = g_strdup("default");
+	g_message("device: %s", alsa_cfg.pcm_device);
+	if (!aud_cfg_db_get_string(cfgfile, ALSA_CFGID, "mixer_device",
+				  &alsa_cfg.mixer_device))
+		alsa_cfg.mixer_device = g_strdup("PCM");
+	aud_cfg_db_get_int(cfgfile, ALSA_CFGID, "mixer_card", &alsa_cfg.mixer_card);
+	aud_cfg_db_get_int(cfgfile, ALSA_CFGID, "buffer_time", &alsa_cfg.buffer_time);
+	aud_cfg_db_get_int(cfgfile, ALSA_CFGID, "period_time", &alsa_cfg.period_time);
+
+	aud_cfg_db_get_bool(cfgfile, ALSA_CFGID, "debug", &alsa_cfg.debug);
+	aud_cfg_db_close(cfgfile);
+
+	if (dlopen("libasound.so.2", RTLD_NOW | RTLD_GLOBAL) == NULL)
+	{
+		g_message("Cannot load alsa library: %s", dlerror());
+		/* FIXME, this plugin wont work... */
+	}
+}
+
+
+static OutputPlugin alsa_op =
 {
 	.description = "ALSA Output Plugin",
 	.init = alsa_init,
@@ -43,16 +98,3 @@
 OutputPlugin *alsa_oplist[] = { &alsa_op, NULL };
 
 DECLARE_PLUGIN(alsa, NULL, NULL, NULL, alsa_oplist, NULL, NULL, NULL, NULL)
-
-void alsa_cleanup(void)
-{
-	if (alsa_cfg.pcm_device) {
-		free(alsa_cfg.pcm_device);
-		alsa_cfg.pcm_device = NULL;
-	}
-
-	if (alsa_cfg.mixer_device) {
-		free(alsa_cfg.mixer_device);
-		alsa_cfg.mixer_device = NULL;
-	}
-}