diff src/OSS4/OSS4.c @ 2695:c2861c84f850

Perform same cleanups as in "old" OSS plugin.
author Matti Hamalainen <ccr@tnsp.org>
date Fri, 06 Jun 2008 15:02:21 +0300
parents 8d10c920d26d
children 3134a0987162
line wrap: on
line diff
--- a/src/OSS4/OSS4.c	Fri Jun 06 15:01:35 2008 +0300
+++ b/src/OSS4/OSS4.c	Fri Jun 06 15:02:21 2008 +0300
@@ -26,7 +26,81 @@
 #include <audacious/i18n.h>
 #include <stdlib.h>
 
-OutputPlugin oss_op = {
+OSSConfig oss_cfg;
+
+static void oss_about(void)
+{
+    static GtkWidget *dialog;
+
+    if (dialog != NULL)
+        return;
+
+    dialog = audacious_info_dialog(_("About OSSv4 Driver"),
+                               _("Audacious OSSv4 Driver\n\n"
+                                 "Based on the OSSv3 Output plugin,\n" 
+                                 "Ported to OSSv4's VMIX by Cristi Magherusan <majeru@gentoo.ro>\n\n"
+                                 "This program is free software; you can redistribute it and/or modify\n"
+                                 "it under the terms of the GNU General Public License as published by\n"
+                                 "the Free Software Foundation; either version 2 of the License, or\n"
+                                 "(at your option) any later version.\n"
+                                 "\n"
+                                 "This program is distributed in the hope that it will be useful,\n"
+                                 "but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+                                 "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n"
+                                 "GNU General Public License for more details.\n"
+                                 "\n"
+                                 "You should have received a copy of the GNU General Public License\n"
+                                 "along with this program; if not, write to the Free Software\n"
+                                 "Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,\n"
+                                 "USA."), _("Ok"), FALSE, NULL, NULL);
+    g_signal_connect(G_OBJECT(dialog), "destroy",
+                     G_CALLBACK(gtk_widget_destroyed), &dialog);
+}
+
+static void oss_init(void)
+{
+    mcs_handle_t *db;
+
+    memset(&oss_cfg, 0, sizeof(OSSConfig));
+
+    oss_cfg.audio_device = 0;
+    oss_cfg.buffer_size = 3000;
+    oss_cfg.prebuffer = 25;
+    oss_cfg.use_alt_audio_device = FALSE;
+    oss_cfg.alt_audio_device = NULL;
+
+    if ((db = aud_cfg_db_open())) {
+        aud_cfg_db_get_int(db, "OSS", "audio_device", &oss_cfg.audio_device);
+        aud_cfg_db_get_int(db, "OSS", "buffer_size", &oss_cfg.buffer_size);
+        aud_cfg_db_get_int(db, "OSS", "prebuffer", &oss_cfg.prebuffer);
+        aud_cfg_db_get_bool(db, "OSS", "save_volume", &oss_cfg.save_volume);
+        aud_cfg_db_get_bool(db, "OSS", "use_alt_audio_device",
+                            &oss_cfg.use_alt_audio_device);
+        aud_cfg_db_get_string(db, "OSS", "alt_audio_device",
+                              &oss_cfg.alt_audio_device);
+        aud_cfg_db_get_int(db, "OSS", "saved_volume", &vol);
+        aud_cfg_db_close(db);
+    }
+        //volume gets saved anyway, but is ignored unless "saved_volume" is true
+        if(!oss_cfg.save_volume)
+            vol=0x6464;  //maximum
+}
+
+static void oss_cleanup(void)
+{
+    mcs_handle_t *db;
+    db = aud_cfg_db_open();
+    aud_cfg_db_set_int(db, "OSS", "saved_volume", vol);
+    aud_cfg_db_close(db);
+
+    if (oss_cfg.alt_audio_device) {
+        g_free(oss_cfg.alt_audio_device);
+        oss_cfg.alt_audio_device = NULL;
+    }
+   
+}
+
+static OutputPlugin oss4_op = {
     .description = "OSS4 Output Plugin",                      /* Description */
     .init = oss_init,
     .cleanup = oss_cleanup,
@@ -46,20 +120,6 @@
     .tell_audio = oss_tell
 };
 
-OutputPlugin *oss_oplist[] = { &oss_op, NULL };
-
-DECLARE_PLUGIN(OSS4, NULL, NULL, NULL, oss_oplist, NULL, NULL, NULL, NULL);
+static OutputPlugin *oss4_oplist[] = { &oss4_op, NULL };
 
-void oss_cleanup(void)
-{
-    mcs_handle_t *db;
-    db = aud_cfg_db_open();
-    aud_cfg_db_set_int(db, "OSS", "saved_volume", vol);
-    aud_cfg_db_close(db);
-
-    if (oss_cfg.alt_audio_device) {
-        g_free(oss_cfg.alt_audio_device);
-        oss_cfg.alt_audio_device = NULL;
-    }
-   
-}
+DECLARE_PLUGIN(OSS4, NULL, NULL, NULL, oss4_oplist, NULL, NULL, NULL, NULL);