diff -Nur audacious-plugins-fedora-2.1-orig/src/alsa-ng/alsa-configure.c audacious-plugins-fedora-2.1/src/alsa-ng/alsa-configure.c
--- audacious-plugins-fedora-2.1-orig/src/alsa-ng/alsa-configure.c 2009-07-07 00:40:36.000000000 +0200
+++ audacious-plugins-fedora-2.1/src/alsa-ng/alsa-configure.c 2009-09-16 00:57:07.000000000 +0200
@@ -245,8 +245,7 @@
void alsaplug_configure(void)
{
- GtkWidget *vbox, *notebook;
- GtkWidget *dev_vbox, *adevice_frame, *adevice_box;
+ GtkWidget * vbox, * adevice_frame, * adevice_box;
GtkWidget *mixer_frame, *mixer_box, *mixer_table, *mixer_card_om;
GtkWidget *mixer_card_label, *mixer_device_label;
GtkWidget *bbox, *ok, *cancel;
@@ -259,31 +258,25 @@
return;
}
- configure_win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
- gtk_signal_connect(GTK_OBJECT(configure_win), "destroy",
- GTK_SIGNAL_FUNC(gtk_widget_destroyed),
- &configure_win);
- gtk_window_set_title(GTK_WINDOW(configure_win),
- _("ALSA Driver configuration"));
- gtk_window_set_policy(GTK_WINDOW(configure_win),
- FALSE, TRUE, FALSE);
- gtk_container_border_width(GTK_CONTAINER(configure_win), 10);
-
- vbox = gtk_vbox_new(FALSE, 10);
- gtk_container_add(GTK_CONTAINER(configure_win), vbox);
-
- notebook = gtk_notebook_new();
- gtk_box_pack_start(GTK_BOX(vbox), notebook, TRUE, TRUE, 0);
-
- dev_vbox = gtk_vbox_new(FALSE, 5);
- gtk_container_set_border_width(GTK_CONTAINER(dev_vbox), 5);
-
- adevice_frame = gtk_frame_new(_("Audio device:"));
- gtk_box_pack_start(GTK_BOX(dev_vbox), adevice_frame, FALSE, FALSE, 0);
-
- adevice_box = gtk_vbox_new(FALSE, 5);
- gtk_container_set_border_width(GTK_CONTAINER(adevice_box), 5);
- gtk_container_add(GTK_CONTAINER(adevice_frame), adevice_box);
+ configure_win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title ((GtkWindow *) configure_win, _("ALSA Output "
+ "Plugin Preferences"));
+ gtk_window_set_type_hint ((GtkWindow *) configure_win,
+ GDK_WINDOW_TYPE_HINT_DIALOG);
+ gtk_window_set_resizable ((GtkWindow *) configure_win, FALSE);
+ gtk_container_set_border_width ((GtkContainer *) configure_win, 6);
+ g_signal_connect ((GObject *) configure_win, "destroy", (GCallback)
+ gtk_widget_destroyed, & configure_win);
+
+ vbox = gtk_vbox_new (FALSE, 6);
+ gtk_container_add ((GtkContainer *) configure_win, vbox);
+
+ adevice_frame = gtk_frame_new (_("Device:"));
+ gtk_box_pack_start ((GtkBox *) vbox, adevice_frame, FALSE, FALSE, 0);
+
+ adevice_box = gtk_vbox_new (FALSE, 6);
+ gtk_container_set_border_width ((GtkContainer *) adevice_box, 6);
+ gtk_container_add ((GtkContainer *) adevice_frame, adevice_box);
devices_combo = gtk_combo_new();
gtk_box_pack_start(GTK_BOX(adevice_box), devices_combo,
@@ -292,12 +285,12 @@
gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(devices_combo)->entry),
alsaplug_cfg.pcm_device);
- mixer_frame = gtk_frame_new(_("Mixer:"));
- gtk_box_pack_start(GTK_BOX(dev_vbox), mixer_frame, FALSE, FALSE, 0);
+ mixer_frame = gtk_frame_new (_("Mixer:"));
+ gtk_box_pack_start ((GtkBox *) vbox, mixer_frame, FALSE, FALSE, 0);
- mixer_box = gtk_vbox_new(FALSE, 5);
- gtk_container_set_border_width(GTK_CONTAINER(mixer_box), 5);
- gtk_container_add(GTK_CONTAINER(mixer_frame), mixer_box);
+ mixer_box = gtk_vbox_new (FALSE, 6);
+ gtk_container_set_border_width ((GtkContainer *) mixer_box, 6);
+ gtk_container_add ((GtkContainer *) mixer_frame, mixer_box);
mixer_table = gtk_table_new(2, 2, FALSE);
gtk_table_set_row_spacings(GTK_TABLE(mixer_table), 5);
@@ -331,9 +324,6 @@
gtk_table_attach(GTK_TABLE(mixer_table), mixer_devices_combo,
1, 2, 1, 2, GTK_FILL | GTK_EXPAND, 0, 0, 0);
- gtk_notebook_append_page(GTK_NOTEBOOK(notebook), dev_vbox,
- gtk_label_new(_("Device settings")));
-
bbox = gtk_hbutton_box_new();
gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END);
gtk_button_box_set_spacing(GTK_BUTTON_BOX(bbox), 5);
diff -Nur audacious-plugins-fedora-2.1-orig/src/alsa-ng/alsa-core.c audacious-plugins-fedora-2.1/src/alsa-ng/alsa-core.c
--- audacious-plugins-fedora-2.1-orig/src/alsa-ng/alsa-core.c 2009-07-07 00:40:36.000000000 +0200
+++ audacious-plugins-fedora-2.1/src/alsa-ng/alsa-core.c 2009-09-16 00:57:07.000000000 +0200
@@ -222,10 +222,14 @@
else
{
gint err = snd_pcm_recover(pcm_handle, wr_frames, 1);
- if (err < 0)
- _ERROR("(write) snd_pcm_recover: %s", snd_strerror(err));
- return;
+ _DEBUG ("snd_pcm_writei error: %s", snd_strerror (wr_frames));
+
+ if (err < 0)
+ {
+ _ERROR ("snd_pcm_recover error: %s", snd_strerror (err));
+ return;
+ }
}
}
}
@@ -299,13 +303,40 @@
if (alsaplug_cfg.mixer_card == NULL)
alsaplug_cfg.mixer_card = g_strdup("default");
+ if (!alsaplug_mixer_new(&amixer))
+ mixer_ready = TRUE;
+
return OUTPUT_PLUGIN_INIT_FOUND_DEVICES;
}
+static void alsaplug_cleanup(void)
+{
+ if (mixer_ready == TRUE)
+ {
+ snd_mixer_detach(amixer, alsaplug_cfg.mixer_card);
+ snd_mixer_close(amixer);
+
+ amixer = NULL;
+ mixer_ready = FALSE;
+ }
+}
+
+#define CHECK_FAIL(expression, name) \
+{ \
+ gint error = expression; \
+ if (error) \
+ { \
+ _ERROR (name " failed: %s.\n", snd_strerror (error)); \
+ snd_pcm_close (pcm_handle); \
+ pcm_handle = NULL; \
+ return -1; \
+ } \
+}
+
static gint
alsaplug_open_audio(AFormat fmt, gint rate, gint nch)
{
- gint err, bitwidth, ringbuf_size;
+ gint err, bitwidth, ringbuf_size, buf_size;
snd_pcm_format_t afmt;
snd_pcm_hw_params_t *hwparams = NULL;
@@ -316,9 +347,6 @@
return -1;
}
- if (!alsaplug_mixer_new(&amixer))
- mixer_ready = TRUE;
-
if ((err = snd_pcm_open(&pcm_handle, alsaplug_cfg.pcm_device, SND_PCM_STREAM_PLAYBACK, 0)) < 0)
{
_ERROR("snd_pcm_open: %s", snd_strerror(err));
@@ -328,27 +356,31 @@
snd_pcm_hw_params_alloca(&hwparams);
snd_pcm_hw_params_any(pcm_handle, hwparams);
- snd_pcm_hw_params_set_access(pcm_handle, hwparams, SND_PCM_ACCESS_RW_INTERLEAVED);
- snd_pcm_hw_params_set_format(pcm_handle, hwparams, afmt);
- snd_pcm_hw_params_set_channels(pcm_handle, hwparams, nch);
- snd_pcm_hw_params_set_rate(pcm_handle, hwparams, rate, 0);
- err = snd_pcm_hw_params(pcm_handle, hwparams);
- if (err < 0)
- {
- _ERROR("snd_pcm_hw_params failed: %s", snd_strerror(err));
- return -1;
- }
+ CHECK_FAIL (snd_pcm_hw_params_set_access (pcm_handle, hwparams,
+ SND_PCM_ACCESS_RW_INTERLEAVED), "snd_pcm_hw_params_set_access");
+ CHECK_FAIL (snd_pcm_hw_params_set_format (pcm_handle, hwparams, afmt),
+ "snd_pcm_hw_params_set_format");
+ CHECK_FAIL (snd_pcm_hw_params_set_channels (pcm_handle, hwparams, nch),
+ "snd_pcm_hw_params_set_channels");
+ CHECK_FAIL (snd_pcm_hw_params_set_rate (pcm_handle, hwparams, rate, 0),
+ "snd_pcm_hw_params_set_rate");
+ CHECK_FAIL (snd_pcm_hw_params (pcm_handle, hwparams), "snd_pcm_hw_params");
bitwidth = snd_pcm_format_physical_width(afmt);
bps = (rate * bitwidth * nch) >> 3;
- ringbuf_size = aud_cfg->output_buffer_size * bps / 1000;
+
+ buf_size = MAX(aud_cfg->output_buffer_size, 100);
+ ringbuf_size = buf_size * bps / 1000;
+
if (alsaplug_ringbuffer_init(&pcm_ringbuf, ringbuf_size) == -1) {
_ERROR("alsaplug_ringbuffer_init failed");
return -1;
}
+
pcm_going = TRUE;
flush_request = -1;
+ paused = FALSE;
audio_thread = g_thread_create(alsaplug_loop, NULL, TRUE, NULL);
return 1;
@@ -371,15 +403,6 @@
g_thread_join(audio_thread);
audio_thread = NULL;
-
- if (mixer_ready == TRUE)
- {
- snd_mixer_detach(amixer, alsaplug_cfg.mixer_card);
- snd_mixer_close(amixer);
-
- amixer = NULL;
- mixer_ready = FALSE;
- }
}
static void
@@ -500,6 +523,7 @@
.description = "ALSA Output Plugin (-ng)",
.probe_priority = 1,
.init = alsaplug_init,
+ .cleanup = alsaplug_cleanup,
.open_audio = alsaplug_open_audio,
.close_audio = alsaplug_close_audio,
.write_audio = alsaplug_write_audio,