Mercurial > audlegacy-plugins
diff src/Output/sun/sun.c @ 0:13389e613d67 trunk
[svn] - initial import of audacious-plugins tree (lots to do)
| author | nenolod |
|---|---|
| date | Mon, 18 Sep 2006 01:11:49 -0700 |
| parents | |
| children | 088092a52fea |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/Output/sun/sun.c Mon Sep 18 01:11:49 2006 -0700 @@ -0,0 +1,135 @@ +/* + * Copyright (C) 2001 CubeSoft Communications, Inc. + * <http://www.csoft.org> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include "sun.h" +#include "libaudacious/configdb.h" + +#include <glib.h> +#include <glib/gi18n.h> +#include <errno.h> + +struct sun_audio audio; + +OutputPlugin sun_op = +{ + NULL, + NULL, + NULL, /* Description */ + sun_init, + sun_cleanup, + sun_about, + sun_configure, + sun_get_volume, + sun_set_volume, + sun_open, + sun_write, + sun_close, + sun_flush, + sun_pause, + sun_free, + sun_playing, + sun_output_time, + sun_written_time, + NULL +}; + + +OutputPlugin * get_oplugin_info(void) +{ + sun_op.description = g_strdup_printf(_("BSD Sun Driver %s"), + SUN_VERSION); + return (&sun_op); +} + +void sun_init(void) +{ + ConfigDb *cfgfile; + char *s; + + memset(&audio, 0, sizeof(struct sun_audio)); + + cfgfile = bmp_cfg_db_open(); + /* Devices */ + bmp_cfg_db_get_string(cfgfile, "sun", "audio_devaudio", &audio.devaudio); + bmp_cfg_db_get_string(cfgfile, "sun", + "audio_devaudioctl", &audio.devaudioctl); + bmp_cfg_db_get_string(cfgfile, "sun", "audio_devmixer", &audio.devmixer); + + /* Buffering */ + bmp_cfg_db_get_int(cfgfile, "sun", + "buffer_size", &audio.req_buffer_size); + bmp_cfg_db_get_int(cfgfile, "sun", + "prebuffer_size", &audio.req_prebuffer_size); + + /* Mixer */ + bmp_cfg_db_get_string(cfgfile, "sun", "mixer_voldev", &audio.mixer_voldev); + bmp_cfg_db_get_bool(cfgfile, "sun", + "mixer_keepopen", &audio.mixer_keepopen); + + bmp_cfg_db_close(cfgfile); + + /* Audio device path */ + if ((s = getenv("AUDIODEVICE"))) + audio.devaudio = g_strdup(s); + else if (!audio.devaudio || !strcmp("", audio.devaudio)) + audio.devaudio = g_strdup(SUN_DEV_AUDIO); + + /* Audio control device path */ + if (!audio.devaudioctl || !strcmp("", audio.devaudioctl)) + audio.devaudioctl = g_strdup(SUN_DEV_AUDIOCTL); + + /* Mixer device path */ + if ((s = getenv("MIXERDEVICE"))) + audio.devmixer = g_strdup(s); + else if (!audio.devmixer || !strcmp("", audio.devmixer)) + audio.devmixer = g_strdup(SUN_DEV_MIXER); + + if (!audio.mixer_voldev || !strcmp("", audio.mixer_voldev)) + audio.mixer_voldev = g_strdup(SUN_DEFAULT_VOLUME_DEV); + + /* Default buffering settings */ + if (!audio.req_buffer_size) + audio.req_buffer_size = SUN_DEFAULT_BUFFER_SIZE; + if (!audio.req_prebuffer_size) + audio.req_prebuffer_size = SUN_DEFAULT_PREBUFFER_SIZE; + + audio.input = NULL; + audio.output = NULL; + audio.effect = NULL; + + if (pthread_mutex_init(&audio.mixer_mutex, NULL) != 0) + perror("mixer_mutex"); +} + +void sun_cleanup(void) +{ + g_free(audio.devaudio); + g_free(audio.devaudioctl); + g_free(audio.devmixer); + g_free(audio.mixer_voldev); + + if (!pthread_mutex_lock(&audio.mixer_mutex)) + { + if (audio.mixerfd) + close(audio.mixerfd); + pthread_mutex_unlock(&audio.mixer_mutex); + pthread_mutex_destroy(&audio.mixer_mutex); + } +} +
